我编了一个基于单文档全屏显示的程序,消息响应函数如下:
void CMainFrame::OnViewFullScreen()
{ if(m_bIsFull)
{
return;
}
m_bIsFull=TRUE;    m_bViewTool=m_wndToolBar.IsWindowVisible();
m_bViewStatus=m_wndStatusBar.IsWindowVisible();
CView *pView=this->GetActiveView();
pView->LockWindowUpdate();
pView->GetWindowPlacement(&m_plcView);
    pView->UnlockWindowUpdate();
this->LockWindowUpdate();
this->GetWindowPlacement(&m_plcWnd);
this->UnlockWindowUpdate();
ShowControlBar(&m_wndToolBar,FALSE,FALSE);
ShowControlBar(&m_wndStatusBar,FALSE,FALSE);
::SystemParametersInfo(SPI_GETWORKAREA,0,&m_rectDesktop,0);
m_rectDesktop.right=::GetSystemMetrics(SM_CXSCREEN);
m_rectDesktop.bottom=::GetSystemMetrics(SM_CXSCREEN);
    m_rectDesktop.right+=m_rectDesktop.left;
m_rectDesktop.bottom+=m_rectDesktop.top;
CRect rectHold=m_rectDesktop;
::AdjustWindowRect(&m_rectDesktop,this->GetStyle(),TRUE);
m_rectDesktop.bottom+=::GetSystemMetrics(SM_CYBORDER); WINDOWPLACEMENT plcHold=m_plcView;
plcHold.showCmd=SW_SHOWNORMAL;
plcHold.rcNormalPosition=m_rectDesktop;
this->LockWindowUpdate();
this->SetWindowPlacement(&plcHold);
this->UnlockWindowUpdate(); plcHold.rcNormalPosition=rectHold;
::AdjustWindowRect(&(plcHold.rcNormalPosition),pView->GetStyle(),FALSE);
pView->LockWindowUpdate();
pView->SetWindowPlacement(&plcHold);
pView->UnlockWindowUpdate();
}void CMainFrame::OnGetMinMaxInfo(MINMAXINFO FAR* lpMMI)
{ if(m_bIsFull)
{
lpMMI->ptMaxSize.y=m_rectDesktop.Height();
lpMMI->ptMaxTrackSize.y=m_rectDesktop.Height();
lpMMI->ptMaxSize.x=m_rectDesktop.Width();
        lpMMI->ptMaxTrackSize.x=m_rectDesktop.Width(); 
}
else
{
CFrameWnd::OnGetMinMaxInfo(lpMMI);
}
}void CMainFrame::EscapeFullScreen()
{
if(!m_bIsFull)
{ return;
}
m_bIsFull=FALSE; ShowControlBar(&m_wndToolBar,m_bViewTool,FALSE);
ShowControlBar(&m_wndStatusBar,m_bViewStatus,FALSE); CView *pView=this->GetActiveView();
pView->LockWindowUpdate();
pView->SetWindowPlacement(&m_plcView);
pView->UnlockWindowUpdate();
LockWindowUpdate();
SetWindowPlacement(&m_plcWnd);
UnlockWindowUpdate();
}有高手能告诉我为什么我在菜单里单击“全屏显示”没有反映
高手能指点以下吗?

解决方案 »

  1.   

    好复杂。给你个简单点的void CMainFrame::OnViewFullScreen()
    {
    CRect r;
    DWORD dwRemove = 0, dwAdd = 0; MONITORINFO mi;
    mi.cbSize = sizeof(MONITORINFO);
    GetMonitorInfo(MonitorFromWindow(m_hWnd, MONITOR_DEFAULTTONEAREST), &mi); dwRemove = WS_CAPTION|WS_THICKFRAME;
    r = mi.rcMonitor; m_wndToolBar.ShowWindow(SW_HIDE);
    m_wndStatusBar.ShowWindow(SW_HIDE); ModifyStyle(dwRemove, dwAdd, SWP_NOZORDER);
    GetActiveView()->ModifyStyleEx(WS_EX_CLIENTEDGE, 0);
    ::SetMenu(m_hWnd, NULL);
    SetWindowPos(NULL, r.left, r.top, r.Width(), r.Height(), SWP_NOZORDER|SWP_NOSENDCHANGING );
    GetActiveView()->SetWindowPos(NULL, 0, 0, 0, 0, SWP_FRAMECHANGED|SWP_NOSIZE|SWP_NOMOVE|SWP_NOZORDER);}