MFC中多视图之间的通信

freesense 2000-06-07 08:41:00
小弟最近在写一个程序,单文档,有三个view,甲view中我创建了派生的CTreeCtrl控件,乙view中我创建了派生的CListCtrl控件(之所以不采用CTreeView和CListView是因为我想封装这两个控件),现在的问题是:我在CTreeCtrl中获得一个消息,必须调用在CListCtrl中的自定义函数,小弟试过以下几种方法,都不能得到正确结果,所以还请高手帮忙:
1 定义关于派生的CListCtrl的全局变量,在.h文件中使用extern修饰符,在.cpp中直接定义指针,编译通过,但运行时执行非法操作。可以确定不是其他方面的问题,因为小弟把这几行代码注释掉,程序可以正常运行,只是在CTreeCtrl接受消息以后不会调用CListCtrl中的自定义函数;
2 消息发送。CTreeCtrl接受消息以后发送自定义消息::PostMessage(NULL,MM_DISKSELCHANGED,(UINT)currentDir,0),在乙view中接受该消息并调用消息处理函数,单步跟踪发现消息被正确发出,但是乙view不知为何并没有接受该消息,因此也没有执行消息处理函数,程序编译通过,运行正常,就是在CListCtrl中没有正常显示;
3 直接取控件的指针。我在CTreeList中调用AfxGetMainWnd(),再使用GetNextWindow(),但是我不知道何时才能取到我所需要的CListCtrl的指针。
如果能有例程,小弟万分感谢。
...全文
367 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
zhoutao 2000-06-11
  • 打赏
  • 举报
回复
关注!
ad 2000-06-11
  • 打赏
  • 举报
回复
在甲view中用::PostMessage(NULL,MM_DISKSELCHANGED,(UINT)currentDir,0)不能将消息发到乙view中,事实上这样做比较规范:
1、甲view中:
AfxGetMainWnd()->PostMessage(MM_DISKSELCHANGED, (UINT)currentDir);
2、CMainFrame中:
//响应MM_DISKSELCHANGED消息
OnDISKSELCHANGED(...)
{
取得乙view指针=>pView;
pView->PostMessage((MM_DISKSELCHANGED, (UINT)currentDir);
//或直接调乙view的刷新函数
}
celxta 2000-06-11
  • 打赏
  • 举报
回复
extern 在.cpp或.c中声明比较好,对于含指针的一定要在原始声明处初化否则会产生非法操作
蒋晟 2000-06-11
  • 打赏
  • 举报
回复
Use documents
jy 2000-06-11
  • 打赏
  • 举报
回复
give me a mail.
I'd like to send my listviewex & treeviewex,
dzl 2000-06-10
  • 打赏
  • 举报
回复
试试如下方法:
当CTreeCtrl获得一个消息时,在甲view中调用GetDocument()->UpdateAllViews(this),在乙view的OnUpdate调用CListCtrl中的自定义函数。

freesense 2000-06-07
  • 打赏
  • 举报
回复
在甲视中接受消息时,所有窗口都已经被创建,应该不存在发送消息到一个不存在的窗口的问题,声明全局变量我也试过,虽然编译通过,但是运行时报告非法操作。
BugGo 2000-06-07
  • 打赏
  • 举报
回复
SimpleBrowse
-- 简洁易用的图片浏览器(源码公开)--
http: www.thalia.com.cn

Just like this , left is a tree , right is a listCtrl
longx 2000-06-07
  • 打赏
  • 举报
回复
甲乙两个视一定有效?即在甲视中接受消息时,乙视窗口一定是存在的吗?如果是
可以用消息发送。声明一个全局变量保存乙视窗口句柄,在甲视中发送自定义
消息.

16,467

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

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

试试用AI创作助手写篇文章吧