这次就不贴代码了,试一下总结下能学到的新的东西
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
函数原型:BOOL Invertrect(HDC hdc, CONST RECT *lprc);
参数: hdc:设备环境句柄。
lprc:指向包含将被反转的矩形的逻辑坐标的RECT结构的指针。
返回值:如果函数调用成功,返回值非零,如果函数调用失败,返回值是0。
这个在本程序中的应用就是在按钮被选定时,也就是鼠标按下一个按钮还未松开时,让矩形反转。
5、FillRect
函数功能:该函数用指定的画刷填充矩形,此函数包括矩形的左上边界,但不包括矩形的右下边界。
6、FrameRect
函数功能:该函数用指定的画刷为指定的矩形画边框。边框的宽和高总是一个逻辑单元。
7、DrawFocusRect
函数功能: 画一个焦点矩形。这个矩形是在标志焦点的样式中通过异或运算完成的(焦点通常用一个点线表示)。如用同样的参数再次调用这个函数,就表示删除焦点矩形。
这个在程序中的应用是为焦点的按钮画一个虚线框,表明焦点在该按钮上。