在VC編程中要改變控件(諸如CView
一
CTLCOLOR_DLG 對話框
CTLCOLOR_EDIT 編輯框
CTLCOLOR_LISTBOX 列表框
CTLCOLOR_MSGBOX 消息框
CTLCOLOR_SCROLLBAR 滑動條
CTLCOLOR_STATIC 靜態文本框
以下示例代碼說明如何更改以上控件的背景色
//CmyDialog
class CMyDialog : public Cdialog //派生自己的對話框類
{
……
// Implementation
protected:
// Generated message map functions
//{{AFX_MSG(CMyDialog)
afx_msg HBRUSH OnCtlColor(CDC* pDC
……
//}}AFX_MSG
DECLARE_MESSAGE_MAP()
};
//CmyDialog
……
HBRUSH CMyDialog::OnCtlColor(CDC* pDC
{
switch (nCtlColor) {
case CTLCOLOR_EDIT:
case CTLCOLOR_MSGBOX:
case CTLCOLOR_DLG :
case CTLCOLOR_EDIT : //在此加入你想要改變背景色的控件消息
pDC
HBRUSH B = CreateSolidBrush(COLOR); //COLOR是你想設置的顏色
return (HBRUSH) B;
default: //其他控件設置自己默認的顏色和背景刷
return CDialog::OnCtlColor(pDC
}
}
說明
二
以下通過定制方形彩色按紐來說明
第一步
//CcolorButton
class CColorButton : public CButton
{
DECLARE_DYNAMIC(CColorButton)
public:
CColorButton();
virtual ~CColorButton();
BOOL Attach(const UINT nID
const COLORREF BGColor = RGB(
const COLORREF FGColor = RGB(
);
protected:
virtual void DrawItem(LPDRAWITEMSTRUCT lpDIS); //重定義虛擬函數DrawItem
void DrawFrame(CDC *DC
void DrawFilledRect(CDC *DC
void DrawLine(CDC *DC
void DrawLine(CDC *DC
void DrawButtonText(CDC *DC
//繪制按紐上的文本
COLORREF GetFGColor() { return m_fg; }
COLORREF GetBGColor() { return m_bg; }
private:
COLORREF m_fg
};
#endif
第二步
//CcolorButton
……
// CColorButton
IMPLEMENT_DYNAMIC(CColorButton
CColorButton::CColorButton()
{ }
CColorButton::~CColorButton()
{
}
//定義Attach()函數
BOOL CColorButton::Attach(const UINT nID
{
if (!SubclassDlgItem(nID
return FALSE;
m_fg = FGColor;
m_bg = BGColor;
return TRUE;
}
//重載DrawItem()
void CColorButton::DrawItem(LPDRAWITEMSTRUCT lpDIS)
{
CDC* pDC = CDC::FromHandle(lpDIS
UINT state = lpDIS
CRect focusRect
focusRect
btnRect
// 設置表示按紐被選中的虛線框
focusRect
focusRect
focusRect
focusRect
// 按紐標題
const int bufSize =
TCHAR buffer[bufSize];
GetWindowText(buffer
// 繪制並標志按紐
DrawFilledRect(pDC
DrawFrame(pDC
DrawButtonText(pDC
// 如果按紐處於選中狀態則在其上繪制選中虛線框
if (state & ODS_FOCUS) {
DrawFocusRect(lpDIS
}
}
void CColorButton::DrawFrame(CDC *DC
{ //繪制按紐
DrawLine(DC
DrawLine(DC
//以下繪制按紐的外圍框線以使按紐有立體感
DrawLine(DC
//繪制按紐左框線和上框線
DrawLine(DC
//繪制按紐右框線和下框線
}
//用色彩填充按紐框
void CColorButton::DrawFilledRect(CDC *DC
{
CBrush B;
B
DC
}
// DrawLine用於繪制按紐
void CColorButton::DrawLine(CDC *DC
{
……
}
void CColorButton::DrawLine(CDC *DC
{
……
}
//繪制按紐文本
void CColorButton::DrawButtonText(CDC *DC
{
COLORREF prevColor = DC
DC
DC
DC
}
第三步
定制任意對話框CColorDlg
//CColorDlg
class CColorDlg : public CDialog
{
…
// Implementation
protected:
CColorButton m_btnOK;
}
//CColorDlg
……
BOOL CColorBtnSampleDlg::OnInitDialog()
{
CDialog::OnInitDialog();
……
VERIFY(m_btnOK
……
}
From:http://tw.wingwit.com/Article/program/net/201311/11539.html