CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
不看会后悔的Windows XP之经验谈 简单快捷DIY实用家庭影院
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  VC/MFC >  基础类

怎样在单文档工程里创建全屏幕的窗口?

楼主emmai(WaTaXiWaWaTaXi)2001-12-13 11:39:37 在 VC/MFC / 基础类 提问

没有标题栏的那种 问题点数:30、回复次数:14Top

1 楼morningsing(奈何)回复于 2001-12-13 11:50:07 得分 0

在precreateWindow()里设置窗口styleTop

2 楼anywn_cwh(我有个问题)回复于 2001-12-13 11:56:52 得分 5

CMainFrame   *pFrame   =   (CMainFrame*)(AfxGetApp()->m_pMainWnd);  
  pFrame->ModifyStyle(WS_CAPTION,0);  
  pFrame->ModifyStyle(WS_THICKFRAME,0);  
  pFrame->SetMenu(NULL);  
  pFrame->ShowWindow(SW_MAXIMIZE);Top

3 楼Kummer(Kummer)回复于 2001-12-13 12:15:33 得分 5

你是不是想做成像VC全屏的那种效果加入成员变量记录下一些全屏相关的信息  
  CRect   m_FullScreenRect;    
  WINDOWPLACEMENT   m_OldWndPlacement;  
  BOOL   m_bFullScreen;  
   
  1.在CMainFrame中加入一个OnFullScreen函数  
  void   CMainFrame::OnViewFullscreen()    
  {  
  if(!m_bFullScreen)  
  {  
  //保存原窗口的位置,  
  //包括和其他窗口的前后位置关系  
  GetWindowPlacement(&m_OldWndPlacement);  
   
  //保存原窗口的矩形范围  
  CRect   WindowRect;  
  GetWindowRect(&WindowRect);  
  CRect   ClientRect;  
  //获得除去所有控制条之外的客户区位置  
  //并把它转化为Screen坐标  
  RepositionBars(0,   0xffff,   AFX_IDW_PANE_FIRST,   reposQuery,   &ClientRect);  
  ClientToScreen(&ClientRect);  
   
  //   获取屏幕的分辨率  
  int   nFullWidth=GetSystemMetrics(SM_CXSCREEN);  
  int   nFullHeight=GetSystemMetrics(SM_CYSCREEN);  
   
  //将除控制条外的客户区全屏显示到从(0,0)到(nFullWidth,   nFullHeight)区  
  //域,   将(0,0)和(nFullWidth,   nFullHeight)两个点外扩充原窗口和除控制条之外的   客  
  //户区位置间的差值,   就得到全屏显示的窗口位置  
  //实际上,现在窗口的位置是在左边定点在负数位置,  
  //而右边的点在屏幕以下,这样,正好View占有了整个屏幕  
  m_FullScreenRect.left=WindowRect.left-ClientRect.left;  
  m_FullScreenRect.top=WindowRect.top-ClientRect.top;  
  m_FullScreenRect.right=WindowRect.right+nFullWidth-ClientRect.right;  
  m_FullScreenRect.bottom=WindowRect.bottom+nFullHeight-ClientRect.bottom;  
  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;  
  }  
  }  
  2。加入一个结束全屏的函数  
  void   CMainFrame::EndFullScreen()  
  {  
  if(m_bFullScreen)  
  {  
  BOOL   res=ShowWindow(SW_RESTORE);  
  SetWindowPlacement(&m_OldWndPlacement);  
  m_bFullScreen=false;  
  }  
  }  
  3。重载CMainFrame中的OnGetMinMaxInfo函数  
  void   CMainFrame::OnGetMinMaxInfo(MINMAXINFO   FAR*   lpMMI)    
  {  
  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);  
  }  
   
  Top

4 楼emmai(WaTaXiWaWaTaXi)回复于 2001-12-13 13:15:46 得分 0

to:anywn_cwh(我有个问题)  
  这样生成的窗口有一个边框(因为用的是CFrameWnd),怎样让它没有边框呢?  
   
  to:Kummer(Kummer)   
  你的回答很好,但我不要这么多功能。我只要一个全屏幕窗口(没有任何牵挂的窗口)Top

5 楼morningsing(奈何)回复于 2001-12-13 14:13:03 得分 10

把CMainFrame的基类改成CWnd,并在构造函数种子基础侧窗口类:  
  CMainFrame::CMainFrame()  
  {  
  CString   winStr   =   AfxRegisterWndClass(   CS_DBLCLKS,  
                                                          AfxGetApp()->LoadStandardCursor(IDC_ARROW),  
                                                        (HBRUSH)GetStockObject(BLACK_BRUSH),  
                                                          NULL   );  
  CRect   rect(   0,   0,   GetSystemMetrics(   SM_CXSCREEN   ),  
                                      GetSystemMetrics(   SM_CYSRREEN   )   );  
  ::CreateEx(   0,   winStr,   "Title",   WS_POPUP,   rect,   NULL,   NULL   );  
  }  
  OK,一切搞定                                                     Top

