我的程序有全屏显示功能。
如果全屏显示时间比较长,则退出全屏显示后,窗体的标题栏和菜单栏消失了,
客户区直接从(0,0)开始;此时,即使关闭程序,重新打开,也没有标题和菜单。故障时有时无,若有故障,重新启动电脑,有时仍没有标题和菜单。程序如下://全屏显示,用于运行响应
void CMainFrame::FullScreen()
{
GetWindowPlacement(&m_OldWndPlacement);
CRect WindowRect;
GetWindowRect(&WindowRect);
CRect ClientRect;
RepositionBars(0, 0xffff, AFX_IDW_PANE_FIRST, reposQuery, &ClientRect); ClientToScreen(&ClientRect);
m_oldClientRect = ClientRect;
//获取屏幕的分辨率
int nFullWidth=::GetSystemMetrics(SM_CXSCREEN);
int nFullHeight=::GetSystemMetrics(SM_CYSCREEN);
//将除控制条外的客户区全屏显示到从(0,0)到(nFullWidth, nFullHeight)区域
//, 将(0,0)和(nFullWidth, nFullHeight)两个点外扩充原窗口和除控制条之外的 客户区
//位置间的差值, 就得到全屏显示的窗口位置
m_FullScreenRect.left=WindowRect.left-ClientRect.left;
m_FullScreenRect.top=WindowRect.top-ClientRect.top;
m_FullScreenRect.right=WindowRect.right-ClientRect.right+nFullWidth;
m_FullScreenRect.bottom=WindowRect.bottom-ClientRect.bottom+nFullHeight;
m_bFullScreen=TRUE;//设置全屏显示标志为 TRUE
//进入全屏显示状态
WINDOWPLACEMENT wndpl;
wndpl.length=sizeof(WINDOWPLACEMENT);
wndpl.flags=0;
wndpl.showCmd=SW_SHOWNORMAL;
wndpl.rcNormalPosition=m_FullScreenRect;
SetWindowPlacement(&wndpl);
}//停止全屏显示,用于结束实验响应
void CMainFrame::EndFullScreen()
{
// if(m_bFullScreen)
// {//退出全屏显示, 恢复原窗口显示
m_bFullScreen=FALSE;//设置全屏显示标志为 FALSE
SetWindowPlacement(&m_OldWndPlacement);
ShowWindow(SW_SHOWNORMAL);
//恢复标题栏
// WINDOWPLACEMENT wndpl;
// wndpl.rcNormalPosition=m_oldClientRect;
// SetWindowPlacement(&wndpl);
// }
}急待解决,在线等,谢谢!

解决方案 »

  1.   

    GetWindowPlacement用的不对
    m_OldWndPlacement.length = sizeof (WINDOWPLACEMENT);
    GetWindowPlacement(&m_OldWndPlacement);
      

  2.   

    我给你一个好的!
    绝对不会,
    重载函数CMainFrame::OnCreateClient
    BOOL CMainFrame::OnCreateClient(LPCREATESTRUCT lpcs, CCreateContext* pContext) 
    {
    HMENU  hMenu = ::GetMenu(m_hWnd); 
        ::SetMenu( m_hWnd, NULL ); 
         LONG style=::GetWindowLong(m_hWnd,GWL_STYLE);
         style&=~WS_CAPTION;
         ::SetWindowLong(m_hWnd,GWL_STYLE,style);     int screenx=GetSystemMetrics(SM_CXSCREEN);
         int screeny=GetSystemMetrics(SM_CYSCREEN);     if(screenx != 1024 && screeny != 768)
    {
    exit(0);
    }
         // resize:
         SetWindowPos(NULL,-4,-4,screenx+10,screeny+10,SWP_NOZORDER);
          return true;
    }