登录  
 加关注
查看详情
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

面包会有的

... ...

 
 
 

日志

 
 

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

2010-11-12 14:59:39|  分类: VC++ |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

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

在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);
}

  评论这张
 
阅读(1038)| 评论(0)

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2018