2014-09-28 64 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编程已经有好几年了。