我做的是类似outlook的三叉分窗口
---------
|  |     |
|  |     |
|  |-----|
|  |     |
|  |     |
----------
左边是派生自CTreeView,右边上侧是派生自CListView下侧是派生自CView.我的问题是我怎么样才可以在不影响树形控件和列表控件的情况下在视图内画一些
装饰性的矩形(带说明性的文字,具体参看一下Outlook express)
我在派生自CView的视图的ondraw()中可以画装饰矩形,但为什么在CListView和CTreeView的ondraw()就不可以呢还有我不太明白怎么将派生自CTreeView和CListView的视图与我的文档联系起来呢?我把wizzard生成的派生自CView的类中联系文档的语句都照样搬过去,可是编译总是出错。再有,我如何才能获取活动视图呢?(活动视图的真正意义是什么呢?)

解决方案 »

  1.   

    CMyFrameWnd* pFWnd=::AfxGetMainWnd();
    CMyView *pView=pFWnd->GetActivateView();
    pView->GetDocument();
    要改很多东西的,包括在必要的时候#include 文件,和改动相关构造函数为public
    建议新建一个试试。
    祝你好运。
      

  2.   

    能不能把这样的样例代码给我啊还有绘图的问题,为什么在派生自CTreeView和CListView中的ondraw()函数没有被调用呢??
      

  3.   

    >怎么样才可以在不影响树形控件和列表控件的情况下在视图内画一些
    >装饰性的矩形(带说明性的文字,具体参看一下Outlook express)从网上下载CJ609LIB,有源码和例子
    >还有我不太明白怎么将派生自CTreeView和CListView的视图与我的文档联系起来呢?我把>wizzard生成的派生自CView的类中联系文档的语句都照样搬过去,可是编译总是出错。因为没有给出错误提示,试试在视类的头文件中加入class C..Doc;>再有,我如何才能获取活动视图呢?(活动视图的真正意义是什么呢?)活动视图用眼睛看不出来,简单说就是键盘的输入焦点,
      

  4.   

    楼上的谢谢阿,肯定给分
    但是我照搬这几行语句.h文件中的:
    1:CEMailDoc* GetDocument();
    2:#ifndef _DEBUG  
    inline CEMailDoc* CTitleView::GetDocument()
       { return (CEMailDoc*)m_pDocument; }
    #endif.cpp中的都改为将CDocument都改为了CEmailDoc得到以下错误:error C2143: syntax error : missing ';' before '*'
    error C2501: 'CEMailDoc' : missing storage-class or type specifiers
    error C2501: 'GetDocument' : missing storage-class or type specifiers请大虾在指导一下阿
      

  5.   

    视图与文档联系,当然是GetDocument()了,要几个视图互相通信,可以在CMainFrame::CreateClient时,将几个视图的指针保存下来,即调用CSplitterWnd::GetPane(int row, int col)即可获得,然后在各视图中调用一下((CMainFrame*)AfxGetApp->m_pMainWnd)->m_vwYourView;或((CMainFrame*)AfxGetApp->m_pMainWnd)->GetYourViewPtr(){return m_vwYourViewPtr}就可以了
      

  6.   

    派生自CTreeView和CListView的视图里的GetDocument()都是这样定义的:
    CDocument* GetDocument();而appwizzard生成的视图CView(右下的那个视图)里是这样定义的
    CEMailDoc* GetDocument();这样我的派生自CTreeView和CListView的视图岂不是得不到文档了么,我就照搬了appwizzard的定义及上面我写的代码,得到了上面的错误。怎么回事呢????
      

  7.   

    #include "XXXDoc.h"
    (CXXXDoc*)GetDocument()得到你的视图指针只要是视图文档结构,这样都可以得到
      

  8.   

    开水大虾:
    小弟真是佩服之至,还想请问一个问题:
    我在派生自CView的视图的ondraw()中可以画装饰矩形,但为什么在CListView和CTreeView的ondraw()就不可以呢,好像程序根本就不调用这两个数图的OnDraw()函数阿,这是怎么回事呢?我想在初始和重绘时画的修饰矩形是随着试图的变化而变化的应该不应该在OnDraw()中来做呢??
    万分感谢!!1
      

  9.   

    CListView和CTreeView根本就OnDraw吧..
    是在OnDraw中做,做完后别忘UpdateAllView()或Invlaidate()一下
      

  10.   

    我在CListView和CTreeView的ondraw()函数中用MessageBox("Hello");来测试,没有任何反应阿
    不知道怎么回事,是不是他们不是活动视图的原因阿??
      

  11.   

    CSplitterWnd然后呢,说具体阿大虾?
    谢谢了!!
      

  12.   

    CListView, CTreeView是不会让你画的,你可以将ListView作为List控件来用,将CTreeView作为TreeView控件来用,分别用GetListCtrl()得到List控件指针,用GetTreeCtrl()得到TreeView控件指针供你使用
      

  13.   

    CListView和CTreeView本质上应该还是CListCtrl和CTreeCtrl,因此不会调用OnDraw.
    但是会调用OnPaint。
    如果要画装饰矩形,我的意见是直接从CView中派生自己的类,
    然后矩形,ListCtrl等等都作为视窗的子窗口出现,在OnCreate函数中创建这些子窗口,在OnSize函数中放置这些子窗口的位置。在www.codeguru.com中有具体的代码