通过点击按钮来弹出颜色对话框,然后根据选择的颜色来动态修改对话框的背景颜色,怎么实现该过程?

解决方案 »

  1.   

    OnEraseBkgnd(CDC *pDC)
    color 全局变量 
    这个function设置 bg color然后按下button的响应,你就改变 color的值
      

  2.   

    添加类成员变量CBrush m_brush;
    m_brush.CreateSolidBrush(RGB(255, 255, 255));
    响应WM_CTLCOLOR()事件
    HBRUSH CXXDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)
    {
    HBRUSH hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor); if(nCtlColor ==CTLCOLOR_DLG)
    return m_brush;

    return hbr;
    }void CXXDlg::OnBnClickedbtn()
    {
    //把颜色选择框的值填到红色部分中
    m_brush.CreateSolidBrush(RGB(0, 255, 255));
    Invalidate();
    }
      

  3.   

    谢谢楼上的朋友,我就因为没有调用Invalidate();才发生错误的,感谢你的帮助
      

  4.   

    那是因为你点完第一个按钮之后,再点第二个按钮的时候你的m_brush没有释放掉。 ////在上面代码的基础上更改如下void CMy1Dlg::OnButton1() 
    {
    // TODO: Add your control notification handler code here
    m_brush.DeleteObject();     //增加这句
    m_brush.CreateSolidBrush(RGB(0, 255, 255)); 
    Invalidate(); }
    void CMy1Dlg::OnButton2() 
    {
    // TODO: Add your control notification handler code here
            m_brush.DeleteObject();  //增加这句
    m_brush.CreateSolidBrush(RGB(0, 255, 0)); 
    Invalidate(); 
    }