kinnalru/console — comment on commit d4eaae3ac0bac1dfd25ad18952295775045a9206
File: Console/MainFrame.cpp line 540
By akirill:

Цитируя Великих, "поэкспериментировал с различными комбинациями" и пришел к выводу, что лично мне нравится следующее:

if (::GetForegroundWindow() == m_hWnd)
if (stylesSettings.bTaskbarButton) ShowWindow(SW_MINIMIZE); else ShowWindow(SW_HIDE);
else { /* старый код */ }

и вместо ShowWindow(SW_HIDE) на d9547823#L0R422 просто вызывать OnHotKey(0, IDC_GLOBAL_ACTIVATE).

Рассуждения таковы:
- если пользователь нажал кнопку будучи в другом приложении, мы хотим вытянуть Console наверх, поэтому ::GetForegroundWindow;
- если пользователь спрятал кнопку на панели задач, то, видимо, он не хочет видеть Console совсем, поэтому мы будем окно прятать;
- если он вместе с кнопкой на панели задач убрал и кнопку из области уведомлений, то, видимо, он совсем не хочет видеть признаков Console, и спрятанное окно его устроит больше.

Недостаток if (bTrayIcon) else SW_MINIMIZE еще и в том, что это выглядит довольно "странно", если кнопка на панели задач отключена.

Мне не очень нравится "автоматическая зависимость" одних опций от других, поэтому вместо авто-включения "tray" я бы рассмотрел вариант, где hide on close выключается и делается недоступной, если пользователь выключил "tray" (примерно так, как это происходит с Show tabs и Hide single tab).

Для информации: IsIconic возвращает TRUE, если окно минимизировано.