编写一个全屏显示的程序很简单:
对全屏显示消息的响应函数如下:
void CMainFrame::FullScreenModeOn()
{
//以下的几句是隐藏当前的工具栏和状态栏,但是仅仅执行以下几句我们的菜单栏和状态栏的确是隐藏了,但是显示菜单栏和状态栏的背景依然存在,所以没有达到我们想要全//屏显示的效果,我们需要把背景也给隐藏了
m_bToolBarWasVisible=(m_wndToolBar.IsWindowVisible()!=0);
m_wndToolBar.ShowWindow(SW_HIDE);
m_bStatusBarWasVisible=(m_wndStatusBar.IsWindowVisible()!=0);
m_wndStatusBar.ShowWindow(SW_HIDE);
//我们要新建一个工具栏,以便在全屏状态时有一个可以回到正常状态的工具栏
m_pwndFullScreenBar=new CToolBar;
m_pwndFullScreenBar->Create(this);
m_pwndFullScreenBar->LoadToolBar(IDR_FULLSCREEN);
m_pwndFullScreenBar->SetBarStyle(m_pwndFullScreenBar->GetBarStyle() |
CBRS_TOOLTIPS | CBRS_FLYBY | CBRS_SIZE_DYNAMIC);
m_pwndFullScreenBar->ModifyStyle(0, TBSTYLE_FLAT);
m_pwndFullScreenBar->EnableDocking(0);
CPoint pt(300,200);
FloatControlBar(m_pwndFullScreenBar,pt);//f浮动显示这个工具条,坐标是显示的位置
GetWindowRect(&m_mainRect);
LONG style=::GetWindowLong(m_hWnd,GWL_STYLE);
style&=~WS_CAPTION; //去掉style中的WS_CAPTION这个属性
::SetWindowLong(m_hWnd,GWL_STYLE,style);
int screenx=GetSystemMetrics(SM_CXSCREEN);
int screeny=GetSystemMetrics(SM_CYSCREEN);
SetWindowPos(NULL,0,0,screenx,screeny,SWP_NOZORDER);
style=::GetWindowLong(m_hWnd,GWL_STYLE);
m_bChildMax=(style & WS_MAXIMIZE)?true:false;
CMenu* pOldMenu=GetMenu();
m_OrgMenu.Attach(pOldMenu->Detach());
SetMenu((CMenu*)NULL);
this->ShowWindow (SW_SHOWMAXIMIZED);
m_bFullScreenMode=true;
}
结束全屏状态的函数:
void CMainFrame::FullScreenModeOff()
{
ASSERT(m_OrgMenu.GetSafeHmenu()!=NULL);
SetMenu(&m_OrgMenu);
m_OrgMenu.Detach();
delete m_pwndFullScreenBar;
LONG style=::GetWindowLong(m_hWnd,GWL_STYLE);
style|=WS_CAPTION;
::SetWindowLong(m_hWnd,GWL_STYLE,style);
if(m_bToolBarWasVisible)
m_wndToolBar.ShowWindow(SW_SHOW);
if(m_bStatusBarWasVisible)
m_wndStatusBar.ShowWindow(SW_SHOW);
MoveWindow(&m_mainRect);
RecalcLayout();
m_bFullScreenMode=false;
}
至此这个程序就完成了,当然里面有些变量是全局变量,需要读者自己去定义。