1.3.4 绘制窗口

如何在屏幕上随心所欲的进行绘制?应用程序通过响应来自Windows的WM_PAINT消息进行绘制的,此消息通知它更新窗口。

WM_PAINT消息如何发生:窗口位置改变;窗口大小改变;窗口显示部分改变等。

应用程序通过响应WM_PAINT消息绘制其窗口的客户区。在该例程中,WM_PAINT消息由CMainWindow::OnPaint来处理,每一个WM_APINT消息到来时都会调用它。OnPaint的主要工作就是在窗口客户区中央位置绘制文本。

绘制文本是通过构造一个名为dc的CPaintDC对象开始的:

 CPaintDC dc(this);

CPaintDC

CDC类封装了Windows设备环境,以及包含了绘制到屏幕、打印机和其它设备的几十个成员函数。CPaintDC只在WM_PAINT消息处理程序中使用,它是CDC的一个特殊例子。应用程序在响应WM_PAINT消息绘制之前,必须调用Windows的::BeginPaint API函数来获取一个设备环境,以准备将此设备环境用于绘制;当应用程序完成绘制时,必须调用Windows的::EndPaint来释放设备环境和通知Windows绘制已经完成。如果不能调用::BeginPaint和::EndPaint,消息就不会从消息队列中删除。

创建了CPaintDC对象之后,OnPaint将构造一个代表矩形的CRect对象,并调用CWnd::GetClientRect以使用窗口的客户区的坐标来初始化这个矩形,然后调用CDC::DrawText在客户区显示文本。

1.3.5 消息映射

WM_PAINT消息时如何让CMainWindow::OnPaint的调用?消息映射是将消息和成员函数关联的表。添加消息映射的步骤:

1 通过将DECLARE_MESSAGE_MAP语句添加到类声明中,声明消息映射

2 通过纺织标识消息的宏执行消息映射,响应的类将在对BEGIN_MESSAGE_MAP和END_MESSAGE_MAP的调用之间处理消息

3 添加成员函数来处理消息

BEGIN_MESSAGE_MAP开始消息映射,并标识了消息映射所属的类和该类的基类;END_MESSAGE_MAP结束消息映射;二者之间是消息映射条目。

对于决定一个消息处理程序接收何种类型的参数以及返回何种类型的值,需要参考MFC文档。

MFC-01-Chapter01:Hello,MFC---1.3 第一个MFC程序(05)的更多相关文章

  1. MFC-01-Chapter01:Hello,MFC---1.3 第一个MFC程序(03)

    1.3.2 MFC如何使用应用程序对象 MFC程序没有main函数,没有WinMain函数,到底是什么启动了程序的运行? 一个MFC提供的源代码中(Winmain.cpp)包含了一个AfxWinMai ...

  2. MFC-01-Chapter01:Hello,MFC---1.3 第一个MFC程序(02)

    1.3.1 应用程序对象 MFC应用程序的核心就是基于CWinApp类的应用程序对象,CWinApp提供了消息循环来检索消息并将消息调度给应用程序的窗口.当包含头文件<afxwin.h>, ...

  3. 我的第一个MFC的ArcGIS Engine程序

    原文 http://blog.csdn.net/zzahkj/article/details/9003518 (第一版,以VC++6.0+AE9.3为例) 首次,学习MFC,写个笔记,MFC还是挺好学 ...

  4. MFC通过ODBC连接mysql(使用VS2012编写MFC)

    原创文章,转载请注明原文:MFC通过ODBC连接mysql(使用VS2012编写MFC) By Lucio.Yang 1.ODBC连接mysql 首先ODBC是什么呢? 开放数据库互连(Open Da ...

  5. visual2017专业版MFC编程环境搭建及第一个MFC程序的创建

    1.MFC介绍及环境搭建 MFC全程为Microsoft Foundation class Library,即微软的基本类库,MFC实际上是一个庞大的文件库,它由指向文件和源文件组成. 首先,打开vi ...

  6. MFC (如何通过点击botton打开一个文件夹/文件)

    1.建一个MFC的工程,类型为基于对话框.在工具箱里拖进去一个button按键,如下图. 2.双击button1按键就可以进入到点击button1后要执行操作的代码,编写如下代码实现网页/文件夹或者文 ...

  7. 第一个c程序和vs2017 在打开MFC rc文件时找不到rcdll.dl

    第一个c程序 #include<stdio.h> int main() { ; ; printf_s("请输入两个数字:"); scanf_s("%d,%d& ...

  8. 第一个MFC实例:计算圆周长和圆面积

    一.基于Microsoft MFC的编程方法 MFC是微软基础类库(Microsoft Foundation Class)的缩写.与API不同,MFC不是Windows操作系统的组成部分,而是微软公司 ...

  9. fatal error C1189: #error : Building MFC application with /MD[d] (CRT dll version) requires MFC

    出现如下错误: fatal error C1189: #error : Building MFC application with /MD[d] (CRT dll version) requires ...

  10. fatal error C1189: #error : Building MFC application with /MD[d] (CRT dll version) requires MFC sha

    调试程序时出现以下问题:d:\program files (x86)\microsoft visual studio 10.0\vc\atlmfc\include\afx.h(24): fatal e ...

随机推荐

  1. a 锚点跳转滑动效果

    点击a链接时,跳转到相应id的位置处,有一个滑动效果. <a href="#my">我是跳转到div</a><div id="my" ...

  2. 个人博客作业Week3

    一.调研 下载并使用,按照描述的bug定义,找出几个功能性的比较严重的bug.至少两个.用专业的语言描述(每个bug 不少于 40字),如有必要,可以配图. 电脑用户未登录就能使用单词本功能,万一是用 ...

  3. 生成yyMMddHHmmssSS时间戳代码作为唯一主键值

    import java.sql.Time; import java.text.DateFormat; import java.text.ParseException; import java.text ...

  4. iBatis框架基本使用

    iBatis框架是Java持久层开发框架,说白了就是前人写了一部分代码(针对数据库操作),我们要做的就是再次开发,拿来框架直接使用. 我们自己开发时,dao层的sql语句都是写死在程序中的,如果查询条 ...

  5. eclipse中的web环境配置

    一.tomcat的安装 直接官网下载,选择自动配置安装Exe文件. 测试: 1.启动安装目录下bin文件中的exe文件,观察是否安装完好.若出现打断文字黑框,则说明已经安装完好. 2.输入网址.htt ...

  6. 十天精通CSS3学习笔记 part2

    第6章 征服CSS3选择器(上) 属性选择器 在HTML中,通过各种各样的属性可以给元素增加很多附加的信息.例如,通过id属性可以将不同div元素进行区分. 在CSS2中引入了一些属性选择器,而CSS ...

  7. PHP控制div块大小和颜色的例子

    网站为了设计的更好看,会有很多的样式,而用php来控制样式很常见,无聊写了一个可以用于列表展示的样式,不喜忽喷. 1.先添加一个style样式控制div默认不换行 <style>div{f ...

  8. MyBatis总结(一)

    一.创建测试项目工程 二.导包(一个myBatis所需的包,以及一个数据库操作的包) 三.创建实体类 四.配置文件的建立(最佳命名为(SqlMapConfig.xml)) <?xml versi ...

  9. thinkPHP的用法之创建新项目

    1 配置文件中 新增数组元素:'DEFAULT_APPS'=> array('api', 'admin', 'home', 'megagame'), 2 新增样式变量 在view.class.p ...

  10. Joomla

    joomla Joomla实际有两个开源的东西: 1.Joomla内容管理系统即JoomlaCMS(Content Management System, CMS).它是网站的一个基础管理平台.几乎适合 ...