《Windows程序设计》之自给按钮

这次就不贴代码了,试一下总结下能学到的新的东西

1、WM_DRAWITEM消息

当windows要画这个控件的时候收到的消息,可以在这里设置控件的一些外观上的属性。

前提是设置OWNER_DRAW标识,不设置是不会调此函数的。

2、WM_CTLCOLORBTN消息

当子窗口即将重绘客户区时,按钮控件会把这个消息发给其父窗口的窗口过程。

当父窗口的窗口过程收到WM_CTBCOLORBTN消息时,wParam消息参数是按钮的设备环境的句柄,lParam是按钮的窗口句柄。

3、DRAWITEMSTRUCT结构体

DRAWITEMSTRUCT 为需要自绘的控件或者菜单项提供了必要的信息。在需要绘制的控件或者菜单项对应的WM_DRAWITEM消息函数中得到一个指向该结构的指针。

typedef struct tagDRAWITEMSTRUCT {

  UINT CtlType;-------------------控件的类型

  UINT CtlID;------------------------ID值

  UINT itemID;---------------------菜单项ID

  UINT itemAction;---------------绘制行为

  UINT itemState;-----------------当前绘制操作完成后,所绘项的可见状态

  HWND hwndItem;--------------窗口句柄

  HDC hDC;-------------------------设备环境

  RECT rcItem;---------------------矩形区域

  ULONG_PTR itemData;------传递给菜单控件的值

} DRAWITEMSTRUCT, NEAR *PDRAWITEMSTRUCT, FAR *LPDRAWITEMSTRUCT

itemState & ODA_SELECT判断是否被选中,itemSate & ODA_FOCUS判断是否具有焦点

4、InvertRect

函数功能:该函数通过对矩形内部的像素点进行逻辑NOT操作而将窗口中的矩形反转。  

函数原型:BOOL Invertrect(HDC hdc, CONST RECT *lprc);  

参数:  hdc:设备环境句柄。  

lprc:指向包含将被反转的矩形的逻辑坐标的RECT结构的指针。  

返回值:如果函数调用成功,返回值非零,如果函数调用失败,返回值是0。

这个在本程序中的应用就是在按钮被选定时,也就是鼠标按下一个按钮还未松开时,让矩形反转

5、FillRect

函数功能:该函数用指定的画刷填充矩形,此函数包括矩形的左上边界,但不包括矩形的右下边界。

6、FrameRect

函数功能:该函数用指定的画刷为指定的矩形画边框。边框的宽和高总是一个逻辑单元。

7、DrawFocusRect

函数功能: 画一个焦点矩形。这个矩形是在标志焦点的样式中通过异或运算完成的(焦点通常用一个点线表示)。如用同样的参数再次调用这个函数,就表示删除焦点矩形。

这个在程序中的应用是为焦点的按钮画一个虚线框,表明焦点在该按钮上。

你可能感兴趣的:(《Windows程序设计》之自给按钮)