CFormView::OnCtlColor 控件背景颜色问题

weixin_38062058 2017-09-22 11:26:10
很久没有提出过疑问,这个问题就想搞清楚怎么回事.
在继承CDialog的窗体中使用如下代码改变一个GroupBox控件的背景颜色是有效的
    HBRUSH hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor);

    if (pWnd->GetDlgCtrlID() == IDC_STATIC_GB)
    {
        pDC->SetBkMode(TRANSPARENT);
        hbr= CreateSolidBrush(RGB(255, 0, 214));

        return hbr;
    }
同样的代码放在继承的CFormView中无效果

    HBRUSH hbr = CFormView::OnCtlColor(pDC, pWnd, nCtlColor);
    if (pWnd->GetDlgCtrlID() == IDC_STATIC_GB)
    {
        pDC->SetBkMode(TRANSPARENT);
        hbr= CreateSolidBrush(RGB(255, 0, 214));

        return hbr;
    }
其它按钮CButton控件也是无法改变颜色只能有Static的Label控件可以改变颜色.不知是何原因?CDialog与CFormView中处理不一样?
==============================================
另外以前在vs2008中使用继承一个新控件响应WM_CTLCOLOR消息却是可以改变颜色的.后来使用vs2015同样的代码却无效果.非常奇怪.

        HBRUSH hbr = __super::OnCtlColor(pDC, GetParent(), nCtlColor);

        if (m_propFont != NULL && GetPropFontColor() > 0)
        {
            pDC->SetTextColor(GetPropFontColor());
        }
        if (IsPropExist(PROP_FUNC_TRAN_BACK) && GetPropTranBack())
        {
            pDC->SetBkMode(TRANSPARENT);
            return (HBRUSH)GetStockObject(NULL_BRUSH);
        }else if (m_propBackColor != NULL && GetPropHBrush() != NULL)
        {
            pDC->SetBkMode(TRANSPARENT);

            //pDC->SetTextColor(RGB(255, 0, 0));
            //pDC->SetBkColor(RGB(255, 255, 255));
            //pDC->SetBkMode(TRANSPARENT);

            return GetPropHBrush();
        }

        return hbr;
...全文
15 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复

476

社区成员

发帖
与我相关
我的任务
社区描述
其他技术讨论专区
其他 技术论坛(原bbs)
社区管理员
  • 其他技术讨论专区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