0

我有一个父窗口和几个子窗口。使用 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
        );
4

1 回答 1

1

检查GetLastError。如果它不为零,那么您很可能在滥用 API。如果为 0,则意味着窗口过程通过从WM_NCCREATEor返回 FALSE 显式失败了创建WM_CREATE

在处理这些消息时,窗口过程可以访问您传递给函数的所有参数(样式、标题、坐标、父窗口和菜单),并且特定的窗口类可能需要通过 传递附加数据lpCreateParams,甚至在标题或坐标,否则创建失败。

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

于 2012-06-28T11:35:21.897 回答