这个CreateWindowEx函数出了什么问题?

时间:2011-09-13 21:43:47

标签: c++ visual-studio-2008 winapi api visual-c++

好的,首先对我的尝试做一点概述。
我试图在主父窗口中创建3个子窗口,并使用EnumChildWindowEnumChildProc枚举它们,我想创建3个与父级相同高度的子窗口,但是1/3宽度,并将它们一个接一个地对齐..

所以,我捕获WM_CREATE msg来创建那些子窗口,WM_SIZE使用MoveWindow移动和对齐它们,一切都很好,除了没有子窗口的事实创建。当我调试它时,我发现(在Visual Studio 2008的Autos窗口中,在调试时)我的CreateWindowEx语句没有被执行(autos窗口说“表达式无法评估。”

以下是声明:

CreateWindowEx(0, (LPCWSTR)("childClass"), (LPCWSTR)NULL, WS_CHILD | WS_BORDER, 0, 0, 0, 0, hWnd, (HMENU) (int) (ID_FIRSTCHILD + 1), hInst, NULL);

当然我在for循环中使用它来创建3个窗口,但那是另一回事......
那么,任何人都可以帮助/指导/建议我这里发生了什么?或者我做错了什么?

ps:我正在阅读这本电子书从我获得此代码的所有内容,所以请不要让我采用其他方法或者其他东西,比如说将Child创建代码放在别的地方......因为我不是制作任何节目,但只是按照一本书的例子......:)

1 个答案:

答案 0 :(得分:1)

我的精神力量建议您需要将WS_VISIBLE样式传递给上面的CreateWindow调用以用于您的子窗口 - 这样您就可以看到它们。 :)

我的开发经验表明如下:

CreateWindowEx的返回值是多少?您是否将返回值分配给变量。如果是这样,你在调试器中的那一行设置了一个断点吗?如果CreateWindow的返回值为NULL,那么什么是GetLastError(您可以在调试器中将其评估为“@err”)。

弹出主窗口后(子项不可见),您是否运行Spy ++以查看子窗口是否存在?他们的状态是什么?

否则,您是否验证了您的子窗口类的WndProc的WM_CREATE回调被调用?