from:
http://rwsk.snnu.edu.cn/?uid-156-action-viewspace-itemid-240
先载入一张图片 ,ID 为 IDB_BITMAP2
TestDlg.h 中
CBrush m_brBk ; // 在 public 中定义
TestDlg.cpp 中

在初始化函数 OnInitDialog() 中加入 :

BOOL CTestDlg::OnInitDialog()
{
              CDialog::OnInitDialog();
CBitmap bmp;
bmp.LoadBitmap(IDB_BITMAP2);
m_brBk.CreatePatternBrush(&bmp);
bmp.DeleteObject();
    return TRUE;  // return TRUE unless you set the focus to a control
}
在打开类向导 , 找到 WM_CTLCOLOR 消息 , 重载得对应函数 OnCtlColor(), 添加如下 :
HBRUSH CTestDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)
{
            HBRUSH hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor);
             
if (pWnd == this)
{
    return m_brBk;
}
      return hbr;
}
按照上面的方法一路 COPY 下来运行, OK !并且由于图片是做为背景显示的,所以再添的按钮都能很好的显示出来,非常方便。
总结一下其中出现的变量和函数。
CBrush :类 CBrush 封装了 Windows 图形设备接口( GDI )中的画刷,画刷也就是采取什么方案填充图形的背景的工具。
OnInitDialog ( ) :用于对对话框类的变量的初始化(注意 : 是在产生对话框之前就初始化),是 WM_INITDIALOG 消息产生的消息处理函数,覆盖该函数可改变对话框初始设置。
用法 :
virtual BOOL OnInitDialog() ;返回值指定对话框是否对它的一个控件设置输入焦点。如果 OnInitDialog 返回非零值, Windows 将输入焦点设在对话框的第一个控件上,只有在对话框明确将输入焦点设在某控件上,应用返回 0 。
CBitmap :类 CBitmap 封装了 Windows 图形设备接口( GDI )中的位图,并且提供操纵位图的成员函数。
LoadBitmap ( ) : CBitmap 类的一个成员函数,从应用的可执行文件中加载一个命名的位图资源来初始化位图对象。
用法 :
BOOL LoadBitmap( LPCTSTR lpszRecourceName ) ; BOOL LoadBitmap( UINT nIDResource ); 返回值调用成功时返回非零值,否则为 0 。参数 lpszResourceName 指向一个包含了位图资源名字的字符串(该字符串以 null 结尾)。 NIDResource 指定位图资源中资源的 ID 号。本函数从应用的可执行文件中加载由 lpszResourceName 指定名字或者由 nIDResource 指定的 ID 号标志的位图资源。加载的位图被附在 Cbitmap 对象上。如果由 lpszResourceName 指定名字的对象不存在,或者没有足够的内存加载位图,函数将返回 0 。可以调用函数 CgdiObject::DeleteObject 删除由 LoadBitmap 加载的位图,否则 Cbitmap 的析构函数将删除该位图对象。
CreatePatternBrush ( ) : CBrush 类的一个成员函数,用位图指定的模式初始化画刷。
用法 :
BOOL CreatePatternBrush( CBitmap* pBitmap ) ;返回值调用成功时返回非零值,否则为 0 。参数 pBitmap 指定一个位图。本函数用位图指定的模式初始化画刷。此画刷随后就可用于任何支持光栅操作的设备上下文。由 bBitmap 指定的位图一般用以下的函数初始化: CBitmap:: CreateBitmap 、 CBitmap::CreateBitmapIndirect 、 CBitmap::LoadBitmap 或 Cbitmap:: CreateCompatibleBitmap 。
DeleteObject ( ) : CgdiObject 类的一个成员函数,从内存中删除附加给 CGdiObject 的 Windows GDI 对象,释放与此对象相关的系统存储空间。 GdiObject 类为各种 Windows 图形设备接口( GDI )对象,如位图、区域、画刷、画笔、调色板、字体等提供了一些基本类。我们不会直接构造一个 CGdiObject 对象,而是使用某一个派生类如 CPen 或 CBrush 创建。
用法 :
BOOL DeleteObject( ); 如果 GDI 对象被成功删除,则返回非零值,否则为 0 。通过释放附加的 GDI 对象占有的系统存储来删除它们。与 CGdiObject 对象有关的存储不受此调用的影响。如果 CGdiObject 对象正被选入设备上下文中 , 则应用不可对此对象调用 DeleteObject ,。当一个模式画刷被删除时,与之相关联的位图不被删除。位图必须被独立删除。
HBRUSH :数据类型,用于定义画刷句柄。在 Windows 环境中,句柄是用来标识项目的,这些项目包括: module, task, instance, file ,block of memory, menu, control, font, resource, icon, cursor, string, GDI object 等,包括 bitmap, brush, metafile, palette, pen, region 以及设备描述表 device context 。实际上,句柄是一个标识符,用来表示对象或者项目,是一个 32 位的正整数。应用程序几乎总是通过调用一个 Windows 函数来获得一个句柄,之后其他的 Windows 函数就可以使用这个句柄,以引用相应的对象。
WM_CTLCOLOR 消息 : WM_CTLCOLOR 是一个由控制 (Control) 发送给它父窗口的通知消息 (Notification message) 。利用向导映射该消息产生函数: HBRUSH CAboutDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor) ;参数 pDC 是 TestDlg 的设备上下文, pWnd 是 TestDlg 中发送该消息的 control 指针, nCtlColor 是 Control 的类型编码。 WM_CTLCOLOR 是系统在绘制控件的时候自动发送的,如果需要自定义,就截取这个消息并重载它的响应函数,用 classWizard 添加 WM_CTLCOLOR 消息然后编辑其 OnCtlColor 函数。这样 Windows 向应用程序发送消息 WM_CTLCOLOR ,应用程序处理 WM_CTLCOLOR 消息并返回一个用来绘画窗体背景的刷子句柄。

