windows sdk编程系列文章03 ---- 绘制文本

windows sdk编程系列文章03 ---- 绘制文本

ID:41032718

大小:58.50 KB

页数:15页

时间:2019-08-14

windows sdk编程系列文章03 ---- 绘制文本_第1页
windows sdk编程系列文章03 ---- 绘制文本_第2页
windows sdk编程系列文章03 ---- 绘制文本_第3页
windows sdk编程系列文章03 ---- 绘制文本_第4页
windows sdk编程系列文章03 ---- 绘制文本_第5页
资源描述:

《windows sdk编程系列文章03 ---- 绘制文本》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库

1、windowssdk编程系列文章----绘制文本2008-04-0820:20本课中,我们将学习如何在窗口的客户区“绘制”字符串。我们还将学习关于“设备环境”的概念。理论:Windows中的文本是一个GUI(图形用户界面)对象。每一个字符实际上是由许多的像素点组成,这些点在有笔画的地方显示出来,这样就会出现字符。这也是为什么我说“绘制”字符,而不是写字符。通常您都是在您应用程序的客户区“绘制”字符串(尽管您也可以在客户区外“绘制”)。Windows下的“绘制”字符串方法和Dos下的截然不同,在Dos下,您可以把屏幕想象成85x25的一个平面,而Windows下由于屏

2、幕上同时有几个应用程序的画面,所以您必须严格遵从规范。Windows通过把每一个应用程序限制在他的客户区来做到这一点。当然客户区的大小是可变的,您随时可以调整。在您在客户区“绘制”字符串前,您必须从Windows那里得到您客户区的大小,确实您无法像在DOS下那样随心所欲地在屏幕上任何地方“绘制”,绘制前您必须得到Windows的允许,然后Windows会告诉您客户区的大小,字体,颜色和其它GUI对象的属性。您可以用这些来在客户区“绘制”。什么是“设备环境”(DC)呢?它其实是由Windows内部维护的一个数据结构。一个“设备环境”和一个特定的设备相连。像打印机和显示

3、器。对于显示器来说,“设备环境”和一个个特定的窗口相连。“设备环境”中的有些属性和绘图有关,像:颜色,字体等。您可以随时改动那些缺省值,之所以保存缺省值是为了方便。您可以把“设备环境”想象成是Windows为您准备的一个绘图环境,而您可以随时根据需要改变某些缺省属性。当应用程序需要绘制时,您必须得到一个“设备环境”的句柄。通常有几种方法。·在WM_PAINT消息中使用BeginPaint·在其他消息中使用GetDC·CreateDC建立你自己的DC您必须牢记的是,在处理单个消息后你必须释放“设备环境”句柄。不要在一个消息处理中获得“设备环境”句柄,而在另一个消息处理

4、中在释放它。我们在Windows发送WM_PAINT消息时处理绘制客户区,Windows不会保存客户区的内容,它用的是方法是“重绘”机制(譬如当客户区刚被另一个应用程序的客户区覆盖),Windows会把WM_PAINT消息放入该应用程序的消息队列。重绘窗口的客户区是各个窗口自己的责任,您要做的是在窗口过程处理WM_PAINT的部分知道绘制什么和何如绘制。您必须了解的另一个概念是“无效区域”。Windows把一个最小的需要重绘的正方形区域叫做“无效区域”。当Windows发现了一个”无效区域“后,它就会向该应用程序发送一个WM_PAINT消息,在WM_PAINT的处理

5、过程中,窗口首先得到一个有关绘图的结构体,里面包括无效区的坐标位置等。您可以通过调用BeginPaint让“无效区”有效,如果您不处理WM_PAINT消息,至少要调用缺省的窗口处理函数DefWindowProc,或者调用ValidateRect让“无效区”有效。否则您的应用程序将会收到无穷无尽的WM_PAINT消息。下面是响应该消息的步骤:1.取得“设备环境”句柄2.绘制客户区3.释放“设备环境”句柄注意,您无须显式地让“无效区”有效,这个动作由BeginPaint自动完成。您可以在BeginPaint和Endpaint之间,调用所有的绘制函数。几乎所有的GDI函数

6、都需要“设备环境”的句柄作为参数。例子:(见光盘FirstWindow2)下面我们将写一个应用程序,它会在客户区的中心显示一行"Win32program,Simpleandpowerful!"#include"Windows.h"#include"tchar.h"HWNDhWinMain;TCHARszClassName[]=_T("MyClass");TCHARszCaptionMain[]=_T("MyFirstWindow!");TCHARszText[]=_T("Win32program,Simpleandpowerful!");WNDCLASSEXstdW

7、ndClass;LRESULTCALLBACKProcWinMain(  HWNDhWnd,                      UINTMsg,                      WPARAMwParam,                      LPARAMlParam){   PAINTSTRUCTstPs;   RECTstRect;   HDChDC;   switch(Msg)   {      caseWM_PAINT:      {         hDC=BeginPaint(hWnd,&stPs);         GetCl

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。