IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> C++知识库 -> windows程序设计 输出文本 -> 正文阅读

[C++知识库]windows程序设计 输出文本

???????客户区:整个应用程序窗口中未被标题栏、窗口边框以及可选的菜单栏、工具栏、状态栏和滚动条占据的部分驱动。就是可以由程序任意书写和传递可视信息的部分。

1、绘制和刷新

???????在Windows中,只能在窗口的客户区绘制文本和图形,而且不能确保在客户区内显示的内容会一直保留到程序有意地改写它。

1.1 WM_PAINT消息

???????大多数Windows程序在WinMain中进入消息循环之前的初始化期间都要调用函数UpdateWindow。Windows利用这个机会给窗口过程发送一个wm_paint消息,通知必须绘制客户区。在这之后窗口过程要在任何时候都准备好处理其他的wm_paint消息。发生以下事件时窗口过程会接收到一个wm_paint消息:

场景说明
在用户移动窗口或显示窗口时,窗口中先前被隐藏的区域重新可见
用户改变窗口的大小
程序使用ScrollWindow或ScrollDC函数滚动客户区的一部分
程序使用InvalidateRect或InvalidateRgn函数显式产生WM_PAINT消息
Windows擦除覆盖可部分窗口的对话框或消息框可能
菜单选啦出来,接着被释放可能
显示工具提示可能

???????某些情况下,Windows总是保存它所覆盖的显示区域,接着恢复它。例如鼠标光标穿越客户区或图表拖过客户区。
???????程序应该组织成可以保留绘制客户区需要的所有信息,以便在有需求的时候进行绘制。

1.2 有效矩形和无效矩形

???????虽然窗口过程接收到WM_PAINT消息后就会准备更新整个客户区,但实际上只需要更新一个较小的区域。同样,在擦除对话框之后,需要重画的也只是先前被对话框遮住的矩形区域。这个区域称为“无效区域”或“更新区域”。因为有无效区域的存在,Windows才会将一个WM_PAINT消息放在应用程序的消息队列中,只有客户区存在失效区域时窗口才会接收WM_PAINT消息。Windows不会将多个WM_PAINT消息都放在消息队列中。
???????窗口过程可以通过调用IInvalidateRect使客户区内的矩形失效。如果消息队列中存在一个WM_PAINT消息,Windows将计算新的无效区域;否则它将一个新的WM_PAINT消息放入消息队列中。在接收到消息时窗口过程可以获取调用GetUpdateRect在人恶化时候获取无效矩形的坐标。窗口过程在调用了BeginPaint之后,整个客户区就变成了有效,也可以通过程序调用ValidateRect函数使客户区内的任意矩形区域变为有效。若ValidateRect使整个无效区域变为有效,那当前队列中的任意WM_PAINT消息都会被删除

2、GDI

???????GDI:图形设备接口。每个GDI函数都需要一个设置描述表句柄作为第一个参数。

2.1 设备描述表

???????设备描述表,简称DC,实际上是GDI内部保存的数据结构。设备描述表与特定的显示设备相关,其中有些值是图形化的“属性”,定义了一些GDI绘图函数工作情况的特殊内容。在需要绘图的时候必须先获取设备描述表句柄。在获取句柄之后Windows用默认的属性值填充内部设备描述表结构,如果需要修改这些属性的值可以通过对应的GDI函数实现,当客户区绘图完毕之后,必须释放设备描述表句柄。句柄被释放后不再有效且不能再使用,因此程序必须在处理单个消息期间获取和释放句柄(除了CreateDC产生的句柄),设备描述表句柄不能在两个消息之间保存

2.2 获取设备描述表句柄的方法

2.2.1 BeginPaint和EndPaint函数

???????一般在处理WM_PAINT消息时使用这种方法。我们知道,窗口过程在处理WM_PAINT消息时首先会调用BeginPaint,该函数在准备绘制时导致无效区域的背景被擦除,其返回的值是设备描述表句柄,通常被保存在HDC的变量中,接下来就可以使用该值进行操作GDI函数,操作完成后使用EndPaint函数释放设备描述表句柄。
???????在处理WM_PAINT消息时,必须成对调用BeginPaint和EndPaint,不管是自定义的窗口过程还是Windows默认的窗口过程DefWindowProc,因为Windows将WM_PAINT消息放到队列就说明客户区存在无效区域需更新,若不调用则不会将无效区域变为有效。这种情况下Windows就会发送另一个WM_PAINT消息并一直发送下去。

2.2.2 GetDC函数

???????虽然大多数都是在处理WM_PAINT消息期间更新整个客户区,但是也会存在处理非WM_PAINT消息期间需要绘制客户区的某个区域的需求,或者希望将设备描述表句柄用于其他目的等。这种情况就可以使用GetDC获取句柄了,在使用完成之后调用ReleaseDC释放即可。处理一个消息时GetDC和ReleaseDC也是必须成对使用的,和BeginPaint的不同有:1)GetDC返回的设备描述表句柄具有一个剪取矩形,等于整个客户区,可以在客户区的某一个部分绘图,而不只是在无效矩形上绘图;2)GetDC不会使任何无效区域变为有效,如需要变为有效,可以调用validateRect。

3、系统字体

???????在Windows中默认字体是“系统字体”,标识符SYSTEM_FONT,是Windows用来在标题栏、菜单栏和对话框中显示文本串的默认字体。系统字体是一种点阵字体。但是要注意,系统字体的大小取决于Windows锁运行的视频显示器的分辨率,在某些情况下取决于用户选取的系统字体的大小。

  C++知识库 最新文章
【C++】友元、嵌套类、异常、RTTI、类型转换
通讯录的思路与实现(C语言)
C++PrimerPlus 第七章 函数-C++的编程模块(
Problem C: 算法9-9~9-12:平衡二叉树的基本
MSVC C++ UTF-8编程
C++进阶 多态原理
简单string类c++实现
我的年度总结
【C语言】以深厚地基筑伟岸高楼-基础篇(六
c语言常见错误合集
上一篇文章      下一篇文章      查看所有文章
加:2022-05-09 12:22:52  更:2022-05-09 12:23:32 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年5日历 -2024/5/20 23:37:29-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码