V C中全屏幕显示单文档程序

本文介绍了一种在MFC应用程序中实现全屏显示的方法,包括进入全屏和退出全屏的功能实现。通过修改CMainFrame类来记录并调整窗口的位置和大小。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

以下代码实现在单文档程序中进入全屏和退出全屏。

在CMainFrame中增加三个成员变量:
WINDOWPLACEMENT m_OldWndPlacement;
CRect m_FullScreenRect;
BOOL m_bFullScreen;


void CMainFrame::OnFullScreen()
{
 // TODO: Add your command handler code here
 GetWindowPlacement(&m_OldWndPlacement); //保存原窗口位置
 
 CRect WindowRect,ClientRect;
 GetWindowRect(&WindowRect);      //获取普通窗口位置
 
 //获取各个控制条之外的客户区位置
 RepositionBars(0,0xffff,AFX_IDW_PANE_FIRST,reposQuery,&ClientRect);
 ClientToScreen(&ClientRect);
 
 //获取屏幕分辩率
 int nFullWidth=GetSystemMetrics(SM_CXSCREEN);
 int nFullHeight=GetSystemMetrics(SM_CYSCREEN);
 
 //计算全屏显示的窗口位置
 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;  //全屏标志
 
 //进入全屏显示
 WINDOWPLACEMENT wndpl;
 wndpl.length=sizeof(WINDOWPLACEMENT);
 wndpl.flags=0;
 wndpl.showCmd=SW_SHOWNORMAL;
 wndpl.rcNormalPosition=m_FullScreenRect;
 SetWindowPlacement(&wndpl);
}


void CMainFrame::OnGetMinMaxInfo(MINMAXINFO FAR* lpMMI)
{
 // TODO: Add your message handler code here and/or call default
 if(m_bFullScreen)
 {
  lpMMI->ptMaxSize.x=m_FullScreenRect.Width();
  lpMMI->ptMaxSize.y=m_FullScreenRect.Height();
  lpMMI->ptMaxPosition.x=m_FullScreenRect.Width();
  lpMMI->ptMaxPosition.y=m_FullScreenRect.Height();
  // 最大的Track尺寸也要改变
  lpMMI->ptMaxTrackSize.x=m_FullScreenRect.Width();
  lpMMI->ptMaxTrackSize.y=m_FullScreenRect.Height();
 }
 CFrameWnd::OnGetMinMaxInfo(lpMMI);
}


void CMainFrame::EndFullScreen()//退出全屏显示
{
 if(m_bFullScreen)
 {
  ShowWindow(SW_HIDE);
  SetWindowPlacement(&m_OldWndPlacement);
 }
}

注意了,EndFullScreen()函数可以实现退出全屏,可是在全屏显示的时候,只有view类可以接收消息,
所以必须在view类中添加如下函数,在按下esc键的时候退出全屏。

void CPlaneView::OnKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags)
{
 // TODO: Add your message handler code here and/or call default
 if(nChar==VK_ESCAPE)
 {
  CMainFrame *pFrame=(CMainFrame*)AfxGetApp()->m_pMainWnd;      //获取主框架窗口的指针
  pFrame->EndFullScreen();                                      //调用主窗口类的EndFullScreen就可以退出全屏显示状态
 }
 CView::OnKeyDown(nChar, nRepCnt, nFlags);
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值