2009-02-14 3 views
2

Я не могу восстановить окно после того, как «сведение к минимуму» окно в трей, делая это в WndProc:Win32: Возвращение свернутого и скрытое окно к началу

case WM_SIZE: 
    if (wparam==SIZE_MINIMIZED) { 
    ShowWindow(hwnd,SW_HIDE); 
    } 
    break; 

лоток обработчика сообщений выглядит следующим образом :

case TRAY_ICON_MESSAGE: 
    switch(lparam) { 
    case WM_LBUTTONDOWN: 
    ShowWindow(hwnd, SW_RESTORE); 
    BringWindowToTop(hwnd); 
    SetFocus(hwnd); 
    break; 
    // ... 

Окно снова появляется, но всегда скрыто под другими окнами и не выходит на верх. Ни SetFocus(), ни BringWindowToTop() не имеют никакого эффекта.

ответ

2

Не могли бы вы посмотреть, возвращают ли функции какие-либо ошибки?

Вы также можете посмотреть на SetForegroundWindow

+0

SetForegroundWindow делает трюк. Благодаря! – TrayMan

0
if (::IsIconic(hwnd)) 
    ShowWindow(hwnd, SW_RESTORE); 

::SetForegroundWindow(hwnd); 
::BringWindowToTop(hwnd); 
-1

Никогда не используйте SetForeground.

См. Примечания Msdn.

+0

Какие? Документация, похоже, предполагает, что в определенных обстоятельствах вполне нормально использовать –