Как изменить фоновый цвет общего диалога

Классы общих диалогов ( 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);
}
}

 

 
« Предыдущая статья   Следующая статья »