|
OWNDRAW便启动了WM_DRAWITEM处理过程。然後,通过呼叫Polygon,OWNDRAW在按钮上画出4个黑色实心的三角形。这是一般的情形。
如果按钮目前被按下,那么DRAWITEMSTRUCT的itemState栏位中的某位元将被设为1。您可以使用ODS_SELECTED常数来测试这些位元。如果这些位元被设立,那么OWNDRAW将通过呼叫InvertRect将按钮翻转为相反的颜色。如果按钮拥有输入焦点,那么itemState的ODS_FOCUS位元将被设立。在这种情况下,OWNDRAW通过呼叫DrawFocusRect,在按钮的边界内画一个虚线的矩形。
在使用拥有者绘制按钮时,应该注意以下几个方面:Windows获得装置内容并将其作为DRAWITEMSTRUCT结构的一个栏位。保持装置内容处於您找到它时所处的状态,任何被选进装置内容的GDI物件都必需被释放。另外,当心不要在定义按钮边界的矩形外面进行绘制。
静态类别
在CreateWindow函式中指定视窗类别为「static」,您就可以建立静态文字的子视窗控制项。这些子视窗非常「文静」。它既不接收滑鼠或键盘输入,也不向父视窗发送WM_COMMAND讯息。
当您在静态子视窗上移动或者按下滑鼠时,这个子视窗将拦截WM_NCHITTEST讯息并将HTTRANSPARENT的值传回给Windows,这将使Windows向其下层视窗,通常是它的父视窗,发送相同的WM_NCHITTEST讯息。父视窗常常将该讯息传递给DefWindowProc,在这里,它被转换为显示区域的滑鼠讯息。
前六个静态视窗样式只简单地在子视窗的显示区域内画一个矩形或者边框。在下表的上部,「RECT」静态样式(左列)是填入图样的矩形样式;三个「FRAME」样式(右列)是没有填入图样的矩形轮廓:
| SS_BLACKRECT
SS_GRAYRECT
SS_WHITERECT |
SS_BLACKFRAME
SS_GRAYFRAME
SS_WHITEFRAME |
「BLACK」、「GRAY」、「WHITE」并不意味著黑、灰和白色,这些颜色是由系统颜色决定的,如表9-4所示。
|