Window игнорирует ShowWindow Minimized в первый раз, а затем подчиняется каждый раз после - PullRequest
0 голосов
/ 09 октября 2018

У меня есть приложение на C #, с которого я запускаю отдельное окно win32.Я выполняю маршалинг Win32 API-интерфейсов в свое приложение на C # и пытаюсь контролировать win32 с этого.Я переключаю окно при нажатии кнопки, чтобы оно было либо развернуто поверх всех окон всегда, либо свернуто.

Оно будет отображаться развернуто, затем игнорирует нажатие первой кнопки, чтобы скрыть, а затем остается показанным, когда я нажимаюкнопка снова, затем, наконец, прячется, когда я нажимаю кнопку 3 раза с тем же кодом.Это ведет себя как хотелось бы с этого момента.Я уверен, что это должны быть некоторые флаги Windows, которые не установлены должным образом, пока он не пройдет сначала цикл максимизации / минимизации.

Вот жизненный цикл окна:

Создать окноразвернуто

A:

Скрыть:

target_hwnd = FindWindowHandleByCaption()
ShowWindow(target_hwnd, SW_SHOWMINIMIZED);

Показать:

target_hwnd = FindWindowHandleByCaption()
ShowWindow(target_hwnd, SW_SHOWMAXIMIZED);

Перейти к A:

Что я делаюнеправильно?Я часами пробовал разные фрагменты кода, но безрезультатно.

Заранее спасибо!

РЕДАКТИРОВАТЬ:

Решил мою проблему, просто выполнив:

SendMessage(target_hwnd.ToInt32(), WM_SYSCOMMAND, SC_MINIMIZE, 0);

SendMessage(target_hwnd.ToInt32(), WM_SYSCOMMAND, SC_MAXIMIZE, 0);

Вместо использования ShowWindow.

1 Ответ

0 голосов
/ 09 октября 2018

Согласно документации ShowWindow():

nCmdShow
Тип: int

Управляет отображением окна. Этот параметр игнорируется при первом вызове приложения ShowWindow, если программа, запустившая приложение, предоставляет структуру STARTUPINFO .В противном случае при первом вызове ShowWindow значением должно быть значение, полученное функцией WinMain в ее параметре nCmdShow.

...

Первый раз, когдаприложение вызывает ShowWindow, оно должно использовать параметр nCmdShow функции WinMain в качестве параметра nCmdShow.Последующие вызовы ShowWindow должны использовать одно из значений в данном списке вместо значения, указанного в параметре WinMain функции nCmdShow. Как отмечалось при обсуждении параметра nCmdShow, значение nCmdShow игнорируется при первом вызове ShowWindow, если программа, запустившая приложение, задает информацию о запуске в структуре .В этом случае ShowWindow использует информацию, указанную в структуре STARTUPINFO, для отображения окна.При последующих вызовах приложение должно вызывать ShowWindow с nCmdShow, установленным на SW_SHOWDEFAULT, чтобы использовать информацию о запуске, предоставленную программой, которая запустила приложение.Это поведение предназначено для следующих ситуаций:

  • Приложения создают свое главное окно, вызывая CreateWindow с установленным флагом WS_VISIBLE.

  • Приложения создают свое главное окно, вызывая CreateWindow с очищенным флагом WS_VISIBLE, а затем вызывая ShowWindow с установленным флагом SW_SHOW, чтобы сделать его видимым.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...