小弟添加背景色的程序是这样的,请问各位大侠:如何实现按一次键,改变一下对话框的背景色??譬如: 按一下tab键,对话框由绿色变成红色,再按一下,由红色变成黄色!!重载OnCtlColor (CDC* pDC, CWnd* pWnd, UINT nCtlColor),
即WM_CTLCOLOR消息。具体步骤如下
---- ①在CExampleDlgDlg的头文件中,添加一CBrush的成员变量: class CExampleDlgDlg : public CDialog
{
...
protected:
CBrush m_brush;
...
};---- ②在OnInitDialog()函数中添加如下代码:
BOOL CExampleDlgDlg::OnInitDialog()
{
...
// TODO: Add extra initialization here
m_brush.CreateSolidBrush(RGB(0, 255, 0)); // 生成一绿色刷子
...
}
---- 步骤③利用ClassWizard重载OnCtlColor(…)(即WM_CTLCOLOR消息): HBRUSH CExampleDlgDlg::OnCtlColor
(CDC* pDC, CWnd* pWnd, UINT nCtlColor)
{
HBRUSH hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor);//在这加一条是否为对话框的判断语句
if(nCtlColor ==CTLCOLOR_DLG)
return m_brush; //返加绿色刷子
return hbr;
}
即WM_CTLCOLOR消息。具体步骤如下
---- ①在CExampleDlgDlg的头文件中,添加一CBrush的成员变量: class CExampleDlgDlg : public CDialog
{
...
protected:
CBrush m_brush;
...
};---- ②在OnInitDialog()函数中添加如下代码:
BOOL CExampleDlgDlg::OnInitDialog()
{
...
// TODO: Add extra initialization here
m_brush.CreateSolidBrush(RGB(0, 255, 0)); // 生成一绿色刷子
...
}
---- 步骤③利用ClassWizard重载OnCtlColor(…)(即WM_CTLCOLOR消息): HBRUSH CExampleDlgDlg::OnCtlColor
(CDC* pDC, CWnd* pWnd, UINT nCtlColor)
{
HBRUSH hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor);//在这加一条是否为对话框的判断语句
if(nCtlColor ==CTLCOLOR_DLG)
return m_brush; //返加绿色刷子
return hbr;
}
2.WM_KEYDOWN函数中判断是否是table键,如果是就生成随机CBrush,在赋值给m_brush,最后发送消息SendMessage(WM_CTLCOLOR)
{
CBrush m_brush1;
m_brush1.CreateSolidBrush(RGB(250,230,14));
SendMessage(WM_CTLCOLOR);
}
break;
{
// TODO: 在此添加消息处理程序代码和/或调用默认值
if(nChar==VK_TAB)
{
m_brush.Detach();
m_brush.CreateSolidBrush(RGB(rand()%255,rand()%255,rand()%255));
Invalidate();
}
CDialog::OnKeyDown(nChar, nRepCnt, nFlags);
}
////////////////////////////////////////////////////
BOOL CcsDlg::PreTranslateMessage(MSG* pMsg)
{
// TODO: 在此添加专用代码和/或调用基类
if(pMsg->message==WM_KEYDOWN)
SendMessage(pMsg->message,pMsg->wParam,pMsg->lParam); return CDialog::PreTranslateMessage(pMsg);
}
2。按右上方的管理