2016-04-13 6 views
0

Ich habe versucht, ein Fenster mit ShowWindow in einer Callback-Funktion zu zeigen, die durch eine SetTime aufgerufen wird, nachdem ich es ausgeblendet habe, aber es hat nicht funktioniert. Bitte überprüfen Sie das folgende Codebeispiel.Win32: Kann das Fenster nicht anzeigen, nachdem es ausgeblendet wurde?

#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; 
} 

Vielen Dank.

+0

Warum hast du 'f' gecastet? Entferne diesen Cast. Sie prüfen nicht auf Fehler. Warum nicht? –

+0

Ziemlich unmöglich zu sagen, was * "nicht funktioniert" *. Der Text sagt, Sie können kein Fenster anzeigen, nachdem es ausgeblendet wurde. Der Code sagt etwas anderes ('ShowWindow (hwnd, SW_SHOW); // wird das Fenster nicht verbergen'). Ich weiß nicht, warum Sie sich für die falsche [TimerProc] (https://msdn.microsoft.com/en-us/library/windows/desktop/ms644907.aspx) Signatur entschieden haben. – IInspectable

+1

Warum setzen Sie keinen Haltepunkt auf Ihren 'ShowWindow'-Aufruf (innerhalb' f') und beobachten den Wert von 'hwnd'? Da der Timer keinem Fenster zugeordnet ist, nehme ich an, dass es "NULL" ist. – IInspectable

Antwort

0

Wie @Intspectable vorgeschlagen, ist es das falsche Handle, dass die Rückruffunktion führt (das ist das Handle NULL, die an SetTimer übergeben worden sind).

den Code oben zu korrigieren, können Sie den gleichen Handgriff für beide zeigen und verstecken verwenden sollten.

#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; 
} 

Vielen Dank.

Verwandte Themen