2014-09-28 4 views
0

У меня есть окно, и я закодировал его так, чтобы во время выполнения он мог войти и выйти из полноэкранного режима. Вход в полноэкранный режим работы, но выход из него оконной плитки в обратном порядке.Win32 и стиль окна

Выход полный код экрана:

SetWindowLongPtr(hWnd, GWL_EXSTYLE, WS_OVERLAPPEDWINDOW); 
SetWindowPos(hWnd, HWND_TOPMOST, 0, 0, 640, 480, NULL); 
InvalidateRect(hWnd, NULL, TRUE); 

Изображение результата: https://www.dropbox.com/s/p15eltz7b2hxx4y/window.png?dl=0

Я попытался с помощью GWL_STYLE вместо GWL_EXSTYLE но работает еще хуже, с окном быть видимым, но нажав ничего на окне будет действовать, как окна нет, и нажмите на все, что находится за ним ...

Спасибо! Philip

+0

Вы смешиваете флаги. 'WS_' для' GWL_STYLE' и 'WS_EX_' для' GWL_EXSTYLE'. Вы не можете просто использовать 'SetWindowLong' для взрыва новых флагов. Вам нужно объединить их с существующими флагами, иначе вы будете манипулировать флагами, которые вы не планировали. Например, вы случайно очистили 'WS_VISIBLE'. –

ответ

0

Просто подумайте, не могли бы вы получить стиль окна (с GetWindowLongPtr), сохраните его как переменную-член в своем классе, а затем используйте это как стиль для сброса в SetWindowLongPtr?

Ниже снимите флажок кода (это если вы используете C++),

MainWnd::OnFullScreen(...) 
{ 
    m_oldStyle = GetWindowLongPtr(GWL_EXSTYLE, m_hwd); 
    /* 
     what ever other code is necessary 
     */ 
} 



MainWnd::OnExitFullScreen(...) 
{ 
    SetWindowLongPtr(m_hwn, GWL_EXSTYLE, m_oldStyle); 
    /* 
      and other code as needed 
    */ 
} 

Я сделал два предположения здесь:

(1), что у вас есть две переменные, одна для сдерживания старый стиль (m_oldStyle) и один, чтобы удерживать дескриптор окна (m_hwd). Обратите внимание, что если вы выполняете строгую кодировку в стиле SDK, тогда дескриптор будет передан вам как часть WndProc. Если вы используете MFC, должна быть функция-член в классе, из которого вы получили основное окно. В других случаях вы сами.

(2) второе предположение заключается в том, что SetWindowLongPtr вызывается до любого изменения типа экрана. Я считаю, что SetWindowLongPtr вызывается при построении окна, но прошло уже несколько лет с тех пор, как я сделал серьезное программирование на Windows с использованием фреймворков Microsoft (теперь я склонен использовать структуру QT).

Смежные вопросы