更改对话框的背景颜色和文本颜色

:一个基于对话框的MFC AppWizard应用程序中,如何改变对话框的背景颜色呢?对于这个问题,其实可以 由几种不同的方法来实现,具体如下(粗斜体代码为增添的):
----方法一:调用CWinApp类的成员函数SetDialogBkColor来实现。
---- 其中函数的第一个参数指定了背景颜色,第二个参数指定了文本颜色。下面的例子是将应用程序对话 框设置为蓝色背景和红色文本,步骤如下:
---- ① 新建一个基于Dialog的MFC AppWizard应用程序ExampleDlg。
---- ② 在CExampleDlgApp ::InitInstance()中添加如下代码:
BOOL CExampleDlgApp: : InitInstance ( )
{

    CExampleDlgDlg dlg;
    m_pMainWnd = &dlg;
//先于DoModal()调用,将对话框设置为蓝色背景、红色文本
    SetDialogBkColor(RGB(0,0,255),RGB(255,0,0));   //即可
    int nResponse = dlg.DoModal();

}
---- 编译并运行,此时对话框的背景色和文本色已发生了改变。值得注意的是:在调用DoModal()之前必须先调用SetDialogBkColor,且此方法是将改变应用程序中所有的对话框颜色,并不能针对某一个指定的对 话框。
---- 方法二:重载OnPaint(),即W M_PAINT

给对话框加载一个菜单:

的ID

