MFC修改控件|————此方法无法改变CButton类

tech2026-06-09  3

转载https://www.cnblogs.com/kex1n/p/3998537.html 此方法无法改变CButton类

对CButton进行修改后如下图,正在寻找修改CButton方法

MFC应用程序中,要改变控件的背景色可通过重载OnCtlColor()函数来实现。方法是在该函数中设置所需颜色后再返回一个画刷句柄便可 重绘控件背景色。OnCtlColor()函数对于控件背景色的处理是通过捕捉相应的控件消息来实现的。

常用的此类消息有: CTLCOLOR_DLG 对话框 CTLCOLOR_EDIT 编辑框 CTLCOLOR_LISTBOX 列表框 CTLCOLOR_MSGBOX 消息框 CTLCOLOR_SCROLLBAR 滑动条 CTLCOLOR_STATIC 静态文本框、矩形等。

主要有三步:

声明消息响应函数 //{{AFX_MSG(CMyDialog) afx_msg HBRUSH OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor); …… //}}AFX_MSG

DECLARE_MESSAGE_MAP()

实现消息响应函数 以编辑框举例:

HBRUSH CMyDialog::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor) { HBRUSH hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor); // CtlColor(pDC, pWnd, nCtlColor); if(nCtlColor == CTLCOLOR_EDIT && pWnd->GetDlgCtrlID() == IDC_EDIT1) { pDC->SetTextColor(RGB(0,0,255)); pDC->SetBkColor(RGB(255,0,0));//设置文本背景色 pDC->SetBkMode(TRANSPARENT);//设置背景透明 hbr = ::CreateSolidBrush(RGB(255,0,0)); } return hbr; }

添加消息映射 BEGIN_MESSAGE_MAP(CMyDialog, CDialog) ON_WM_CTLCOLOR() END_MESSAGE_MAP()

注意:此方法不适用于按纽控件。

最新回复(0)