全屏显示OpenGL程序的说明
本程序主要在CMainFrame上操作:
1.准备工作OpenGL框架的创建
(1)添加需要的成员变量:
CClientDC(或者CDC)m_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;<