1)在ClassView中选中CMainFrame并单击鼠标右键,选择“Add Member Function...”,添加public类型的成员函数EndFullScreen,该函数将完成退出全屏显示的操作。
void CMainFrame::EndFullScreen()
{if(m_bFullScreen)
{// 退出全屏显示, 恢复原窗口显示
ShowWindow(SW_HIDE);
SetWindowPlacement(&m_OldWndPlace
ment);}}
2)函数EndFullScreen可以退出全屏显示状态,问题是如何在“Esc”键被按下之后调用执行此函数。由于视图类可以处理键盘输入的有关消息(如WM_KEYDOWN表示用户按下了某一个键),我们将在视图类CFullScreenView中添加处理按键消息WM_KEYDOWN的响应函数OnKeyDown。判断如果按的键为“Esc”键,则调用CMainFrame类的函数EndFullScreen,便可退出全屏显示状态。
void CFullScreenView::OnKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags)
{if(nChar==VK_ESCAPE) // 如果按的键为Esc键
{// 获取主框架窗口的指针
CMainFrame *pFrame=(CMainFrame*)AfxGetApp()->m_pMainWnd;
// 调用主窗口类的自定义函数 EndFullScreen ,便可退出全屏显示状态
pFrame->EndFullScreen();}
CView::OnKeyDown(nChar, nRepCnt, nFlags);}
void CMainFrame::EndFullScreen()
{if(m_bFullScreen)
{// 退出全屏显示, 恢复原窗口显示
ShowWindow(SW_HIDE);
SetWindowPlacement(&m_OldWndPlace
ment);}}
2)函数EndFullScreen可以退出全屏显示状态,问题是如何在“Esc”键被按下之后调用执行此函数。由于视图类可以处理键盘输入的有关消息(如WM_KEYDOWN表示用户按下了某一个键),我们将在视图类CFullScreenView中添加处理按键消息WM_KEYDOWN的响应函数OnKeyDown。判断如果按的键为“Esc”键,则调用CMainFrame类的函数EndFullScreen,便可退出全屏显示状态。
void CFullScreenView::OnKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags)
{if(nChar==VK_ESCAPE) // 如果按的键为Esc键
{// 获取主框架窗口的指针
CMainFrame *pFrame=(CMainFrame*)AfxGetApp()->m_pMainWnd;
// 调用主窗口类的自定义函数 EndFullScreen ,便可退出全屏显示状态
pFrame->EndFullScreen();}
CView::OnKeyDown(nChar, nRepCnt, nFlags);}
// 调用主窗口类的自定义函数 EndFullScreen ,便可退出全屏显示状态
pFrame->EndFullScreen();}
为什么要通过AfxGetApp()获得m_pMainWnd
可以把m_pMainWnd设置成全局对象,然后在CFullScreenView.cpp中extern
然后直接调用m_pMainWnd.EndFullScreen();
然后相应应该可以
{
if(pMsg->Message==WM_KEYDOW)
{
if(pMsg->wParam==VK_ESCAPE)
{
编写恢复的程序
}
}
}
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;
{
if(pMsg->Message==WM_KEYDOW)
{
if(pMsg->wParam==VK_ESCAPE)
{
编写恢复的程序
}
}
}
还是这个办法好用。好像还是CMyView::onkeydown出的事。