为什么禁用父 Window 和 WS_CHILD 中的编辑控件?
Why Edit Controls inside a Parent Window with WS_CHILD are disabled?
我创建了一个window,在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);
然后,我在其中创建了一个编辑控件:
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);
创建 window 时,会创建编辑控件,但在其中禁用,我无法通过任何方式启用该控件。我已经尝试在我的编辑控件中使用 EnableWindow()
函数和类似函数,但没有成功。但是,当我从 newEvent
中删除 WS_CHILD
样式时,它工作得很好。
我是 winapi 编程的初学者,我不清楚这种行为。在子 windows 中创建编辑控件有什么问题吗?
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
是top-levelwindows独有的样式,WS_CHILD
当然只是childwindows.
此外,CW_USEDEFAULT
对 child window 无效。
除此之外,创建编辑控件作为另一个 child window 的 child window 应该没有任何问题。 Windows 本身在很多地方都使用了这种技术,例如组合框有一个编辑控件 child window.
我创建了一个window,在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);
然后,我在其中创建了一个编辑控件:
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);
创建 window 时,会创建编辑控件,但在其中禁用,我无法通过任何方式启用该控件。我已经尝试在我的编辑控件中使用 EnableWindow()
函数和类似函数,但没有成功。但是,当我从 newEvent
中删除 WS_CHILD
样式时,它工作得很好。
我是 winapi 编程的初学者,我不清楚这种行为。在子 windows 中创建编辑控件有什么问题吗?
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
是top-levelwindows独有的样式,WS_CHILD
当然只是childwindows.
此外,CW_USEDEFAULT
对 child window 无效。
除此之外,创建编辑控件作为另一个 child window 的 child window 应该没有任何问题。 Windows 本身在很多地方都使用了这种技术,例如组合框有一个编辑控件 child window.