随笔 - 8  文章 - 26  trackbacks - 0
<2024年5月>
2829301234
567891011
12131415161718
19202122232425
2627282930311
2345678

常用链接

留言簿(4)

随笔档案

文章分类

文章档案

相册

C++语言

搜索

  •  

最新评论

阅读排行榜

评论排行榜

 

MFC窗体分割及相关注意事项    

 

1.首先从CsplitterWnd继承一个子类CSplitterWndEx

2.CMainFrame类中添加CsplitterWnd的实例CSplitterWndEx m_wndSplitter;

3.添加代码到 CMainFrame::OnCreateClient()函数

 CRect rect;   

       GetClientRect(rect);

if (!m_wndSplitter.CreateStatic(this,1,2))     {         return FALSE;     }

 if (!m_wndSplitter.CreateView(0,0,RUNTIME_CLASS(CZYView),CSize(rect.Width()/4*3,100),pContext))     {         return FALSE;     }

   if (!m_wndSplitter.CreateView(0,1,RUNTIME_CLASS(CTest),CSize(rect.Width()/4,100),pContext))     {         return FALSE;     }

m_CreatewndSplitter=true;

m_wndSplitter.SetActivePane(0,1);

return TRUE;

       return CFrameWnd::OnCreateClient(lpcs, pContext);

 

4.。重载CMainFrame::OnSize()函数,在窗口大小改变是调整分割窗体的大小

       CFrameWnd::OnSize(nType, cx, cy);  

CRect rect;

GetClientRect(rect);

if(m_CreatewndSplitter)

{

m_wndSplitter.SetColumnInfo(0,rect.Width() *3/4,10);

m_wndSplitter.SetColumnInfo(1,rect.Width() *1/4,10);

m_wndSplitter.RecalcLayout();

}

5.可以屏蔽CSplitterWndEx的鼠标调整大小的操作,重载OnMouseMove函数

void CSplitterWndEx::OnMouseMove(UINT nFlags, CPoint point)

{

       // TODO: Add your message handler code here and/or call default

      

       CWnd::OnMouseMove(nFlags, point);

}

-------------------------------------------------------------------------------------------------------

在分割窗体的一个视图中调用另一个视图的方法:

       CZYView* pZYView;

CMainFrame * pMainFrm = (CMainFrame*)AfxGetMainWnd();

 pZYView = (CZYView*)pMainFrm->m_wndSplitter.GetPane(0,0); /*获取另一个视图的指针*/

pZYView->Line(m_x0,m_y0,m_x1,m_y1); 

 

      ----------------------------------------------------------------------------------------------------

注意事项:

在添加头文件编译后经常会产生莫名其妙的错误,改正方法如下:

 

如果产生如下错误:

error   C2143:   syntax   error   :   missing   ';'   before   '*....

 error   C2501:   'CMyDoc'   :   missing   storage-class   or   type   specifiers  

 error   C2501:  'GetDocument'   :   missing   storage-class   or   type   specifiers  

 

解决方法:

在任何cpp文件的开头都按这样的顺序Include:  

 #include   "XXXDoc.h"  

 #include   "XXXView.h"  

 #include   "MainFrm.h"  

 注意,Doc的头文件一定要在最前面。这样你的CDemoViewCMyView也可以共享一个CDemoDoc  

 一般在Cpp中包含文件是要注意类的包含关系,被包含的类定义应该在前面。如果实在有冲突,可以在一个类的头文件中加:class   CXXXDoc;之类的空定义。这样定义过的头文件中可以用CXXXDoc申明指针,但是不能申明实际对象。  

 

                                

posted on 2008-11-24 11:10 杨彬彬 阅读(824) 评论(0)  编辑 收藏 引用

只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理