根据结构创建刷子的说明:
typedef struct tagLOGBRUSH { UINT lbStyle; // 画刷的类型 COLORREF lbColor; // 颜色 LONG lbHatch; // 填充风格 } LOGBRUSH, *PLOGBRUSH;
类型是可选的,有BS_SOLID,BS_HATCHED,BS_PATTERN和BS_HOLLOW四种类型。
方法一:首先计算窗口大小,将结果放入一个矩形结构rect中,然后利用矩形填充函数FillRect填充。
根据前面的研究,得到窗口矩形大小有一种比较简便的方法,如果窗口大小改变,就会发送WM_SIZE消息,其中lParam的低字节存放宽,高字节存放高,分离就会得到窗口的大小。一旦得到窗口大小,就可以调用FillRect函数填充,问题解决!
![](https://i-blog.csdnimg.cn/blog_migrate/8f900a89c6347c561fdf2122f13be562.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/961ddebeb323a10fe0623af514929fc1.gif)
LRESULT CALLBACK WndProc (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam) { HDC hdc; PAINTSTRUCT ps ; static RECT rect ;//矩形变量存储用户区窗口的坐标,尤其是右下角的坐标 static HBRUSH hBrush;//定义一个刷子对象 switch (message) { case WM_SIZE://窗口改变大小发送的消息 rect.right=LOWORD(lParam);//宽 rect.bottom=HIWORD(lParam);//高 return 0; case WM_PAINT: hdc = BeginPaint (hwnd, &ps) ; hBrush=CreateSolidBrush(RGB(0,0,0));//自定义刷子 FillRect(hdc,&rect,hBrush);//刷子填充矩形 EndPaint (hwnd, &ps) ; return 0 ; case WM_DESTROY: DeleteObject(hBrush);//删除刷子 PostQuitMessage (0) ; return 0 ; } return DefWindowProc (hwnd, message, wParam, lParam); }
刷子使用的时机:
一般来说,在WM_CREATE消息时创建,在WM_PAINT消息时选入。原因:刷子的创建函数都不需要HDC,只有通过SelectObject选入设备中时才生效。(在初学阶段,代码繁杂,以致于不知道代码该放在哪个地方,有必要定下一套规则,简化记忆),看一下代码的样式:
case WM_CREATE: hsolidBrush=CreateSolidBrush(RGB(34,56,99));//先创建 return 0 ; case WM_PAINT: hdc = BeginPaint (hwnd, &ps) ; SelectObject(hdc,hsolidBrush);//再选入 Rectangle(hdc,100,100,300,300);//填充矩形 EndPaint (hwnd, &ps) ;
最后,在WM_DESTORY消息间删除创建的刷子句柄。
case WM_DESTROY: DeleteObject(hsolidBrush); PostQuitMessage (0) ; return 0 ;