Win32 SDK基础(十二)之WM_PAINT消息的处理(图)


当前第2页 返回上一页

总结:

触发WM_PAINT消息的本质是改变窗口对应的显存的大小就触发一次,我们进行的每一次窗口最大化、最小化并恢复都是因为改变了窗口的显存而触发了该消息。在我们向屏幕外面拖动窗口时,这点比较特殊,窗口的显存是在一点点被擦除的,此时不会触发WM_PAINT,但是拉回窗口后,显存需要将擦除的部分重新绘制,这就又会触发一次该消息。而InvalidateRect函数,就是通过强制的清除并重绘显存来实现触发WM_PAINT消息。

三、WM_PAINT消息的处理

我们尝试处理WM_PAINT消息,并在窗口上绘制一个矩形,绘图步骤如下:

1、开始绘图处理

1

2

3

4

HDC BeginPaint(

        HWND hwnd,//绘图窗口

        LPPAINTSTRUCT  lpPaint

    );

我们利用BeginPaint获取绘图设备的句柄---一个HDC对象,然后在改绘图设备上进行绘制。

2、利用HDC对象进行绘图

3、结束绘图处理

1

2

3

4

Bool EndPoint(

        HWND hWnd,

        CONST PAINTSTRUCT *lpPaint

);

绘制过程参考下面的代码:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

//窗口处理函数 

LRESULT CALLBACK WndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam) 

     

    switch (uMsg) 

    

    case WM_DESTROY: 

        PostQuitMessage(0);//可以使GetMessage返回0 

        break;

    case  WM_PAINT:

        {

            PAINTSTRUCT pt;

            HDC hdc;

            hdc=BeginPaint(hWnd,&pt);

            Rectangle(hdc,0,0,100,100);

            EndPaint(hWnd,&pt);

        }

    case WM_LBUTTONDOWN:

        {

            //InvalidateRect(hWnd,NULL,true);

        }

        break;

    default

        break

    

    return DefWindowProc(hWnd, uMsg, wParam, lParam); 

}

执行结果如下,我们成功绘制了一个矩形:

以上就是Win32 SDK基础(十二)之WM_PAINT消息的处理(图)的详细内容,更多文章请关注木庄网络博客

返回前面的内容

相关阅读 >>

win32 sdk基础(十二)之wm_paint消息的处理(图)

win32 sdk基础(五)之关于窗口类的简单介绍

win32 sdk基础(六)之详解窗口类的查找过程和相关api

win32 sdk基础(一)之windows程序分类以及库和头文件所在目录的详解

win32 sdk基础(三)之如何从零开始创建windows窗口的第一步

win32是什么意思?

win32 sdk基础(八)之 关于windows消息机制的详解(图)

win32 sdk基础(二)之关于cl.exe和link.exe编译和连接程序的详解(图)

关于sdk基础的详细介绍

win32 sdk基础(四)之如何从零开始创建windows窗口的第二步

更多相关阅读请进入《win32》频道 >>



打赏

取消

感谢您的支持,我会继续努力的!

扫码支持
扫码打赏,您说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

分享从这里开始,精彩与您同在

评论

管理员已关闭评论功能...