• 全部
  • VC综合技术
  • 互联网技术
  • MFC AppLauncher
  • .NET 技术
  • 界面
  • 进程
  • 算法
  • 硬件/系统
  • 数据库
  • VC++技术资源

50分求教关于静态分割的绘图的问题(高手请进)

luckyfool 2003-05-11 05:53:22
我做的是类似outlook的三叉分窗口
---------
| | |
| | |
| |-----|
| | |
| | |
----------
左边是派生自CTreeView,右边上侧是派生自CListView下侧是派生自CView.

我的问题是我怎么样才可以在不影响树形控件和列表控件的情况下在视图内画一些
装饰性的矩形(带说明性的文字,具体参看一下Outlook express)
我在派生自CView的视图的ondraw()中可以画装饰矩形,但为什么在CListView和CTreeView的ondraw()就不可以呢

还有我不太明白怎么将派生自CTreeView和CListView的视图与我的文档联系起来呢?我把wizzard生成的派生自CView的类中联系文档的语句都照样搬过去,可是编译总是出错。

再有,我如何才能获取活动视图呢?(活动视图的真正意义是什么呢?)
...全文
5 点赞 收藏 17
写回复
17 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
blackblue 2003-05-13
CListView和CTreeView本质上应该还是CListCtrl和CTreeCtrl,因此不会调用OnDraw.
但是会调用OnPaint。
如果要画装饰矩形,我的意见是直接从CView中派生自己的类,
然后矩形,ListCtrl等等都作为视窗的子窗口出现,在OnCreate函数中创建这些子窗口,在OnSize函数中放置这些子窗口的位置。在www.codeguru.com中有具体的代码
回复
CloudWater 2003-05-11
CListView, CTreeView是不会让你画的,你可以将ListView作为List控件来用,将CTreeView作为TreeView控件来用,分别用GetListCtrl()得到List控件指针,用GetTreeCtrl()得到TreeView控件指针供你使用
回复
luckyfool 2003-05-11
CSplitterWnd然后呢,说具体阿大虾?
谢谢了!!
回复
luckyfool 2003-05-11
我在CListView和CTreeView的ondraw()函数中用MessageBox("Hello");来测试,没有任何反应阿
不知道怎么回事,是不是他们不是活动视图的原因阿??
回复
fhbkyo 2003-05-11
CSplitterWnd
回复
CloudWater 2003-05-11
CListView和CTreeView根本就OnDraw吧..
是在OnDraw中做,做完后别忘UpdateAllView()或Invlaidate()一下
回复
luckyfool 2003-05-11
开水大虾:
小弟真是佩服之至,还想请问一个问题:
我在派生自CView的视图的ondraw()中可以画装饰矩形,但为什么在CListView和CTreeView的ondraw()就不可以呢,好像程序根本就不调用这两个数图的OnDraw()函数阿,这是怎么回事呢?我想在初始和重绘时画的修饰矩形是随着试图的变化而变化的应该不应该在OnDraw()中来做呢??
万分感谢!!1
回复
CloudWater 2003-05-11
#include "XXXDoc.h"
(CXXXDoc*)GetDocument()得到你的视图指针

只要是视图文档结构,这样都可以得到
回复
luckyfool 2003-05-11
派生自CTreeView和CListView的视图里的GetDocument()都是这样定义的:
CDocument* GetDocument();

而appwizzard生成的视图CView(右下的那个视图)里是这样定义的
CEMailDoc* GetDocument();

这样我的派生自CTreeView和CListView的视图岂不是得不到文档了么,我就照搬了appwizzard的定义及上面我写的代码,得到了上面的错误。

怎么回事呢????
回复
CloudWater 2003-05-11
视图与文档联系,当然是GetDocument()了,要几个视图互相通信,可以在CMainFrame::CreateClient时,将几个视图的指针保存下来,即调用CSplitterWnd::GetPane(int row, int col)即可获得,然后在各视图中调用一下((CMainFrame*)AfxGetApp->m_pMainWnd)->m_vwYourView;或((CMainFrame*)AfxGetApp->m_pMainWnd)->GetYourViewPtr(){return m_vwYourViewPtr}就可以了
回复
luckyfool 2003-05-11
楼上的谢谢阿,肯定给分
但是我照搬这几行语句

.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

请大虾在指导一下阿
回复
blackblue 2003-05-11
>怎么样才可以在不影响树形控件和列表控件的情况下在视图内画一些
>装饰性的矩形(带说明性的文字,具体参看一下Outlook express)

从网上下载CJ609LIB,有源码和例子


>还有我不太明白怎么将派生自CTreeView和CListView的视图与我的文档联系起来呢?我把>wizzard生成的派生自CView的类中联系文档的语句都照样搬过去,可是编译总是出错。

因为没有给出错误提示,试试在视类的头文件中加入class C..Doc;

>再有,我如何才能获取活动视图呢?(活动视图的真正意义是什么呢?)

活动视图用眼睛看不出来,简单说就是键盘的输入焦点,
回复
luckyfool 2003-05-11
大虾帮我啊
我顶
回复
luckyfool 2003-05-11
能不能把这样的样例代码给我啊

还有绘图的问题,为什么在派生自CTreeView和CListView中的ondraw()函数没有被调用呢??
回复
longsheng2 2003-05-11
CMyFrameWnd* pFWnd=::AfxGetMainWnd();
CMyView *pView=pFWnd->GetActivateView();
pView->GetDocument();


要改很多东西的,包括在必要的时候#include 文件,和改动相关构造函数为public
建议新建一个试试。
祝你好运。
回复
herrycsdn 2003-05-11
关注学习
回复
luckyfool 2003-05-11
哪位大虾来帮帮我这个新手阿
回复
相关推荐
发帖
VC/MFC
创建于2007-09-28

1.5w+

社区成员

VC/MFC相关问题讨论
申请成为版主
帖子事件
创建了帖子
2003-05-11 05:53
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……