正在学习MFC编程之全屏显示窗口,结合网上的资料,自己写了一个关于全屏窗口的项目。
具体步骤如下:
1、首先在MainFrm.h头文件中定义以下成员变量和成员函数。
protected:
WINDOWPLACEMENT m_OldWndPlacement;
BOOL m_bFullScreen;
CRect m_FullScreenRect;
2、增加相应的消息映射函数。
在MainFrm.cpp中,通过创建菜单栏的view子菜单下的“全屏显示”的ID关联消息处理函数OnFullScreen();
函数内容如下
GetWindowPlacement(&m_OldWndPlacement);
CRect WindowRect;
GetWindowRect(&WindowRect);
CRect ClientRect;
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);
3、增加消息处理命令WM_GETMINMAXINFO,在重载函数OnGetMinMaxInfo()中编写以下内容。
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();
}
4、全屏窗口后就得有退出全屏窗口的操作才算是完整,下面添加通过按键Esc退出全屏的函数。
需要在CView类中添加消息命令WM_KEYDOWN处理函数,在函数中编写如下代码:
if(nChar==VK_ESCAPE) // 如果按的键为Esc键
{//获取主框架窗口的指针
CMainFrame* pFrame=(CMainFrame*)AfxGetApp()->m_pMainWnd;
// 调用主窗口类的自定义函数 EndFullScreen ,便可退出全屏显示状态
pFrame->EndFullScreen();}
5、最后编写EndFullScreen()函数。
void CMainFrame::EndFullScreen(void)
{
if(m_bFullScreen)
{ //退出全屏显示, 恢复原窗口显示
ShowWindow(SW_HIDE);
SetWindowPlacement(&m_OldWndPlacement);
}
}
整个显示和退出全屏操作到此完成,源码下载地址到下载:点击打开链接
参考资料:点击打开链接