Классы общих диалогов ( File Open и Print ) содержащиеся в MFC можно использовать для изменения фонового цвета этих общих диалогов. Для этого необходимо наследовать MFC класс, от одного из классов для стандартных диалогов, а затем переопределить функции-члены OnCtlColor() и OnDestroy(). Нижеприведённый пример использует класс CFileDialog стандартного диалога. Чтобы сгенерировать функцию-обработчик для сообщения WM_CTLCOLOR, использовался визард ( Class Wizard ). Функция называется "CMyDlg::OnCtlColor()". Пример кода // mydlg.h : заголовочный файл // #include <dlgs.h> ////////////////////////////////////////////////////////////////////// // CMyDlg dialog
class CMyDlg : public CFileDialog { // Construction public: CMyDlg(CWnd* pParent = NULL); // standard constructor
// Добавляем указатель CBrush для хранения новой кисти фона CBrush m_pBkBrush;
// Данные диалога //{{AFX_DATA(CMyDlg) enum { IDD = FILEOPENORD }; // NOTE: the ClassWizard will add data members here //}}AFX_DATA
// Implementation protected: virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV support
// Generated message map functions //{{AFX_MSG(CMyDlg) afx_msg HBRUSH OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor); //}}AFX_MSG DECLARE_MESSAGE_MAP() };
// mydlg.cpp : исходник // #include "stdafx.h" #include <afxdlgs.h> #include "mydlg.h"
#ifdef _DEBUG #undef THIS_FILE static char BASED_CODE THIS_FILE[] = __FILE__; #endif
////////////////////////////////////////////////////////////////////// // CMyDlg dialog
CMyDlg::CMyDlg(CWnd* pParent /*=NULL*/) : CFileDialog(TRUE, NULL, NULL, OFN_HIDEREADONLY) { //{{AFX_DATA_INIT(CMyDlg) // NOTE: the ClassWizard will add member initialization here //}}AFX_DATA_INIT }
void CMyDlg::DoDataExchange(CDataExchange* pDX) { CDialog::DoDataExchange(pDX); //{{AFX_DATA_MAP(CMyDlg) // NOTE: the ClassWizard will add DDX and DDV calls here //}}AFX_DATA_MAP }
BEGIN_MESSAGE_MAP(CMyDlg, CFileDialog) //{{AFX_MSG_MAP(CMyDlg) ON_WM_CTLCOLOR() //}}AFX_MSG_MAP END_MESSAGE_MAP()
////////////////////////////////////////////////////////////////////// // Обработчики сообщений для CMyDlg
HBRUSH CMyDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor) { switch (nCtlColor) {
case CTLCOLOR_STATIC: // Устанавливаем цвет статического текста белый на синем. pDC->SetTextColor(RGB(255, 255, 255)); pDC->SetBkColor(RGB(0, 0, 255)); // Drop through to return the background brush.
case CTLCOLOR_DLG: return (HBRUSH)(m_pBkBrush.GetSafeHandle());
default: return CFileDialog::OnCtlColor(pDC, pWnd, nCtlColor); } } |