16,472
社区成员
发帖
与我相关
我的任务
分享
class CMainFrame : public CFrameWnd
{
protected: // create from serialization only
CMainFrame();
DECLARE_DYNCREATE(CMainFrame)
// Implementation
public:
CToolBar * m_pwndFullScrnBar;
BOOL IsFullScreen();
WINDOWPLACEMENT m_wpPrev;
CRect m_FullScreenWindowRect;
// Generated message map functions
protected:
BOOL m_bFullScreen;
//{{AFX_MSG(CMainFrame)
afx_msg void OnViewFullscreen();
afx_msg void OnGetMinMaxInfo(MINMAXINFO FAR* lpMMI);
//}}AFX_MSG
DECLARE_MESSAGE_MAP()
};
CMainFrame::CMainFrame()
{
m_bFullScreen=FALSE;
}
void CMainFrame::OnViewFullscreen()
{
RECT rectDesktop;
WINDOWPLACEMENT wpNew;
if (!IsFullScreen())
{
// need to hide all status bars
m_wndStatusBar.ShowWindow(SW_HIDE);
m_wndToolBar.ShowWindow(SW_HIDE);
// We'll need these to restore the original state.
GetWindowPlacement (&m_wpPrev);
m_wpPrev.length = sizeof m_wpPrev;
//Adjust RECT to new size of window
::GetWindowRect ( ::GetDesktopWindow(), &rectDesktop );
::AdjustWindowRectEx(&rectDesktop, GetStyle(), TRUE, GetExStyle());
// Remember this for OnGetMinMaxInfo()
m_FullScreenWindowRect = rectDesktop;
wpNew = m_wpPrev;
wpNew.showCmd = SW_SHOWNORMAL;
wpNew.rcNormalPosition = rectDesktop;
m_pwndFullScrnBar=new CToolBar;
if (!m_pwndFullScrnBar->Create(this,CBRS_SIZE_DYNAMIC|CBRS_FLOATING) ||
!m_pwndFullScrnBar->LoadToolBar(IDR_FULLSCREEN))
{
TRACE0("Failed to create toolbar\n");
return; // fail to create
}
//don't allow the toolbar to dock
m_pwndFullScrnBar->EnableDocking(0);
m_pwndFullScrnBar->SetWindowPos(0, 100,100, 0,0,SWP_NOSIZE|SWP_NOZORDER|SWP_NOACTIVATE|SWP_SHOWWINDOW);
m_pwndFullScrnBar->SetWindowText(_T("Full Screen"));
//FloatControlBar(m_pwndFullScrnBar, CPoint(100,100));
m_bFullScreen=TRUE;
}
else
{
m_pwndFullScrnBar->DestroyWindow();
delete m_pwndFullScrnBar;
m_bFullScreen=FALSE;
m_wndStatusBar.ShowWindow(SW_SHOWNORMAL);
m_wndToolBar.ShowWindow(SW_SHOWNORMAL);
wpNew = m_wpPrev;
}
SetWindowPlacement ( &wpNew );
}
void CMainFrame::OnGetMinMaxInfo(MINMAXINFO FAR* lpMMI)
{
if (IsFullScreen())
{
lpMMI->ptMaxSize.y = m_FullScreenWindowRect.Height();
lpMMI->ptMaxTrackSize.y = lpMMI->ptMaxSize.y;
lpMMI->ptMaxSize.x = m_FullScreenWindowRect.Width();
lpMMI->ptMaxTrackSize.x = lpMMI->ptMaxSize.x;
}
}
BOOL CMainFrame::IsFullScreen()
{
return m_bFullScreen;
}
//是加上这部分代码吗?还是没有捕获Esc按键。。。
BOOL CTest1View::PreTranslateMessage(MSG* pMsg)
{
if (pMsg->message == WM_KEYDOWN && pMsg->wParam == VK_ESCAPE)
{
int i = 0;
}
return CHtmlView::PreTranslateMessage(pMsg);
}
//下面的代码在基于(CView)好使,在基于(CHtmlView)的就不好使,都是单文档的
void CMainFrame::EndFullScreen()
{
if(IsFullScreen())
{
//退出全屏显示, 恢复原窗口显示
ShowWindow(SW_HIDE);
SetWindowPlacement(&m_wpPrev);
}
m_bFullScreen=FALSE;
}
void CTest1View::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 CMy1View::OnKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags)
{
if(nChar==VK_ESCAPE) //如果按的键为Esc键
{//获取主框架窗口的指针
CMainFrame *pFrame=(CMainFrame*)AfxGetApp()->m_pMainWnd;
//调用主窗口类的自定义函数 EndFullScreen ,便可退出全屏显示状态
pFrame->EndFullScreen();
MessageBox("SDF");
}
CView::OnKeyDown(nChar, nRepCnt, nFlags);
}
void CMainFrame::EndFullScreen()
{
if(IsFullScreen())
{
//退出全屏显示, 恢复原窗口显示
ShowWindow(SW_HIDE);
SetWindowPlacement(&m_wpPrev);
}
m_bFullScreen=FALSE;
}