今天我在网上看到了实现全屏的方法,但实践起来有一定的问题。于是我加以修改,写成了一个函数,其思想来自网上。
函数如下:
void FullScan()
{
static bool isfull=true;
static CRect m_OldWndRect;
static CMenu m_OrgMenu;
if(isfull==true)
{
GetWindowRect(&m_OldWndRect);//得到原窗口位置
//隐藏工具栏和状态栏
if(m_wndToolBar.IsWindowVisible())
{
m_wndToolBar.ShowWindow(SW_HIDE);
}
if(m_wndStatusBar.IsWindowVisible())
{
m_wndStatusBar.ShowWindow(SW_HIDE);
}
//隐藏菜单栏
CMenu* pOldMenu=GetMenu();
m_OrgMenu.Attach(pOldMenu->Detach());
SetMenu((CMenu*)NULL);
//隐藏标题栏
LONG style=::GetWindowLong(m_hWnd,GWL_STYLE);
style&=~WS_CAPTION;
::SetWindowLong(m_hWnd,GWL_STYLE,style);
//窗体最前
::SetWindowPos(AfxGetMainWnd()->m_hWnd,HWND_TOPMOST,-1,-1,-1,- 1,SWP_NOMOVE|SWP_NOSIZE);
//全屏
ShowWindow(SW_SHOWMAXIMIZED);
RecalcLayout();//重绘框架
isfull=false;
}
else
{
//显示工具栏和状态栏
m_wndToolBar.ShowWindow(SW_SHOW);
m_wndStatusBar.ShowWindow(SW_SHOW);
//显示菜单栏
SetMenu(&m_OrgMenu);
m_OrgMenu.Detach();
//显示标题栏
LONG style=::GetWindowLong(m_hWnd,GWL_STYLE);
style|=WS_CAPTION;
::SetWindowLong(m_hWnd,GWL_STYLE,style);
//取消窗体最前
::SetWindowPos(AfxGetMainWnd(), m_hWnd,HWND_NOTOPMOST,m_OldWndRect.left,m_OldWndRect.top,
m_OldWndRect.right-m_OldWndRect.left,m_OldWndRect.bottom-m_OldWndRect.top,SWP_SHOWWINDOW);
//恢复
ShowWindow(SW_SHOWNOACTIVATE);
MoveWindow(m_OldWndRect);
RecalcLayout();//重绘框架
isfull=true;
}
return 0;
}
这个函数第一次调用时实现全屏,第二次调用是恢复原来的状态。