from http://www.cppblog.com/FandyM/archive/2010/07/21/120972.aspx

MFC应用程序中,要改变控件的背景色可通过重载OnCtlColor()函数来实现。方法是在该函数中设置所需颜色后再返回一个画刷句柄便可 重绘控件背景色。OnCtlColor()函数对于控件背景色的处理是通过捕捉相应的控件消息来实现的。

常用的此类消息有:   
CTLCOLOR_DLG   对话框   
CTLCOLOR_EDIT   编辑框 
CTLCOLOR_LISTBOX   列表框   
CTLCOLOR_MSGBOX   消息框 
CTLCOLOR_SCROLLBAR   滑动条 
CTLCOLOR_STATIC   静态文本框、矩形等。

主要有三步:
1. 声明消息响应函数
//{{AFX_MSG(CMyDialog) 
afx_msg   HBRUSH   OnCtlColor(CDC*   pDC,   CWnd*   pWnd,   UINT   nCtlColor); 
……
//}}AFX_MSG

DECLARE_MESSAGE_MAP()

2. 实现消息响应函数
以编辑框举例:

HBRUSH   CMyDialog::OnCtlColor(CDC*   pDC,   CWnd*   pWnd,   UINT   nCtlColor)  
{
    HBRUSH hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor);
   // CtlColor(pDC, pWnd, nCtlColor);
    if(nCtlColor == CTLCOLOR_EDIT && pWnd->GetDlgCtrlID() == IDC_EDIT1)
    {
        pDC->SetTextColor(RGB(0,0,255));
        pDC->SetBkColor(RGB(255,0,0));//设置文本背景色
        pDC->SetBkMode(TRANSPARENT);//设置背景透明
        hbr = ::CreateSolidBrush(RGB(255,0,0));
    }
    return hbr;
}

3. 添加消息映射
BEGIN_MESSAGE_MAP(CMyDialog, CDialog)
    ON_WM_CTLCOLOR() 
END_MESSAGE_MAP()

注意:此方法不适用于按纽控件。

MFC改变控件颜色的更多相关文章

  1. MFC 改变控件的大小和位置

    mfc 改变控件大小和位置用到的函数: ) void MoveWindow(int x, int y, int nWidth, int nHeight); ) void MoveWindow(LPCR ...

  2. pyqt5 动画学习(二) 改变控件颜色

    上一篇我们通过  self.anim = QPropertyAnimation(self.label, b"geometry")创建了一个动画,改变了空间的大小,这次我们来改变控件 ...

  3. C++ MFC 改变控件大小和位置

    用CWnd类的函数MoveWindow()或SetWindowPos()可以改变控件的大小和位置. void MoveWindow(int x,int y,int nWidth,int nHeight ...

  4. VC 使用OnCtlColor函数来改变控件颜色(引用)

    在MFC类库提供了CWnd::OnCtlColor函数,在工作框架的子窗口被重画时将调用该成员函数.因此可以重载WM_CTLCOLOR消息的响应函数.此函数的原型:afx_msg HBRUSH OnC ...

  5. MFC消息 OnCtlColor 改变控件颜色

    OnCtlColor 有以下几个宏定义 #define CTLCOLOR_MSGBOX         0    #define CTLCOLOR_EDIT           1    #defin ...

  6. MFC中改变控件的大小和位置

    用CWnd类的函数MoveWindow()或SetWindowPos()可以改变控件的大小和位置. void MoveWindow(int x,int y,int nWidth,int nHeight ...

  7. mfc中 控件 对话框 添加颜色 背景图片

    1 设置对话框透明 在设置控件颜色中要使用 nCtlColor Contains one of the following values, specifying the type of control ...

  8. MFC中改变控件的大小和位置(zz)

    用CWnd类的函数MoveWindow()或SetWindowPos()能够改变控件的大小和位置. void MoveWindow(int x,int y,int nWidth,int nHeight ...

  9. VC 对话框背景颜色、控件颜色(三种方法)

    系统环境:Windows 7软件环境:Visual C++ 2008 SP1本次目的:为对话框设置背景颜色.控件颜色 既然MFC对话框不好开发,那么现在我们来开始美化我们的对话框.为对话框设置背景颜色 ...

随机推荐

  1. POJ 1791 Parallelogram Counting(求平行四边形数量)

    Description There are n distinct points in the plane, given by their integer coordinates. Find the n ...

  2. MIP启发式算法:遗传算法 (Genetic algorithm)

    *本文主要记录和分享学习到的知识,算不上原创 *参考文献见链接 本文主要讲述启发式算法中的遗传算法.遗传算法也是以local search为核心框架,但在表现形式上和hill climbing, ta ...

  3. 《Scrum实战》第3次课【富有成效的每日站会】作业汇总

    1组 崔儒: http://kecyru.blog.163.com/blog/static/2741661732017626101944123/ 2017-07-26 孟帅: http://www.c ...

  4. Hive安装步骤

    首先解压压缩包 然后进入bin 执行 ./hive 不过现在hive使用的是自己默认的数据库,不方便,可以通过配置使用MySQL数据库 创建hive-site.xml 粘贴一下内容 <confi ...

  5. luogu1501 [国家集训队]Tree II

    lct裸题 #include <iostream> #include <cstdio> using namespace std; typedef long long ll; i ...

  6. Spring-Boot自定义Starter实践

    此文已由作者王慎为授权网易云社区发布. 欢迎访问网易云社区,了解更多网易技术产品运营经验. disconf-spring-boot-starter 使用方法: 引入maven依赖: <depen ...

  7. 03_HibernateSessionFactory源码分析

    文章导读: 讲解了一个线程为什么要使用同一个connection, 我们分析了HiberatenSessionFactory的实现机制, 然后根据Hibernate的写法重构了我们的代码. 最后测试可 ...

  8. Selenium WebDriver- 使用Frame中的HTML源码内容操作Frame

    #encoding=utf-8 import unittest import time from selenium import webdriver from selenium.webdriver i ...

  9. php 图表的操作

    <?php $dir=dirname(__FILE__);//查找当前脚本所在路径 require $dir."/db.php";//引入mysql操作类文件 require ...

  10. Linux Shell系列教程之(一)Shell简介

    本文是Linux Shell系列教程的第(一)篇,更多shell教程请看:Linux Shell系列教程 想要学习linux,shell知识必不可少,今天就给大家来简单介绍下shell的基本知识. S ...