2015-04-06 55 views
0

誰能告訴我爲什麼不能創建子窗口? 我使用僞造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; 

}** 
+2

請發佈[MCVE](http://stackoverflow.com/help/mcve)或刪除較少/不感興趣的代碼。 – 2015-04-06 09:01:19

+0

我減少了。 – Frank 2015-04-06 09:09:22

+0

怎麼樣 - 你的Windows程序(g_szChildClassName)是否被調用? GetLastError()怎麼樣? – sutol 2015-04-06 12:09:59

回答

1

這是在sample code一個不幸的錯誤,防止它在64位Windows上運行。 SendMessage的最終參數類型爲LPARAMLONG_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); 

和代碼是否按照預期應該運行。

+0

我做了更改,但不起作用。我已經從示例文件中複製了代碼並且它可以正常工作,但仍然不知道如何...謝謝。 – Frank 2015-04-07 09:09:43

相關問題