【问题标题】:Why Edit Controls inside a Parent Window with WS_CHILD are disabled?为什么禁用带有 WS_CHILD 的父窗口内的编辑控件?
【发布时间】:2018-06-18 17:44:37
【问题描述】:

我创建了一个窗口,在 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);

创建窗口时,创建了编辑控件,但在其中禁用了它,我无法以任何方式启用该控件。我已经尝试在我的编辑控件中使用EnableWindow() 功能和类似功能,但没有成功。但是,当我从newEvent 中删除WS_CHILD 样式时,它可以完美运行。

我是 winapi 编程的初学者,这种行为对我来说不是很清楚。在子窗口中创建编辑控件有什么问题吗?

【问题讨论】:

    标签: c winapi controls


    【解决方案1】:
    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_CHILDWS_OVERLAPPEDWINDOW 是只适用于顶级窗口的样式,WS_CHILD 当然只适用于子窗口。

    另外,CW_USEDEFAULT 对子窗口无效。

    除此之外,将编辑控件创建为另一个子窗口的子窗口应该不会有任何问题。 Windows 本身在很多地方都使用了这种技术,例如组合框有一个编辑控件作为子窗口。

    【讨论】:

      猜你喜欢
      • 2014-09-03
      • 2019-06-12
      • 1970-01-01
      • 1970-01-01
      • 2016-12-20
      • 1970-01-01
      • 1970-01-01
      • 2011-04-16
      相关资源
      最近更新 更多