我创建了一个在CreateWindowEx函数中指定WS_CHILD
的窗口,如下所示:
HWND newEvent = CreateWindowEx(WS_EX_CONTROLPARENT, NewEventClassName, NewEventTitle,
WS_BORDER | WS_OVERLAPPEDWINDOW | WS_CHILD,
CW_USEDEFAULT, CW_USEDEFAULT,
400, 230, hwnd, NULL, NULL, NULL);
然后,我在其中创建了一个Edit Control:
HWND editCtrlEventName;
editCtrlEventName = CreateWindowEx(WS_EX_CLIENTEDGE, L"EDIT", L"EVENT_NAME",
WS_GROUP | WS_CHILD | WS_VISIBLE |
ES_LEFT | ES_UPPERCASE, 110, 10, 130, 20,
newEvent, (HMENU)2001, NULL, NULL);
创建窗口时,会创建编辑控件,但在其中禁用,我无法通过任何方式启用控件。我已经尝试在编辑控件中使用EnableWindow()
函数和类似函数,但没有成功。但是,当我从WS_CHILD
删除newEvent
样式时,它的效果非常好。
我是winapi编程的初学者,这种行为对我来说并不清楚。在子窗口中创建编辑控件有什么问题吗?
答案 0 :(得分:3)
HWND newEvent = CreateWindowEx(WS_EX_CONTROLPARENT, NewEventClassName, NewEventTitle, WS_BORDER | WS_OVERLAPPEDWINDOW | WS_CHILD, CW_USEDEFAULT, CW_USEDEFAULT, 400, 230, hwnd, NULL, NULL, NULL);
上述代码中的错误是将两个互斥的样式组合在一起:WS_OVERLAPPEDWINDOW | WS_CHILD
。
WS_OVERLAPPEDWINDOW
是仅适用于顶级窗口的样式,WS_CHILD
当然仅适用于子窗口。
此外,CW_USEDEFAULT
对子窗口无效。
除此之外,创建编辑控件作为另一个子窗口的子窗口不应该有任何问题。 Windows本身在很多地方使用这种技术,例如组合框具有编辑控件作为子窗口。