2015-10-20 37 views
1

我是一名初學者,並嘗試通過遵循一些教程學習win32 API。 我創建了一個MDI窗口。Win32:MDI&退出代碼18(0x12)

但是,我的窗口應用程序正在退出代碼18(0x12)。

Native'已退出,代碼爲18(0x12)。

我不知道爲什麼它不退出代碼爲'0'。

我用PostQuitMessage(0)替換PostQuitMessage(WM_QUIT),問題就解決了。

下一個問題是:

  1. 什麼是PostQuitMessage(WM_QUIT)和 PostQuitMessage之間的不同(0)?

  2. 如何打開只有一個相同的子菜單子窗口。

Can Open same submenu twice

+0

作爲第一步,請查看''查找錯誤代碼,和/或使用Microsoft的errlook實用程序,和/或在C++或PowerShell中創建一個(在C++中,您可以調用FormatMessage並提供結果)。 –

+0

ERROR_NO_MORE_FILES 18(0x12) 沒有更多文件。這是什麼意思?? –

+0

這聽起來像是來自枚舉函數的東西,並且當您的代碼不會調用這樣的函數時,它看起來不相關。但它*可以*幫助你,而且經常這樣做。這是我的錯誤代碼的第一步。雖然我沒有看到它來自哪裏。很奇怪。 –

回答

1

WinMain()函數返回由GetMessage()收到的最後一條消息,這是WM_QUITwParam值。其值爲wParam的值在PostQuitMessage()的調用中指定。你逝去的WM_QUIT爲值,而不是0:

case WM_DESTROY: 
    PostQuitMessage(WM_QUIT); 
    return 0; 

WM_QUIT具有18的數值(0×12):

#define WM_QUIT       0x0012 

這就是爲什麼你的程序與代碼退出18

+0

謝謝,PostQuitMessage(WM_QUIT)和PostQuitMessage(0)之間有什麼不同? –

+0

只要在'wParam'值分配給發佈的'WM_QUIT'消息中有所區別。你可以將它設置爲任何你想要的,但是因爲你的代碼從'WinMain()'返回了這個值,你必須將它設置爲你想返回的任何退出代碼。 –