为什么它不能创建 child window?
Why it cant create the child window?
谁能告诉我为什么无法创建child window?
我正在使用伪造的 win32api 指南,但我无法弄清楚问题是什么。
程序启动时 运行 我拥有所有控件,但是当我单击 'new' 菜单项时,我收到错误消息。这是在 winmain 之后。
菜单项、工具和状态栏、打开或保存文件等其他功能正常。
**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;
}**
这是 sample code, that prevents it from running on 64-bit Windows. The final parameter to SendMessage is of type LPARAM
(an alias for LONG_PTR
). Casting it to LONG
truncates it to 4 bytes, not quite sufficient for a 64-bit pointer (see Data Type Ranges) 中的一个不幸错误。
更改以下行
hChild = (HWND)SendMessage(hMDIClient, WM_MDICREATE, 0, (LONG)&mcs);
到
hChild = (HWND)SendMessage(hMDIClient, WM_MDICREATE, 0, (LPARAM)&mcs);
并且代码应该 运行 符合预期。
谁能告诉我为什么无法创建child window? 我正在使用伪造的 win32api 指南,但我无法弄清楚问题是什么。
程序启动时 运行 我拥有所有控件,但是当我单击 'new' 菜单项时,我收到错误消息。这是在 winmain 之后。
菜单项、工具和状态栏、打开或保存文件等其他功能正常。
**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;
}**
这是 sample code, that prevents it from running on 64-bit Windows. The final parameter to SendMessage is of type LPARAM
(an alias for LONG_PTR
). Casting it to LONG
truncates it to 4 bytes, not quite sufficient for a 64-bit pointer (see Data Type Ranges) 中的一个不幸错误。
更改以下行
hChild = (HWND)SendMessage(hMDIClient, WM_MDICREATE, 0, (LONG)&mcs);
到
hChild = (HWND)SendMessage(hMDIClient, WM_MDICREATE, 0, (LPARAM)&mcs);
并且代码应该 运行 符合预期。