首先多谢小虫同学一直关注我的博客,昨日小虫同学按照我的分割窗体的文章举一反三自己写了一段代码,但是运行后发现问题,即,分割后显示的大小和CSize设置的初始大小不一样,那么我们现在来看一下这段代码: BOOL CMainFrame::OnCreateClient(LPCREATESTRUCT lpcs, CCreateContext* pContext) CRect rect; if(wndSplitter_erect.CreateStatic(this,1,2)==NULL) if(wndSplitter_horizontal.CreateStatic(&wndSplitter_erect,2,1,WS_CHILD|WS_VISIBLE, wndSplitter_erect.IdFromRowCol(0, 0))==NULL) wndSplitter_horizontal.CreateView(0,0,RUNTIME_CLASS(CUpView),CSize(rect.Width()/6,rect.Height()/3),pContext); wndSplitter_horizontal.CreateView(1,0,RUNTIME_CLASS(CLeftView),CSize(rect.Width()/6,rect.Height()-rect.Height()/3),pContext); 我把这段代码运行一遍以后发现,CLeftView占满了整个视图,而CDownView和CUpView则被压缩为一小条。 好了,现在先来分析一下这段代码,首先将视图分割为一行两列,再然后将第一列分为两行一列,原本看似没有什么问题的程序,为什么运行起来就出问题了呢? 这个问题在于,第一次把视图分为一行两列后,我们指定了第二列的宽度,但是我们没有指定第一列的宽度,后来,我们又将第一列分为两行一列了,虽然第二次分割为两个视图CDownView和CUpView指定了宽和高,但是,它的父视图,即第一次分割后的第一列没有指定,系统则自动将大小设为0了。所以,我们看到的CDownView和CUpView被压缩为一小条。 现在我们把问题的原因搞清楚了,那么有什么解决办法呢?现在我们来看两个函数,如下: 1、SetRowInfo函数: CSplitterWnd::SetRowInfo 现在我通俗的解释下这三个参数,row:表示要设置哪行的高度。cyldeal:表示你所要设置的理想行高,即显示时的高度。cyMin:表示当用鼠标拖动分隔条的时候,此行的最小高度,通常,我们设置为0即可。 2、SetColumInfo函数: CSplitterWnd::SetColumnInfo 现在我通俗的解释下这三个参数,col:表示要设置哪列的宽度。cxldeal:表示你所要设置的理想列宽,即显示时的宽度。cxMin:表示当用鼠标拖动分割条的时候,此列的最小宽度,通常,我们设置为0即可。 好了,我们要想解决问题,就要用到这两个函数,下面是我修改过的代码: BOOL CMainFrame::OnCreateClient(LPCREATESTRUCT lpcs, CCreateContext* pContext) CRect rect; if(wndSplitter_erect1.CreateStatic(this,1,2)==NULL) if(wndSplitter_horizontal1.CreateStatic(&wndSplitter_erect1,2,1,WS_CHILD|WS_VISIBLE, wndSplitter_erect1.IdFromRowCol(0, 0))==NULL) wndSplitter_horizontal1.CreateView(0,0,RUNTIME_CLASS(CMsmonitorUpView),CSize(rect.Width()/6,rect.Height()/3),pContext); wndSplitter_horizontal1.CreateView(1,0,RUNTIME_CLASS(CMsmonitorTreeView),CSize(rect.Width()/6,rect.Height()-rect.Height()/3),pContext); return TRUE; 在我修改的代码中加入了一句,wndSplitter_erect1.SetColumnInfo(0,rect.Width()/6,0);设置第一次分割时第0列的列宽。 这个问题解决了,最后我们总结一下: 1、在分割的时候注意各个视图的大小,对没有指定宽高的视图再次分割一定要注意为这个视图初始化宽高,用SetColumnInfo和SetRowInfo函数。 2、对于没有初始化的视图,系统会自动初始化宽高为0。 |
VC++6.0关于分割窗口的CSize初始大小不起作用问题的解释
最新推荐文章于 2013-11-19 17:42:46 发布