NDOW + 1) ; wndclass.lpszMenuName = NULL ; wndclass.lpszClassName = TEXT ("EllipPush") ;
RegisterClass (&wndclass) ;
该视窗类别指定视窗讯息处理程式为EllipPushWndProc,在ABOUT3.C中正是这样。
EllipPushWndProc视窗讯息处理程式只处理三种讯息:WM_PAINT、WM_KEYUP和WM_LBUTTONUP。在处理WM_PAINT讯息时,它从GetClientRect中取得视窗的大小,从GetWindowText中取得显示在按键上的文字,用Windows函式Ellipse和DrawText来输出椭圆和文字。
WM_KEYUP和WM_LBUTTONUP讯息的处理非常简单:
视窗讯息处理程式使用GetParent来取得其父视窗(即对话方块)的代号,并发送一个WM_COMMAND讯息,讯息的wParam等於控制项的ID,这个ID是用GetWindowLong取得的。然後,对话方块视窗讯息处理程式将这个讯息传给ABOUT3内的对话方块程序,结果得到一个使用者自订的按键,如图11-3所示。您可以用同样的方法来建立其他自订对话方块控制项。

这就是全部要做的吗?其实不然。通常,对於维护子视窗控制项所需要的处理而言,EllipPushWndProc只是一个空架子。例如,按钮不会像普通的按键那样闪烁。要翻转按键内的颜色,视窗讯息处理程式必须处理WM_KEYDOWN(来自空白键)和WM_LBUTTONDOWN讯息。视窗讯息处理程式还必须在收到WM_LBUTTONDOWN讯息时拦截 |