6 楼emmai(WaTaXiWaWaTaXi)回复于 2001-12-13 14:24:17 得分 0

to   morningsing(奈何) :  
  非常好!为什么我把最后一句改成  
  Create(winStr,"Title",WS_POPUP,rect,NULL,NULL);  
  就出错呢?Top

7 楼emmai(WaTaXiWaWaTaXi)回复于 2001-12-13 14:30:15 得分 0

还有rect的大小没有包括任务栏Top

8 楼sam1111(化神奇为腐朽)回复于 2001-12-13 14:55:31 得分 5

搞这么麻烦干吗?看下面的:  
  全屏:  
  void   CMainFrame::OnFullScreen(int   nWndID)  
  {  
  GetWindowRect(&m_WndRect);  
  m_lWndStyle   =   GetWindowLong(GetSafeHwnd(),   GWL_STYLE);  
  LONG   tmpStyle   =   m_lWndStyle   &   ~WS_OVERLAPPEDWINDOW;  
  SetWindowLong(GetSafeHwnd(),   GWL_STYLE,   tmpStyle);  
  int   cx   =   GetSystemMetrics(SM_CXSCREEN);  
  int   cy   =   GetSystemMetrics(SM_CYSCREEN);  
  SetWindowPos(&wndTopMost,   -1,   -1,   cx   +   1,   cy   +   1,   SWP_FRAMECHANGED);  
  }  
  恢复:  
  void   CMainFrame::OnRestoreWnd()  
  {  
  SetWindowLong(GetSafeHwnd(),   GWL_STYLE,   m_lWndStyle);  
  SetWindowPos(&wndNoTopMost,  
  m_WndRect.left,   m_WndRect.top,    
  m_WndRect.right   -   m_WndRect.left,  
  m_WndRect.bottom   -   m_WndRect.top,    
  SWP_FRAMECHANGED);  
  }  
   
  ok?Top

9 楼darkbb(小虫)回复于 2001-12-13 14:58:00 得分 0

关注!Top

10 楼Julienjut(秋水)回复于 2001-12-13 15:14:32 得分 5

在CView   的如下函数中写上,就可以一启动就最大化,如果用GetSystemMetrics,就会覆盖下面的状态条  
  void   CView::OnInitialUpdate()  
  {  
  CRect   rect;  
  SystemParametersInfo(SPI_GETWORKAREA,0,&rect,0);  
  //得到框架指针  
  CMainFrame   *pFrame=(CMainFrame*)GetParentFrame();  
  //使得主窗口达到最大可用大小  
  pFrame->MoveWindow(&rect);  
  }Top

11 楼emmai(WaTaXiWaWaTaXi)回复于 2001-12-13 15:21:06 得分 0

方法真是多种多样,给分都成了问题,我想看看有没有更多的解答Top

12 楼xiaoxiaohan(萧晓寒)回复于 2001-12-13 15:51:50 得分 0

如果是SDK请用ShowWindow();  
  如果是MFC请修改PreCreateWindow函数传入的CREATESTRUCT&   cs的成员。Top

13 楼Kummer(Kummer)回复于 2001-12-14 14:34:22 得分 0

不公平,我的方法可以动态的全屏和退出全屏,而不是把代码写死在程序中Top

14 楼emmai(WaTaXiWaWaTaXi)回复于 2001-12-14 17:00:46 得分 0

to   Kummer(Kummer):  
  你的方法真的很完美,所以请到  
  http://www.csdn.net/expert/topic/421/421820.shtm  
  领取20分Top

相关问题

  • 全屏幕截图
  • 这样创建单一个单文档多视?
  • 如果更改由过去的表单创建的文档?
  • 如何创建一个单文档多视的框架?
  • 后台创建的新文档能否指定表单
  • 怎样在单文档的视图中创建按钮呢?
  • 单文档创建多视图并切换问题!
  • 怎样创建基于CListView的单文档应用程序
  • 如何在单文档中创建对话框?
  • 如何创建Help文档?

关键词

  • 函数
  • ws
  • null
  • wndrect
  • cmainframe
  • lpmmi
  • fullscreenrect
  • 全屏
  • bfullscreen
  • pframe

得分解答快速导航

  • 帖主:emmai
  • anywn_cwh
  • Kummer
  • morningsing
  • sam1111
  • Julienjut

相关链接

  • Visual C++类图书
  • Visual C++类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
GongshangLogo