Удаление WS_BORDER и WS_CAPTION из стилей Windows не работает - PullRequest
1 голос
/ 31 мая 2010

Я создал небольшое приложение на C #, которое удаляет границы и заголовки из окна, затем устанавливает размер в соответствии с разрешением пользователя и центрирует его. Это утилита для меня, когда я хочу играть в игры в оконном режиме, не раздражаясь из-за границ. В большинстве игр все работает нормально, но я попытался использовать его в недавно выпущенной игре Alpha Protocol, и она не работает. Я мог бы почти сказать, что игра отменяет мои изменения, но я не уверен, как определить, правда это или нет. Я использую импортированные функции API MoveWindow, SetWindowLong и SetWindowPos.

Отрывок:

Win32.MoveWindow(hWnd, 0, 0, Convert.ToInt32(sizeXText.Text), Convert.ToInt32(sizeYText.Text), true);
Win32.SetWindowLong(hWnd, GWL_STYLE, Win32.GetWindowLong(hWnd, GWL_STYLE) & ~WS_CAPTION & ~WS_BORDER);
Win32.SetWindowPos(hWnd, 0, 0, 0, 0, SWP_NOZORDER|SWP_NOMOVE|SWP_NOSIZE|SWP_NOACTIVATE|SWP_DRAWFRAME);

Ответы [ 2 ]

1 голос
/ 31 мая 2010

Каждый раз, когда вызывается SetWindowPos, он отправляет в окно сообщение: WM_WINDOWPOSCHANGING с доступной для записи копией параметров SetWindowPos. Это дает окну возможность проверить и изменить параметры. Многие окна автоматически реагируют на изменение положения и размеров, чтобы «разумно» управлять украшениями, не относящимися к клиенту, - что, я полагаю, и происходит здесь. Код OnWindowPosChanging переустанавливает декорации, не относящиеся к клиенту, непосредственно перед обработкой DRAWFRAME.

0 голосов
/ 31 мая 2010

Вы должны использовать Spy ++, чтобы исследовать структуру окна игры.

...