2 jujiawu1024 jujiawu1024 于 2016.02.07 22:53 提问

OnCtlColor函数关于颜色调用的问题

OnCtlColor函数怎么保存CColorDiaog对话框设置的对话框?我不希望它每次都调用。谢谢

4个回答

caozhy
caozhy   Ds   Rxr 2016.02.08 08:36
已采纳
 void CApp2Dlg::OnButton1() 
{
    // TODO: Add your control notification handler code here
    CColorDialog colorDia;
     if (colorDia.DoModal() == IDOK)
     {
          m_color = colorDia.GetColor();
          GetDlgItem(IDC_STATIC_1)->InvalidateRect(NULL);
     }
}

HBRUSH CApp2Dlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor) 
{
    HBRUSH hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor);
    m_brush.CreateSolidBrush(m_color);
    // TODO: Change any attributes of the DC here
    UpdateData(TRUE);
    if (pWnd->GetDlgCtrlID() == IDC_STATIC_1)
    {
        pDC->SetBkColor(m_color);
        pDC->SetBkMode(OPAQUE);
        return m_brush;
    }

    UpdateData(FALSE);

    // TODO: Return a different brush if the default is not desired
    return hbr;
}

91program
91program 回复caozhy: 将爷爷的思路实现成代码,孙子是不是感觉自己“很牛”!
接近 2 年之前 回复
caozhy
caozhy   Ds   Rxr 2016.02.08 08:36

头文件

 class CApp2Dlg : public CDialog
{
//加上
private: unsigned long m_color;
         CBrush m_brush;
...
91program
91program 回复caozhy: 将爷爷的思路实现成代码,孙子是不是感觉自己“很牛”!
接近 2 年之前 回复
caozhy
caozhy   Ds   Rxr 2016.02.08 08:37

图片说明

91program
91program   Ds   Rxr 2016.02.08 00:37

将 CColorDialog 的返回值保存在全局变量中,此全局变量给一个特殊的初始值就可以完成第一次调用颜色对话框。

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!