• VC、MFC中设置控件的背景色、标题、字体颜色、字体要注意的地方[转]


    在MFC中设置控件的背景色、字体、字体颜色、标题等属性主要是利用OnCtlColor函数来实现。

    如:
    HBRUSH CAlarm::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor) 
    {
    HBRUSH hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor);
    // TODO: Change any attributes of the DC here
    //设置静态控件的背景色和文本颜色
    if (pWnd->GetDlgCtrlID() == IDC_STATIC_SHOW_MSG)
    {
    pWnd->SetWindowText("123");
    pDC->SetBkMode(TRANSPARENT);
    pDC->SetTextColor(RGB(0,0,0));
    //m_hStaticBkColor是CBrush类类型的变量,要在构造函数中初始化为指定的颜色
    hbr = m_hStaticBkColor;
    }
    // TODO: Return a different brush if the default is not desired
    return hbr;
    }
    注意在OnCtlColor函数中:
    控件的标题、字体通过CWnd类的SetWindowText和SetFont函数来设置。
    控件的背景色通过添加一个CBrush类类型的画刷来设置,控件的字体背景色、字体颜色通过CDC类的SetBkMode、SetBkColor和SetTextColor函数来设置。此外,不要在OnCtlColor函数中调用CDC类的TextOut函数,如果调用了SetBkMode(TRANSPARENT)再去调用SetBkColor就没有作用了(没有先后顺序,SetBkMode(TRANSPARENT)可以在随意的位置)。
     
     
    此外,我们有时会在OnPaint或OnInitDialog或OnInitialUpdate函数中设置控件的外观属性。
    但是在OnPaint函数中设置控件的字体颜色(即SetBkMode和SetTextColor)只能在TextOut函数中有效,在SetWindowText函数中是无效的。TextOut函数一般在OnPaint函数中调用的,并且可以通过SetBkMode和SetTextColor设置字体的颜色和字体的背景色。当然SetWindowText也可以在OnPaint函数中调用,只不过就不能在OnPaint函数中通过SetBkMode和SetTextColor设置字体的颜色和字体的背景色。
     
     
    因此,改变控件的外观属性主要是在OnCtlColor函数中实现,当然还要据实际情况,有可能在OnPaint或OnInitDialog或OnInitialUpdate函数中设置控件的外观属性。此外,如果要改变控件背景色,除了在OnCtlColor中利用CBrush类类型的画刷来设置外,还可以利用CDC类型的FillSolidRect函数在合适的函数中来设置。至于字体的设置,据实际情况在合适的函数中设置,如果要用到TextOut的,就在OnPaint函数中调用吧。
     
    转自:http://blog.sina.com.cn/s/blog_6230f1a30100wc21.html
  • 相关阅读:
    es从aws迁移阿里云问题总结
    MySQL & Canal流程&架构梳理
    这么优雅的Java ORM没见过吧!
    Five86-1靶机渗透实战
    从信息泄露到域控
    禁用浏览器在触摸屏上双指缩放的功能
    使用java动态字节码技术简单实现arthas的trace功能。
    apisix网关-构建docker镜像构建及插件化开发
    query扩展方法汇总
    为什么.NET Standard 仍然有意义?
  • 原文地址:https://www.cnblogs.com/vranger/p/3568880.html
Copyright © 2020-2023  润新知