小弟添加背景色的程序是这样的,请问各位大侠:如何实现按一次键,改变一下对话框的背景色??譬如: 按一下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;
}

解决方案 »

  1.   

    1.响应WM_KEYDOWN
    2.WM_KEYDOWN函数中判断是否是table键,如果是就生成随机CBrush,在赋值给m_brush,最后发送消息SendMessage(WM_CTLCOLOR)
      

  2.   

    谢谢咯,,小弟刚学MFC没多久,对如何"生成随机CBrush,再赋值给m_brush,最后发送消息SendMessage(WM_CTLCOLOR)"  这一段不怎么了解,能不能给点代码提示一下!
      

  3.   

    小弟写到这就不会了,能不能帮我添加或修改一下啊!!     case VK_TAB:
    {
    CBrush m_brush1;
    m_brush1.CreateSolidBrush(RGB(250,230,14));

        SendMessage(WM_CTLCOLOR);
    }
    break;
      

  4.   

    void CcsDlg::OnKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags)
    {
    // 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);
    }
      

  5.   

    1。当然可以,先建立几个你需要的brush,根据条件返回不同的brush.
    2。按右上方的管理