有沒有MessageBox可以返回0而不是沒有足夠內存的情況?我有一個案例,我懷疑我傳遞給MessageBox的HWND無效,或者它屬於正在銷燬的窗口。如果HWND很差,MessageBox返回0
在我的情況下,MessageBox不顯示並返回0,但我似乎有足夠的內存可用。
有沒有MessageBox可以返回0而不是沒有足夠內存的情況?我有一個案例,我懷疑我傳遞給MessageBox的HWND無效,或者它屬於正在銷燬的窗口。如果HWND很差,MessageBox返回0
在我的情況下,MessageBox不顯示並返回0,但我似乎有足夠的內存可用。
有沒有MessageBox可以返回0而不是內存不足的情況?
從MSDN文檔:
http://msdn.microsoft.com/en-us/library/ms645505%28VS.85%29.aspx
If the function fails, the return value is zero. To get extended error information, call GetLastError.
我調用GetLastError(),看看它返回什麼錯誤代碼。
如果將NULL或GetDesktopWindow()作爲HWND參數傳遞,問題是否消失?如果是這樣,那麼你可能是正確的。您也可以嘗試使用IsWindow()或IsWindowVisible()函數提前驗證HWND。 (雖然我不確定這些功能的行爲是否可靠,如果有問題的窗口正在銷燬過程中)。
GetLastError有幫助。它返回1400 - ERROR_INVALID_WINDOW_HANDLE,這是有道理的。我仍然有點困惑,因爲:: IsWindow在同一個句柄上返回TRUE – Tyler 2009-08-17 21:33:45
如果窗口正在被銷燬的過程中,那麼即使窗口被部分銷燬並因此對您的目的沒有用處,IsWindow在技術上仍然可能是真實的。你嘗試過IsWindowVisible嗎? – jeffm 2009-08-17 21:38:44
Both :: IsWindow和:: IsWindowVisible在MessageBox之前返回TRUE,在MessageBox之後返回FALSE。所以,我的結論是,MessageBox以某種方式允許窗口在創建之前完成銷燬 – Tyler 2009-08-17 21:43:28