WEB开发网
开发学院软件开发VC MFC框架程序中全屏显示特性的实现 阅读

MFC框架程序中全屏显示特性的实现

 2010-05-27 20:39:43 来源:WEB开发网   
核心提示:获得屏幕尺寸的方法是调用GetSystemMetrics函数, Restore函数比Maximize更简单,MFC框架程序中全屏显示特性的实现(2),它用m_rcRestore成员变量中保存的值将框架恢复到原来的样子,然后调用m_rcRestore.SetRectEmpty来表示框架不再处于全屏显示状态,我认为只要一个

获得屏幕尺寸的方法是调用GetSystemMetrics函数。 Restore函数比Maximize更简单,它用m_rcRestore成员变量中保存的值将框架恢复到原来的样子,然后调用m_rcRestore.SetRectEmpty来表示框架不再处于全屏显示状态。就这么简单。

程序中有一个地方要说明一下,那就是OnGetMinMaxInfo函数的作用。你可以试一下,如果把这个函数去掉,则当你按下工具栏中的全屏显示按钮时,框架视图确实变大了,但没有想象的那样实现全屏显示,底边留下一个状态栏——一个有些发育不良的全屏显示窗口。为什么会这样呢?经过调试后,发现问题出在WM_GETMINMAXINFO消息的处理上。在Windows中,无论什么时候以何种方式改变窗口的尺寸或大小,是拖拽窗口边缘也好,或是在代码中调用改变窗口尺寸的函数也好,总之不管你用什么方法,Windows都会首先发送WM_GETMINMAXINFO消息。这个消息的意思是说:“嘿,如果你要强迫我的尺寸变大或变小,就附上详细的MINMAXINFO结构信息,否则我用默认值处理。”大多数应用程序都不用显式处理这个WM_GETMINMAXINFO消息(也就是说让DefWindowProc窗口过程进行缺省处理),而Windows在进行缺省处理时是不会让一个窗口视图比屏幕还大的,所以我们会碰上前面讲的那个问题。解决的方法是:不要让Windows对WM_GETMINMAXINFO消息进行缺省处理,而是由我们自己处理,方法如下:

void CMainFrame::OnGetMinMaxInfo(MINMAXINFO* lpmmi)
{
 CSize sz = FullScreenHandler.GetMaxSize();
 lpmmi->ptMaxSize = CPoint(sz);
 lpmmi->ptMaxTrackSize = CPoint(sz);
}

这里CFullScreenHandler.GetMaxSize 返回的最大尺寸要比整个屏幕稍微大一点。

CSize CFullScreenHandler::GetMaxSize()
{
 CRect rc(0,0,GetSystemMetrics(SM_CXSCREEN),GetSystemMetrics(SM_CYSCREEN));
 rc.InflateRect(10,50);
 return rc.Size();
}

GetMaxSize 返回的值分别是2×10=20和2×50=100象素,比屏幕自身的水平值和垂直值稍大。至于要大多少,我认为只要一个比屏幕大的模糊值即可。如果你硬要知道屏幕的精确尺寸,自己可以计算一下。

本文配套源码

上一页  1 2 

Tags:MFC 框架 程序

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接