Monday, December 29, 2008

error 1406 Cannot create a top-level child window.

我在主窗体的WM_CREATE事件中创建一个子窗体.变报了标题里的这个错.
CreateWindowEx(WS_EX_CLIENTEDGE| WS_EX_ACCEPTFILES,
WC_LISTBOX, TEXT(""),
WS_CHILD|WS_VISIBLE|WS_VSCROLL|LBS_NOTIFY ,
0, 0, 100, 100, hWndWindowMain,
NULL, hInst, NULL);


hWndWindowMain是主窗体的句柄, 是主窗体的CreateWindowEx的返回值.

这个问题其实很简单, 之所以可以拿出来晒, 是因为遇到类似的问题的时候, 我们通常挨个检查style有没有错.
但是发现style一切正常后,就觉得...啊... 灵异事件啊..

其实问题的实质在hWndWindowMain上, 报错说是"Cannot create a top-level child window. "
为什是"top-level"呢? 原来hWndWindowMain还没有建立, 主窗体的CreateWindowEx还没有返回, 他现在不是一个有效的句柄.

所以, hWndWindowMain换成消息循环的主窗口句柄就可以了.
LRESULT CALLBACK WndProc (HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
.....
CreateWindowEx (WS_EX_CLIENTEDGE| WS_EX_ACCEPTFILES,
WC_LISTBOX, TEXT(""),
WS_CHILD|WS_VISIBLE|WS_VSCROLL|LBS_NOTIFY ,
0, 0, 100, 100,
hWnd , NULL, hInst, NULL);

No comments:

Post a Comment