2016-04-13 297 views
0

我試圖在回調函數中使用ShowWindow來顯示一個窗口,該函數在我隱藏它之後調用了SetTime,但它沒有起作用。 請檢查下面的代碼示例。Win32:隱藏後無法顯示窗口?

#define _WIN32_WINNT 0x0500 
#include<windows.h> 
void CALLBACK f(HWND hwnd, UINT uMsg, UINT timerId, DWORD dwTime) 
{ 
    MessageBoxA(NULL,"Test","test2",MB_OK); 
    ShowWindow(hwnd, SW_SHOW); //This will not show the window :(
    MessageBoxA(NULL,"Is it shown?","test2",MB_OK); 
} 
int main() 
{ 
    MSG msg; 
    ShowWindow(GetConsoleWindow(), SW_HIDE); 
    SetTimer(NULL, 0, 1000*3, &f); 
    while(GetMessage(&msg, NULL, 0, 0)) 
    { 
     TranslateMessage(&msg); 
     DispatchMessage(&msg); 
    } 
    return 0; 
} 

謝謝。

+0

你爲什麼投「f」?刪除該演員。你不檢查錯誤。爲什麼不? –

+0

很難說,什麼*「不起作用」*。文字說,隱藏後無法顯示窗口。代碼說別的東西('ShowWindow(hwnd,SW_SHOW); //不會隱藏窗口')。我不知道,爲什麼你選擇了錯誤的[TimerProc](https://msdn.microsoft.com/en-us/library/windows/desktop/ms644907.aspx)簽名。 – IInspectable

+1

爲什麼不在''ShowWindow''調用(在'f'內)設置一個斷點,並觀察'hwnd'的值?由於計時器沒有與窗口關聯,我假設它是'NULL'。 – IInspectable

回答

0

由於@Inspectable建議,這是回調函數所攜帶的錯誤句柄(它是已被傳遞給SetTimer的句柄NULL)。

若要更正上面的代碼,您應該使用相同的句柄爲顯示隱藏

#define _WIN32_WINNT 0x0500 
#include<windows.h> 
HWND hwnd; 
void CALLBACK f(HWND __hwnd__, UINT uMsg, UINT timerId, DWORD dwTime) 
{ 
    MessageBoxA(NULL,"Test","test2",MB_OK); 
    ShowWindow(hwnd, SW_SHOW); //This will not show the window :(
    MessageBoxA(NULL,"Is it shown?","test2",MB_OK); 
} 
int main() 
{ 
    MSG msg; 
    hwnd=GetConsoleWindow(); 

    ShowWindow(hwnd , SW_HIDE); 

    SetTimer(NULL, 0, 1000*3, &f); 
    while(GetMessage(&msg, NULL, 0, 0)) 
    { 
     TranslateMessage(&msg); 
     DispatchMessage(&msg); 
    } 
    return 0; 
} 

謝謝。