windows api 文本输出(一)
2021-03-26 17:26
标签:long esc 数据 api 状态栏 client 符号 bsp 重绘 ---恢复内容开始--- 一,绘制与重绘 1,windows不会保留窗口内容,当窗口被覆盖然后恢复时,Windows会发送WM_PAINT消息通知窗口过程重绘客户区(窗口中没有被标题栏,菜单栏,工具栏,状态栏遮住的地方,可以自由绘制),使用函数 GetClientRect(hwnd, &rect);可获得客户区域,储存在rect结构中。 2,WM_PAINT消息 调用 UpdateWindow()函数,windows会向窗口过程发送第一条WM_PAINT消息。 以下情况窗口过程会收到WM_PAINT消息 *用户移动一个窗口,导致原来被覆盖的部分窗口暴露出来。 *用户调整窗口大小(当窗口类型设定为CS_HREDRAW和CS_VREDRAW值时) *程序调用ScrollWindow或ScrollDC函数滚动客户区。 *程序调用InvalidateRect或InvalidateRgn显式生成WM_PAINT消息 当客户区被临时遮盖,Windows会试图保存被覆盖内容,并不是每次都成功。以下情况,Windows可能会发送一条WM_PAINT消息。 *Windows关闭一个覆盖部分窗口的对话框或消息框 *下拉菜单被下拉然后收回 *显示提示信息 以下情况下,Windows总会保存被覆盖显示内容,然后在恢复 *鼠标指针在客户区移动 *在客户区拖动图 3,有效矩形和无效矩形 需要被绘制的区域被称为“无效区域”或“更新区域”,当客户区有一个无效区域Windows会在应用程序的消息队列中放一条WM_PAINT消息。 Windows为每个窗口保留一个绘图信息结构(保存无效矩形及其他信息)无效区域总是最新的,Windows不会在消息队列放置多条WM_PAINT消息 窗口过程可以调用InvalidateRect强制使客户区的一个矩形失效,如何消息队列中已有一条WM_PAINT消息,windows将会计算出新的无效矩形;如果没有将会放置一条WM_PAINT消息。在任何时候,可以使用GetUpdateRect函数获取坐标 窗口过程调用BeginPaint函数后,整个客户区会变得有效,也可以使用ValidateRect,当前消息队列中的WM_PAINT会被删除 二,GDI简介 1,绘制一个窗口的客户区需要调用Windows的图形设备接口函 用于字符串输出的函数为 TextOut(hdc ,x ,y ,psText , iLength); hdc为设备环境接口,x,y确定了字符串的左上角,psText为指向字符串的指针,iLength是字符串的长度 2,句柄是一个32位无符号整数,用来标识唯一的对象,设备环境(DC)是GDI内部维护的一个数据结构,与特定设备相关联。必须在处理同一消息过程中,获取和释放句柄。 获取方法有两种 第一种 case WM_PAINT: hdc=BeginPaint(hwnd ,&ps); //BeginPaint函数会使无效区域有效化,以窗口背景擦去无效区域,并填充ps各个字段 ... EndPaint(hwnd ,&ps); return 0; 第二种 hdc=GetDC(hwnd);//裁剪矩形为整个客户区,不会讲无效区有效化 .... ReleaseDC(hwnd,hdc); //GetWindowDC可以得到整个窗口的设备环境句柄 3,绘制信息结构PAINTSTRUCT 4,TextOut函数详解 TextOut(hdc ,x ,y ,psText , iLength); 设备环境决定了文本颜色和文本背景色 字符大小 ---恢复内容结束--- windows api 文本输出(一) 标签:long esc 数据 api 状态栏 client 符号 bsp 重绘 原文地址:https://www.cnblogs.com/thisisdujian/p/9378991.htmltypedef struct tagPAINTSTRUCT
{
HDC hdc;
BOOL fErase;//调用BeginPaint函数后,为TRUE。使用InvalidateRect(hwnd,NULL,TRUE)true时擦出原有背景
RECT rcPaint;
BOOL fRestore;
BOOL fIncUpdate;
BYTE rgbReserved[32];
} PAINTSTRUCT;
typedef struct tagTEXTMETRICW
{
LONG tmHeight;
LONG tmAscent;
LONG tmDescent;
LONG tmInternalLeading;
LONG tmExternalLeading;
LONG tmAveCharWidth;
LONG tmMaxCharWidth;
} TEXTMETRIC;
上一篇:[APIO 2010] 巡逻
文章标题:windows api 文本输出(一)
文章链接:http://soscw.com/index.php/essay/68209.html