基于对话框的MFC程序加载位图为背景图案相关推荐

  1. 屏蔽基于对话框的MFC程序中按下ESC关闭窗口的功能

    在基于对话框的MFC程序中,如果你按下ESC,将会关闭对话框.如何屏蔽这个键呢,其实很简单,只要重载下PreTranslateMessage()即可. 方法:在对话框类上右击,选择"Add ...

  2. 基于Pango Design SuiteFPGA程序加载/固化——TMS320F28377D开发板

    前 言 本文主要基于紫光同创Pango Design Suite(PDS)开发软件,演示FPGA程序的加载.固化,以及程序编译等方法.适用的开发环境为Windows 7/10 64bit. FPGA程 ...

  3. 浅入MFC之对话框及MFC程序的运行

    对话框的实现毕竟是很简单的.但是,自己亲手写段代码实现比什么都强,伙计,你说呢?特别对于新手来说,哦,好处太多了.同时,等你写完了,看看程序的运行,弹出自己的对话框,什么感觉,动手试一试吧,来吧.伙计 ...

  4. Windows API(非MFC)编程加载位图

    很久都没写博客了,前段时间ACM那些题都是有空的时候水着玩的,虽然大二的课只有6门,但是作业很多,也一直很忙,刚刚都才完成一个电路设计的实验报告.准备TOEFL,GRE,还要跟着导师做计算机视觉的一些 ...

  5. 正在载入java_如何实现程序加载时弹出正在加载对话框

    我们做的很多应用程序,很多功能都需要较长的加载时间,比如下载功能,转换页面等等.在程序进行后台处理的时候,前台的ui是没有反应的.如果在这段时间内我们不作任何处理就让程序停在那的话.第一,用户体验会很 ...

  6. MFC加载位图和图标

    MFC加载位图和图标 | 火苗999℃的博客 从文件加载位图 #pragma once// ZBitmap从文件加载位图资源 class ZBitmap { private:HBITMAP m_hBi ...

  7. 【学习分享】2、创龙 TMS320C6748开发板程序加载和烧写(一)

    此部分由于篇幅过长,将分为五个小点进行叙述,此处主讲基于仿真器的程序加载和烧写,所用器件为创龙TMS320C6748开发板.需要注意的点已在备注中进行说明. 如果需要从头开始进行本使用手册的阅读,欢迎 ...

  8. 【学习分享】2、创龙 TMS320C6748开发板程序加载和烧写(四)

    此部分由于篇幅过长,将分为五个小点进行叙述,此处主讲基于SD卡烧写程序到NAND FLASH,所用器件为创龙TMS320C6748开发板.需要注意的点已在备注中进行说明. 如果需要从头开始进行本使用手 ...

  9. VS如何新建一个基于对话框的MFC工程并添加按钮

    学习MFC的初学者,入门的步骤很重要,新建一个基于对话框的MFC应用程序,并通过拖拉按钮等,初步搭建自己的MFC工程. 工具/原料 笔记本电脑 VS2010 方法/步骤 打开VS2010,并新建MFC ...

最新文章

  1. TensorFlow高效读取数据的方法
  2. 417,你的能量不容低估,也不能高估
  3. 初等数论--原根--a^k对模m的阶
  4. laravel5.6 mysql_快速入门 |《Laravel 5.6 中文文档 5.6》| Laravel China 社区
  5. down redis集群_redis有哪些集群模式
  6. python处理时间的标准函数库_使用Python的datetime库处理时间(RPA流程)
  7. oracle rac实例停止,oracle rac启停命令使用实例
  8. python黑帽子学习笔记(三)—— ssh隧道
  9. 深度学习论文阅读目标检测篇(六)中英对照版:YOLOv3《 An Incremental Improvement》
  10. 写一个最简单的React可配置路由(react-router
  11. 最快年底出台 上海二手车车牌启动竞拍模式
  12. JS动态添加HTML元素
  13. Unicode与中文互转(反斜杠u(\u)开头的16进制Unicode编码转换成中文汉字
  14. how JMP JSL auto run
  15. ButterKnife被弃用,ViewBinding才是findView的未来?
  16. Opencv 入门篇学习记录(图片)
  17. 【蓝桥杯选拔赛真题09】Scratch小猫旅行 少儿编程scratch蓝桥杯选拔赛真题讲解
  18. 如何快速查询学术会议
  19. Thread的setDaemon(true)方法的作用
  20. nexus3的配置阿里云代理仓库

热门文章

  1. -- 6、查询“李“姓老师的数量
  2. apache 获取不到 authorization 解决办法
  3. Win10开机(更新)后无法进入系统,黑屏一直转圈
  4. 【Python】2500块的外包项目,一款加密的直播引流软件,逆向JavaScript,保姆级实战教学!
  5. ijkplayer系列1:ijkplayer介绍
  6. 小米更新到MIUI13版本后,进行android调试,出现无法实现USB下载安装的问题
  7. 简历中的工作经历要怎么写?
  8. vue 给圆遮盖物添加文字 高德地图_【高德地图开发4】---增加覆盖物setMapTextZIndex...
  9. 【音视频】浅学ISP数据处理流程
  10. 你也可以找到好工作(三)大结局