gpt4 book ai didi

c++ - 无法使用现有的子类创建窗口 (CreateWindowEx)

转载 作者:行者123 更新时间:2023-11-28 08:01:49 30 4
gpt4 key购买 nike

我有一个父窗口和一些附加到它的子窗口。使用 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
);

最佳答案

检查 GetLastError。如果它不为零,则您很可能滥用了 API。如果为 0,则表示窗口过程通过从 WM_NCCREATEWM_CREATE 返回 FALSE 明确地创建失败。

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

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

关于c++ - 无法使用现有的子类创建窗口 (CreateWindowEx),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11243140/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com