2016-04-13 2 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

Как можно предположить, это неправильная ручка, которую выполняет функция обратного вызова (которая представляет собой ручку NULL, которые были переданы в SetTimer).

Для исправления кода выше, вы должны использовать один и тот же дескриптор для обоих показать и скрыть.

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

Спасибо.

Смежные вопросы