2014-09-28 65 views
0

所以我有一個窗口,我已經編碼它,以便在運行時它可以進入和退出全屏模式。進入全屏幕作品,但退出將以相反的順序放置窗口平鋪欄。Win32和窗口樣式

退出全屏代碼:https://www.dropbox.com/s/p15eltz7b2hxx4y/window.png?dl=0

我嘗試使用GWL_STYLE代替GWL_EXSTYLE但工作更差,與窗口是可見的,但點擊窗口上的任何內容:

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

結果的圖片會表現得像窗戶不在那裏,並在它後面的任何點擊...

謝謝! 菲利普

+0

你在混合標誌。 'WS_'用於'GWL_STYLE','WS_EX_'用於'GWL_EXSTYLE'。你不能使用'SetWindowLong'來爆發新的標誌。你需要將它們與現有的標誌合併,否則你將會操縱你不想要的標誌。例如,你意外地清除了'WS_VISIBLE'。 – 2014-09-28 14:16:50

回答

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是在窗口構造期間調用的,但是我已經使用微軟框架(現在我傾向於使用QT的框架)完成嚴肅的Windows編程已經有好幾年了。