无法使用现有子类创建窗口(CreateWindowEx)

时间:2012-06-28 10:57:47

标签: c++ createwindowex window-style

我有一个父窗口和几个子窗口。使用SpyXX,我可以看到孩子们都有一个特定的样式类,比方说ChildWindowClass

当我使用此特定类的名称创建窗口时,CreateWindowEx会返回NULL句柄。如果我使用自己的类并且只设置父级,则窗口是子窗口,但是 - 当然 - 与所有其他子级具有不同的类。

如果我找到了我的样式然后设置它,就会找到样式,但不会为我的子窗口设置样式。它仍然显示CreateWindowEx

使用的样式
HWND firstChild = FindWindowEx(MyClass::_parent, NULL, szFsxChildWindowClass, NULL);
LONG childStyle = GetWindowLong(firstChild, GWL_STYLE);
...
SetWindowLong(MyClass::_child,GWL_STYLE, childStyle);

我没有注册ChildWindowClass,所以我无法交叉检查它是如何注册的。那么如何为我的子窗口设置这种样式呢?

- 按要求编辑电话 -

 child = CreateWindowEx( WS_EX_LEFT | WS_EX_LTRREADING | WS_EX_RIGHTSCROLLBAR,
        szWindowClass, // this is where I want to place the name of the child class
        _T("Test"),
        WS_CHILDWINDOW | WS_VISIBLE,
        x,y, // 0,0
        w, h, // 500,100
        MyClass::_parent, // parent
        NULL,
        MyClass::_hInstance, // must this be 0??
        NULL
        );

1 个答案:

答案 0 :(得分:1)

检查GetLastError。如果它不为零,那么你最有可能误用API。如果它为0,则表示窗口过程通过从WM_NCCREATEWM_CREATE返回FALSE明确地使创建失败。

当处理这些消息时,窗口过程可以访问您传递给函数的所有参数(样式,标题,坐标,父窗口和菜单),并且该特定窗口类可能需要通过{{1传递额外数据或者甚至在标题或坐标中,否则就会失败。

为该类的窗口设置断点或钩子lpCreateParams,并检查这些现有子窗口的创建方式,参数是什么。 (假设你不只是有文档!)