Как изменить фоновый цвет общего диалога
Классы общих диалогов ( 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);
}
}
|