34.文本输出BeginPaint、EndPaint、TextOut、MoveTo、SetTextAlign、GetTextAlign、LineTo、MoveToEx、

本文介绍了Windows编程中用于文本输出和窗口绘图的相关函数,包括BeginPaint、EndPaint在处理WM_PAINT消息时的作用,以及TextOut、MoveTo、SetTextAlign、GetTextAlign和LineTo等函数的使用。BeginPaint初始化绘图环境,EndPaint标记绘画结束,避免重复的WM_PAINT消息。TextOut用于在指定位置输出文本,而Set和GetTextAlign则涉及文本对齐方式的设置和获取。LineTo函数用于绘制线条,MoveToEx改变当前绘图位置。
摘要由CSDN通过智能技术生成

BeginPaint函数为指定窗口进行绘图工作的准备,并用将和绘图有关的信息填充到一个PAINTSTRUCT结构中。

WINUSERAPI
HDC
WINAPI
BeginPaint(
    __in HWND hWnd,  //窗口句柄
    __out LPPAINTSTRUCT lpPaint); //绘图环境指针

EndPaint 函数标记指定窗口的绘画过程结束;这个函数在每次调用BeginPaint函数之后被请求,但仅仅在绘画完成以后。

BOOL EndPaint(
HWND hWnd, // 窗口句柄
CONST PAINTSTRUCT *lpPaint // 绘制窗口的数据
);

PAINTSTRUCT是一种包含了某应用程序用来绘制它所拥有的窗口客户区所需要的信息的结构体。

typedef struct tagPAINTSTRUCT {
    HDC         hdc;  //绘图上下文句柄
    BOOL        fErase; //如果为非零值则擦除背景,否则不擦除背景
    RECT        rcPaint; //绘图区域
    BOOL        fRestore; //系统预留,暂时不用
    BOOL        fIncUpdate;//系统预留,暂时不用
    BYTE        rgbReserved[32];//系统预留,暂时不用
} PAINTSTRUCT, *PPAINTSTRUCT, *NPPAINTSTRUCT, *LPPAINTSTRUCT;

BeginPaint可以得到客户区设备描述表的句柄,GetDC也可以得到,MFC里的CClientDC与之对应。

关于BeginPaint、EndPaint和GetDC、ReleaseDC的区别,算是扩展阅读部分:
BeginPaint() 和EndPaint() 可以删除消息队列中的WM_PAINT消息,并使无效区域有效。
GetDC()和ReleaseDC()并不删除也不能使无效区域有效,因此当程序跳出 WM_PAINT 时 ,无效区域仍然存在。系统就回不断发送WM_PAINT消息,于是程序不断处理WM_PAINT消息。

BeginPaint、EndPaint会告诉GDI内部,这个窗口需要重画的地方已经重画了,这样WM_PAINT处理完返回给系统后,系统不会再重发WM_PAINT,而GetDC没有告诉系统这个窗口需要重画的地方已经画过,在你把程序返回给系统后,系统一直以为通知你的重画命令你还没有乖乖的执行或者执行出错,所以在消息空闲时,它还会不断地发WM_PAINT催促你画,导致程序卡死。

Te

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值