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币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!
其他相关推荐
VC 使用OnCtlColor函数来改变控件颜色
在MFC类库提供了CWnd::OnCtlColor函数,在工作框架的子窗口被重画时将调用该成员函数.因此可以重载WM_CTLCOLOR消息的响应函数.此函数的原型:   afx_msg HBRUSH OnCtlColor(CDC *pDC,CWnd *pWnd,UINT nCtlColor);            参数nCtlColor用于指定控件的类型,可以是:            .
MFC OnCtlColor函数用来改变控件颜色
MFC类库提供了CWnd::OnCtlColor函数,在工作框架的子窗口被重画时将调用该成员函数.因此可以重载WM_CTLCOLOR消息的响应函数.此函数的原型:afx_msg HBRUSH OnCtlColor(CDC *pDC,CWnd *pWnd,UINT nCtlCo
OnCtlColor函数的用法
从函数名易看出,OnCtlColor函数的作用是改变(或响应)控件的颜色~~ 多用在对话框应用程序(或基于CFormView的应用程序)中,希望在对话框显示时,里面的控件的颜色可以设置为我们想要的颜色~~ 在OnInitDialog() 函数中,我们一般设置好控件的字体~~ 在OnPaint()函数中,用来画图,或者是加载一幅位图~~ 我们往控件里拖入了很多控件,那么控件的颜色可以在哪里更
不进OnCtlColor()函数
在一个对话框上有CmyStatic控件,此控件继承于Cstatic。因为我们在继承类中自己处理了Onpaint()函数,消息好像被截断了,所以不进对话框的OnCtlColor()的函数。有两种解决方法:1.在CMyStatic的Onpaint()函数中调用SendMessage(WM_CTLCOLORSTATIC,...).2.在CMyStatic中响应ON_WM_CTLCOLOR_REF
mfc edit控件无法设置颜色。无法进入到OnCtlColor()函数
1.  Edit控件在设置颜色时,需要将Edit属性中的disable设置为false,若设置为true,则被mfc当成了static控件进行处理,每次只会进入到CTLCOLOR_STATIC控件类型中。 HBRUSH CHd3712Dlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor) { HBRUSH hbr = CDialog
VC 使用OnCtlColor函数来改变控件颜色
在MFC类库提供了CWnd::OnCtlColor函数,在工作框架的子窗口被重画时将调用该成员函数.因此可以重载WM_CTLCOLOR消息的响应函数.此函数的原型:<br />    afx_msg HBRUSH OnCtlColor(CDC *pDC,CWnd *pWnd,UINT nCtlColor); <br />                    参数nCtlColor用于指定控件的类型,可以是:<br />                    .CTLCOLOR_BTN           
为什么自定义的CEdit类无法响应OnCtlColor消息?
想自定义一个编辑框类,改变系统编辑框的背景和文字颜色,但却无法响应到OnCtlColor消息。 PC平台下运行正常,怎么window mobile 6环境下就会出现这种错误啊?
MFC中OnCtlColor
MFC中OnCtlColor(转载) 在MFC类库提供了CWnd::OnCtlColor函数,在工作框架的子窗口被重画时将调用该成员函数.因此可以重载WM_CTLCOLOR消息的响应函数.此函数的原型:   afx_msg HBRUSH OnCtlColor(CDC *pDC,CWnd *pWnd,UINT nCtlColor);            参数nCtlColor用于
MFC 消息之WM_CTLCOLOR和OnCtlColor消息的使用方法总结
很多人都觉得自己的程序的界面不那么美观,往往VC默认产生的对话框比较单调,因此很多人往往找到很多其它的控件对对话框进行美化修饰,例如给静态控件设置字体,设置背景颜色等等, 其实这些完全可以由VC自己的WM_CTLCOLOR消息来完成! WM_CTLCOLOR消息用来完成对EDIT、STATIC、BUTTON等控件设置背景和字体颜色,其用法如下: 1.首先在自己需要设置界面的对话框上点击
如何在OnCtlColor中改变控件颜色
在MFC类库提供了CWnd::OnCtlColor函数,在子窗口被重画时将调用该成员函数,因此可以重载WM_CTLCOLOR消息的响应函数。 函数的原型:afx_msg HBRUSH OnCtlColor(CDC *pDC,CWnd *pWnd,UINT nCtlColor); 参数nCtlColor用于指定控件的类型如下: CTLCOLOR_BTN