MFC全屏显示OpenGL窗口的简易操作

本文详细介绍了如何在MFC应用中实现全屏显示OpenGL窗口的操作步骤,包括设置OpenGL框架、全屏切换、窗口位置调整以及移动时保持全屏大小不变的处理。通过在CMainFrame类中添加成员变量和重载OnGetMinMaxInfo函数,实现了全屏显示的平滑切换和退出。

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

全屏显示OpenGL程序的说明

 

本程序主要在CMainFrame上操作:

1.准备工作OpenGL框架的创建

 

(1)添加需要的成员变量:

CClientDC(或者CDCm_pDC 并初始化m_pDC=new CClientDC(this);(注意只能在OnCreate()里加,而不能在View类的构造函数里加,???不知道为什么)

 

(2)设置像素格式考虑到模块化就封装了bSetupPixelFormat()

匹配并选择合适的像素格式ChoosePixelFormat(m_pDC->GetSafeHdc(), &pfd)

并选到设备描述表中SetPixelFormat(m_pDC->GetSafeHdc(),iPixelFormat,&pfd)

 

(3)创建相关联的着色描述表 并将其与设备描述表连接

       hrc=::wglCreateContext(m_pDC->GetSafeHdc());                         /

       ::wglMakeCurrent(m_pDC->GetSafeHdc(),hrc); 

4)具体OpenGL场景的初始化

 

2.CMainFrame类中操作实现全屏显示

(1)准备工作添加成员变量

WINDOWPLACEMENT m_OldWndPlacement;//存储窗口显示的位置等信息

CRect m_rectFullScreen;//保存全屏显示的区域矩形(其实可省去此变量,后面解释)

BOOL m_bFullScreen;//控制全屏的开关变量

 

(2)封装OnFullScreen()函数

一、保存窗口原来的位置等信息

GetWindowPlacement(&m_OldWndPlacement);

二、获得整个窗口的矩形坐标

GetWindowRect(&WindowRect);

三、获得视图客户区的矩形坐标(相对于框架客户区,reposQuery这个参数的作用)

RepositionBars(0,0xffff,AFX_IDW_PANE_FIRST,reposQuery,&ClientRect);

四、将该坐标转化为屏幕坐标系      

ClientToScreen(&ClientRect); 

五、计算屏幕的长和宽

int nFullWidth= GetSystemMetrics(SM_CXSCREEN);

int nFullHeight=GetSystemMetrics(SM_CYSCREEN);

六、计算全屏显示的位置

       m_rectFullScreen.left=WindowRect.left-ClientRect.left-2;

       m_rectFullScreen.top=WindowRect.top-ClientRect.top-2;<

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值