MFC OnCtlColor函数参数的控制

news/2024/11/17 23:58:10/

MFC类库提供了CWnd::OnCtlColor函数,在工作框架的子窗口被重画时将调用该成员函数.在界面处理的时候很有用处

因此可以重载WM_CTLCOLOR消息的响应函数.

【MSDN】此函数的原型:

The framework calls this member function when a child control is about to be drawn

afx_msg HBRUSH OnCtlColor(CDC *pDC,CWnd *pWnd,UINT nCtlColor);

pDC
Contains a pointer to the display context for the child window. May be temporary.

pWnd
Contains a pointer to the control asking for the color. May be temporary.

nCtlColor
Contains one of the following values, specifying the type of control:

CTLCOLOR_BTN   Button control

CTLCOLOR_DLG   Dialog box

CTLCOLOR_EDIT   Edit control

CTLCOLOR_LISTBOX   List-box control

CTLCOLOR_MSGBOX   Message box

CTLCOLOR_SCROLLBAR   Scroll-bar control

CTLCOLOR_STATIC   Static control 
 

参数nCtlColor用于指定控件的类型,可以是:
           .CTLCOLOR_BTN                按钮控件
           .CTLCOLOR_DLG                对话框
           .CTLCOLOR_EDIT               编辑框
           .CTLCOLOR_LISTBOX            列表控件
           .CTLCOLOR_MSGBOX             消息控件
           .CTLCOLOR_SCROLLBAR 滚动条控件
           .CTLCOLOR_STATIC             静态控件

 返回值:

    OnCtlColor must return a handle to the brush that is to be used for painting the control background

 使用方式一:
      假设你已有了名为My的对话框工程.你有了一个STATIC的控件,ID为IDC_STATIC.

HBRUSH CMyDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor) {HBRUSH hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor);// TODO: Change any attributes of the DC hereif (nCtlColor==CTLCOLOR_STATIC){ // 执行需要的处理pDC->SetTextColor(RGB(255,0,0));  //字体颜色pDC->SetBkColor(RGB(0, 0, 255));   //字体背景色  }// TODO: Return a different brush if the default is not desiredreturn hbr;}

使用方式二:
如果要指定某个特定控件可以这样写

if (pWnd->GetDlgCtrlID()==IDC_STATIC)  // 获取控件的ID
{
       pDC->SetTextColor(RGB(255,0,0));  //设置字体颜色
       pDC->SetBkMode(TRANSPARENT); //设置字体背景为透明
// TODO: Return a different brush if the default is not desired
  return (HBRUSH)::GetStockObject(BLACK_BRUSH);  // 设置背景色
}
else
return hbr;

【注】

WHITE_BRUSH:白色

GRAY_BRUSH:灰色

NULL_BRUSH:透明

HOLLOW_BRUSH :透明


http://www.ppmy.cn/news/183659.html

相关文章

几何分布和负二项分布的关系

几何分布和负二项分布的关系 几何分布 在独立重复Bernoulli试验中,事件A首次发生时所进行的试验次数X服从几何分布 P ( X k ) ( 1 − p ) k − 1 p ( k 1 , 2 ⋯ ) E ( X ) 1 p 、 D ( X ) 1 − p p 2 P(Xk)(1-p)^{k-1}p(k…

老笔记本电脑机械500GB升级固态1T

原电脑只有一个2.5的硬盘位,没有光驱位,只能整个机械的换成固态 原硬盘使用win10系统 材料:西数蓝盘1T(sata),此电脑没有nvme接口,买个sata的亏大发(706大洋外加19的空运运费)… 操作环境&#…

Ubuntu(Linux)新系统分区

本人使用ThinkPad X1 Carboon ,500G硬盘; 安装Ubuntu的系统分区; 挂载点大小用于新分区的类型新分区的位置备注/200GExt4逻辑分区/swap18G交换空间逻辑分区内存大小的1~2倍/boot1GExt4主分区/tem5GExt4逻辑分区/home剩余Ext4逻辑分区/usr70GExt4逻辑分区…

java开发256g固态硬盘_256g固态硬盘有哪些

256GB的SSD固态硬盘是比较主流的一个容量,有很多不同的品牌产品,其中有影驰ONE M.2 256GB,三星970 EVO Plus,威刚SP920 256G,建兴LITEON ZETA系列 256G等产品。接下来详细介绍: 1、影驰ONE M.2采用群联PS50…

为什么500G的移动硬盘实际却只有46…

为什么500G的移动硬盘实际却只有465G 准确的说是 “为什么厂家标明500G的移动硬盘在电脑上显示却只有465G” 原因在于厂家和操作系统的计算方式不一样 厂家的 1GB1000MB1 000 000KB1 000 000 000B 而操作系统的计算方式和教材中一致 1GB1024MB1024 * 1024KB1024 * 1024 * 1024B…

硬盘克隆diskgenius

将笔记本原来500GB的硬盘无缝更换成1TB的硬盘,磁盘克隆步骤如下,使用工具diskgenius: 需要先将1TB的硬盘通过硬盘盒子使用USB3.0接口挂到电脑上,方可执行克隆操作: https://www.diskgenius.cn/help/copydisk.php 拷贝完成后对剩…

500G硬盘分区标准

Linux操作系统安装硬盘分区,500G硬盘分区的规范(不采用LVM): /boot分区 300MB 称为启动分区,主要用于Linux系统启动时加载该分区的Linux内核文件、镜像文件,此分区大小不会增加、是固定的; Swa…

500G的硬盘坏了怎么找回文件

前天才去电脑城买了一个500G的硬盘,当时老板一直告诉我这个硬盘是多么多么的便宜,多么多么的实惠,硬盘有多么多么的实用,反正就是这么一大堆的东西。本人虽然从事文职已经两年多了,但是对于这些外接设备还真不是很了解…