有谁能告诉我为什么无法创建子窗口? 我正在使用伪造者win32api指南,但我无法弄清楚是什么问题。
当程序开始运行时,我拥有所有控件,但是当我点击“新”菜单项时,我收到错误消息。这是在winmain之后。
其他内容如menuitems,工具和状态栏,打开或保存文件都可以。
**HWND CreateNewMDIChild(HWND hMDIClient)
{
MDICREATESTRUCT mcs;
HWND hChild;
mcs.szTitle = "[Untitled]";
mcs.szClass = g_szChildClassName;
mcs.hOwner = GetModuleHandle(NULL);
mcs.x = mcs.cx = CW_USEDEFAULT;
mcs.y = mcs.cy = CW_USEDEFAULT;
mcs.style = MDIS_ALLCHILDSTYLES;
hChild = (HWND)SendMessage(hMDIClient, WM_MDICREATE, 0, (LONG)&mcs);
if(!hChild)
{
MessageBox(hMDIClient, "MDI Child creation failed.", "Oh Oh...",
MB_ICONEXCLAMATION | MB_OK);
}
return hChild;
}**
答案 0 :(得分:1)
这是sample code中的一个不幸的错误,它阻止它在64位Windows上运行。 SendMessage的最后一个参数是LPARAM
类型(LONG_PTR
的别名)。将其转换为LONG
会将其截断为4个字节,对于64位指针来说还不够(请参阅Data Type Ranges)。
更改以下行
hChild = (HWND)SendMessage(hMDIClient, WM_MDICREATE, 0, (LONG)&mcs);
到
hChild = (HWND)SendMessage(hMDIClient, WM_MDICREATE, 0, (LPARAM)&mcs);
并且代码应按预期运行。