1)在ClassView中选中CMainFrame并单击鼠标右键,选择“Add Member Function...”,添加public类型的成员函数EndFullScreen,该函数将完成退出全屏显示的操作。 
  void CMainFrame::EndFullScreen() 
  {if(m_bFullScreen) 
  {// 退出全屏显示, 恢复原窗口显示 
  ShowWindow(SW_HIDE); 
  SetWindowPlacement(&m_OldWndPlace 
ment);}} 
  2)函数EndFullScreen可以退出全屏显示状态,问题是如何在“Esc”键被按下之后调用执行此函数。由于视图类可以处理键盘输入的有关消息(如WM_KEYDOWN表示用户按下了某一个键),我们将在视图类CFullScreenView中添加处理按键消息WM_KEYDOWN的响应函数OnKeyDown。判断如果按的键为“Esc”键,则调用CMainFrame类的函数EndFullScreen,便可退出全屏显示状态。 
  void CFullScreenView::OnKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags) 
  {if(nChar==VK_ESCAPE) // 如果按的键为Esc键 
  {// 获取主框架窗口的指针 
  CMainFrame *pFrame=(CMainFrame*)AfxGetApp()->m_pMainWnd; 
  // 调用主窗口类的自定义函数 EndFullScreen ,便可退出全屏显示状态 
  pFrame->EndFullScreen();} 
  CView::OnKeyDown(nChar, nRepCnt, nFlags);} 

解决方案 »

  1.   

    你的EndFullScreen有没有被调用啊?
      

  2.   

    没有吧。设断点在这EndFullScreen函数中.全屏后我按ESC根本没有反应
      

  3.   

    那就是这里的问题:CMainFrame *pFrame=(CMainFrame*)AfxGetApp()->m_pMainWnd; 
      // 调用主窗口类的自定义函数 EndFullScreen ,便可退出全屏显示状态 
      pFrame->EndFullScreen();}
    为什么要通过AfxGetApp()获得m_pMainWnd
    可以把m_pMainWnd设置成全局对象,然后在CFullScreenView.cpp中extern
    然后直接调用m_pMainWnd.EndFullScreen();
      

  4.   

    建立如此函数:LRESULT CMainFrame::OnFullScreen(WPARAM wp,LPARAM lp)
    然后相应应该可以
      

  5.   

    OnKeyDown 有没有被执行?如果没有可以在CMainFrame::PreTranslateMessage中判断是否按下了ESC
      

  6.   

    处理PreTranslateMessage
    {
             if(pMsg->Message==WM_KEYDOW)
              {
                    if(pMsg->wParam==VK_ESCAPE)
                      { 
                           编写恢复的程序
                       }
                   }
     
    }
      

  7.   

    把断点放在OnKeyDown中,看看按esc是否进入到这个函数
      

  8.   

    我以前有照这个方法做过,完全一模一样。没问题,窗口最大化,然后按 ESC返回原来大小。代码和你的一样,我刚才把程序找出来看了。EndFullScreen要在你全屏化以后才起效果。你要全屏化以后才按ESC.在你的OnFullScreen()中,
    m_bFullScreen=TRUE;//设置全屏显示标志为 TRUE
    //进入全屏显示状态
    WINDOWPLACEMENT wndpl;
    wndpl.length=sizeof(WINDOWPLACEMENT);
    wndpl.flags=0;
    wndpl.showCmd=SW_SHOWNORMAL;
    wndpl.rcNormalPosition=m_FullScreenRect;
    SetWindowPlacement(&wndpl);确认一下你的m_bFullScreen=TRUE;
      

  9.   

    处理PreTranslateMessage
    {
             if(pMsg->Message==WM_KEYDOW)
              {
                    if(pMsg->wParam==VK_ESCAPE)
                      { 
                           编写恢复的程序
                       }
                   }
     
    }
      还是这个办法好用。好像还是CMyView::onkeydown出的事。