如何将视图全屏显示
我建立了一个单文档MFC应用程序,为了将视图全屏显示,我去掉了标题、菜单、工具栏、状态栏和边框。代码如下:
int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
..........//省略
ModifyStyle(WS_CAPTION,0); //去掉标题栏
ModifyStyle(WS_THICKFRAME,0);//去掉边框
SetMenu(NULL); //去掉菜单
}
BOOL CMainFrame::PreCreateWindow(CREATESTRUCT& cs)
{
if( !CFrameWnd::PreCreateWindow(cs) )
return FALSE;
//以下为设置全屏显示
cs.x=cs.y=0;
cs.cx=GetSystemMetrics(SM_CXSCREEN);
cs.cy=GetSystemMetrics(SM_CYSCREEN);
return TRUE;
}
运行程序后,发现视图的边界仍有两个像素宽的区域,该区域无法响应WM_MOUSEMOVE消息,同时该区域无法绘图,我觉得该区域不是客户区。我现在希望,全屏幕都可以绘图,可以设置背景颜色,请各位高手指点一下,Thank you very much!
[解决办法]
当然不是客户去啦!楼主的问题很典型,这其实是一个微软windows窗口的问题,是窗口就要有窗口区,通过扩大客户去是不能够进行全屏显示的,楼主可以查查全屏技术是如何实现的~~~~~希望对你有帮助!!!
[解决办法]
http://vcer.net/1076417661406.html
[解决办法]
我是全屏的代码
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); if(m_wndStatusBar!=NULL) delete m_wndStatusBar; if(m_wndToolBar!=NULL) delete m_wndToolBar; this->UpdateWindow(); // 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_wndToolBar=new CToolBar; m_wndStatusBar=new CStatusBar; if (!m_wndToolBar->Create(this) || !m_wndToolBar->LoadToolBar(IDR_MAINFRAME)) { TRACE0("Failed to create toolbar\n"); return; } if (!m_wndStatusBar->Create(this) || !m_wndStatusBar->SetIndicators(indicators, sizeof(indicators)/sizeof(UINT))) { TRACE0("Failed to create status bar\n"); return ; // fail to create } // TODO: Remove this if you don't want tool tips or a resizeable toolbar m_wndToolBar->SetBarStyle(m_wndToolBar->GetBarStyle() | CBRS_TOOLTIPS | CBRS_FLYBY | CBRS_SIZE_DYNAMIC); // TODO: Delete these three lines if you don't want the toolbar to // be dockable m_wndToolBar->EnableDocking(CBRS_ALIGN_ANY); EnableDocking(CBRS_ALIGN_ANY); DockControlBar(m_wndToolBar); 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; } void CMainFrame::OnUpdateViewFullScreen(CCmdUI* pCmdUI) { pCmdUI->Enable(); if (IsFullScreen()) pCmdUI->SetCheck(); else pCmdUI->SetCheck(0); }
[解决办法]
发现视图的边界仍有两个像素宽的区域是什么意思,显示有东西还是显示正常就是无法响应MOUSEMOVE消息啊?