Я начинаю с Win32, и я преследовал проблему (если ее вообще можно назвать проблемой) с Windows, блокирующей ваши поток программы во время события, когда пользователь захватывает строку заголовка окна и перемещает ее по экрану.
У меня нет законных оснований для решения этой проблемы, за исключением того, что это беспокоит меня. Несколько возможностей включают удаление кадра в целом, но это кажется неудобным взломом. Некоторые игры (одиночный игрок) не считают эту проблему вообще. Однако я прочитал, что в многопользовательских играх могут возникать проблемы, когда программа зависает, поскольку она ожидает непрерывного потока информации и может быть перегружена после такой задержки.
Я попытался добавить это к моему WindowProc
switch (uMsg)
{
case WM_SYSCOMMAND:
if (wParam == SC_CLOSE)
PostQuitMessage(0);
return 0;
...
...
default:
return DefWindowProc(hwnd, uMsg, wParam, lParam);
}
return 0;
И это кажется быстрым взломом, за исключением того, что когда я просматриваю значок закрытия, я могу вытащить мышь и отпустить, не закрывая программу, и за это время, когда значок закрытия удерживается, программа еще раз заблокирован.
Кроме того, я не знаю, как вручную включать код, необходимый для перемещения окна, когда пользователь нажимает заголовок и перетаскивает мышь. Для начала я не знаю, какие uMsg
и wParam
обрабатывать.
Мой вопрос заключается в том, как я могу запретить блокировку во время случая, когда пользователь нажимает кнопку выхода (или сворачивает/увеличивает кнопки), все еще обрабатывая случай, когда мышь нажата и выпущена над кнопкой, и как сделать Я разрешаю пользователю перемещать/перетаскивать окно без блокировки программы (или какое сообщение отправляется при нажатии кнопки заголовка без его кнопки или меню)?
Я создаю окно с WS_SYSMENU | WS_MINIMIZEBOX
.
Я все еще хочу, чтобы программа отвечала на команды минимизации, максимизации и завершения.
Если многопоточность может его исправить, то это интересно, но мне интересно, могу ли я заставить его работать на одноядерных процессорах. И я прочитал о крючках, но мне трудно интерпретировать страницу MSDN.