1.WM_PAINT的时机: (1)在使用者移动窗口或显示窗口时,窗口中先前被隐藏的区域重新可见。 (2)使用者改变窗口的大小(如果窗口类别样式有着CS_HREDRAW和CS_VREDRAW位旗标的设定)。 (3)程序使用ScrollWindow或ScrollDC函数滚动显示区域的一部分。 (4)程序使用InvalidateRect或InvalidateRgn函数刻意产生WM_PAINT消息。 (5)Windows擦除覆盖了部分窗口的对话框或消息框。 (6)菜单下拉出来,然后被释放。 (7)显示工具提示消息。 2.强行产生WM_PAINT的方法:InvalidateRect InvalidateRgn
3.设备内容(DC): GDI内部保存数据的数据结构。调用GDI函数对数据结构中的数据项进行填充。 4.WM_PAINT处理过程: BeginPaint用于使无效区域变有效,EndPaint用于和BeginPaint匹配出现. BeginPaint会填充PAINTSTRUCT的变量ps。 5.手动使矩形无效: InvalidateRect (hwnd, pRec, bErase) ; hwnd为窗口句柄,pRec为矩形结构的指针,bErase 6.PAINTSTRUCT中的rcPaint成员指定了无效矩形的范围。可以由此获得。
7.自定义背景擦除行为:处理WM_ERASEBKGND消息
8.获得内容句柄的方法: (1)BeginPaint返回(需要EndPaint匹配) (2)GetDC(需要ReleaseDC匹配)
9.GetDC不会使得矩形内容变有效,如果使某个矩形内容变有效,可以用ValidateRect函数
10.非显示区域绘制: DC的获得:GetWindowDC 非显示区域绘制的信息:WM_NCPAINT 11.常用技巧:如果函数中需要用到静态变量,需要将其初始化工作置于WM_CREATE中完成
12.lstr系列用于对通用字符串进行操作。
13.设定文本对齐方式:SetTextAlign
14.lparam 的低16位保存了屏幕宽度,高16位保存了屏幕高度 求高低八位的宏:LOWORD HIWORD 15.用滚动条用户需要进行的操作: (1)初始化滚动条的范围和位置 (2)处理窗口消息处理程序的滚动条消息 (3)更新滚动条内卷动方块的位置 (4)更改显示区域的内容以响应对滚动条的更改 16.追踪滚动信息: wParam的高16位为此时滚动条的位置 wParam的低16位为滚动条事件的类型 17.静态变量会自动初始化,所以WinProc中的静态变量初值均为0
18.用UpdateWindow立即更新窗口(作用机理:WM_PAINT优先级较低,为了提高其优先级,使用UpdateWindow之后,WM_PAINT信息不用进入等待队列,直接被窗口信息处理程序处理)
19.可变滚动条大小:滚动块大小/滚动条长度 = 页面大小/页面总范围