您的位置:首页 > 其它

win32开发(创建子窗口)

2017-12-22 08:43 295 查看
【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing @163.com】

    在win32中,有的时候需要创建额外的子窗口。所谓子窗口的概念,就是窗口本身不会超出母窗口的边界,所有的操作都是在母窗口里面完成的。子窗口可以用os提供的默认类型来完成,也可以自定义类型来完成,即自定义WNDCLASSEX。常用的子窗口有BUTTON、COMBOBOX、EDIT、LISTBOX、STATIC、SCROLLBAR、RichEdit等类型,注意msdn提供的另外一种MDICLIENT类型是专门为mdi程序准备的。

    那么,代码怎么编写呢?很简单,基本上就是一行代码,在WM_CREATE里面添加就可以了,
case WM_CREATE:
HWND hsub;
hsub = CreateWindow(
"BUTTON", // predefined class
"OK", // button text
WS_VISIBLE | WS_CHILD | BS_DEFPUSHBUTTON, // styles
10, // starting x position
10, // starting y position
100, // button width
100, // button height
hWnd, // parent window
NULL, // No menu
hInst,
NULL); // pointer not needed

    注意,这里class类型一定要填写成"BUTTON",这也是子窗口之间的最大区别。这里只要创建了,就可以显示了。当然,如果是别的类型的子窗口,那就替换成对应的名字就可以了。比如说,如果是"SCROLLBAR",就可以这么写,
case WM_CREATE:
HWND hsub;
hsub = CreateWindow(
"SCROLLBAR", // predefined class
"OK", // button text
WS_VISIBLE | WS_CHILD | BS_DEFPUSHBUTTON, // styles
10, // starting x position
10, // starting y position
100, // button width
100, // button height
hWnd, // parent window
NULL, // No menu
hInst,
NULL); // pointer not needed
    有兴趣的同学可以按照class的name,进行一个一个的尝试。不过,既然子窗口都准备好了,那么消息在什么地方处理呢?其实也不复杂。大部分子窗口的消息和母窗口共享一个WndProc函数,直接在对应的WM_COMMAND或者WM_NOTIFY里面处理就好了。如果不确定,可以在这两个地方设置调试断点,再根据wParam和lParam分别判断就可以了。
case WM_NOTIFY:
break;

case WM_COMMAND:
wmId = LOWORD(wParam);
wmEvent = HIWORD(wParam);
// Parse the menu selections:
switch (wmId)
{
case IDM_ABOUT:
DialogBox(hInst, (LPCTSTR)IDD_ABOUTBOX, hWnd, (DLGPROC)About);
break;
case IDM_EXIT:
DestroyWindow(hWnd);
break;
default:
return DefWindowProc(hWnd, message, wParam, lParam);
}
break;
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: