子窗口的创建非常非常重要
步骤:1、新建窗口类,在窗口类中指名对应的自定义的窗口过程。窗口类类名要唯一,它
是各窗口类相互区别的标识。注意,类名或为静态变量,或为全局变量,因为程
序随时都用他们。
2、创建窗体时,指定其风格之一为WS_CHILD, 指定其父窗口句柄,得到父窗体实
例句柄,并赋给子窗体。
3、在主窗体的create消息中,创建0尺寸的子窗体,主窗体的size消息中,利用
movewindow函数,重设窗体大小,重置窗体位置。
实例为CTRL002,CTRL003
实例CTRL001单击按钮显示对应文字
子窗口向父窗口发送消息
CreateWindow呼叫使用下面这些参数:
Class name(类别名称) Window text(窗口文字) Window style(窗口样式) x position(x位置) y position(y位置) Width(宽度) Height(高度) Parent window(父窗口) Child window ID(子窗口ID) Instance handle(执行实体句柄 )Extra parameters(附加参数) | TEXT ("button") button[i].szText WS_CHILD|WS_VISIBLE|button[i].iStyle cxChar cyChar * (1 + 2 * i) 20 * xChar 7 * cyChar / 4 hwnd (HMENU)i ((LPCREATESTRUCT) lParam) -> hInstance NULL |
说明:从WM_COMMAND区别出单击了哪个按钮。通过子窗口的ID号来区分。每个子窗口在创建时,就已经分配了一个唯一的ID号。ID号包含在WM_COMMAND消息中wParam的低字节位。用LOWORD()宏来获取ID。
“用鼠标单击按钮时,子窗口控制就向其父窗口发送一个WM_COMMAND消息。...捕获WM_COMMAND消息....”
“LOWORD(wParam) 子窗口ID
HIWORD(wParam) 通知码
lParam 子窗口句柄”
实例CTRL002 利用多个静态窗体绘制棋盘
说明:1、窗体类别必需是static类,否则程序不能生成静态窗体
2、利用GetWindowLong得到窗体实例句柄
3、HWND是数值类型,可以定义成数组
4、创建子窗体时,将大小设为0,以便重置
4、利用movewidow(...)函数重置静态子窗体位置
运行结果如下图