1. 刷子种类
  2. 常见问题
  3. 刷子的使用时机
刷子种类 逻辑画刷也是一种GDI对象,应用程序常使用逻辑画刷来填充Rectangle,Ellipse, Polygon等图形的内部区域。一般的画刷是一个8×8的位图,利用水平和垂直的重复来填充这些图形的内部区域
库存刷子 系统自带的几种类型,白、浅、灰、深、黑、空,6种刷子,获取方式:
hBrush=GetStockObject(DKGRAY_BRUSH);
纯色刷子 hBrush=CreateSolidBrush(RGB(33,66,55)); 
阴影刷子 hBrush=CreateHatchBrush(HS_CROSS,RGB(255,0,0)); //库存带阴影的刷子
位图刷子 hBrush=CreatePatternBrush(hBitmap); //可以用位图作为刷子
根据结构间接创建的刷子 HBRUSH CreateBrushIndirect( CONST LOGBRUSH *lplb );

根据结构创建刷子的说明:

 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函数填充,问题解决!

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);
}
View Code

相关文章: