请问一个简单的问题:怎样在CMainFrame类中,访问 C***View类当中的自定义成员函数???多谢!

kigy 2001-08-06 05:31:40
多谢!!!
...全文
210 18 打赏 收藏 转发到动态 举报
写回复
用AI写文章
18 条回复
切换为时间正序
请发表友善的回复…
发表回复
prog_st 2001-08-07
  • 打赏
  • 举报
回复
邮件发出
大体思路是:
在工程中应用类是可取全局访问的类,可在应用类中创建一个指针变量保存你所需要的视图信息,这个指针在该视图创建的构造函数中赋值,调用时无论在那个类中,只要
(CYouApp*)AfxGetApp()->m_YouNeedView就可以调用视图类的变量了。
kigy 2001-08-07
  • 打赏
  • 举报
回复
多谢 prog_st(st) !
我的email是:kigy@263.net

若有效,一定给分!
prog_st 2001-08-07
  • 打赏
  • 举报
回复
我有例程,可在工程中的任何类中获取视图指针,若需要请给EMail!
kigy 2001-08-07
  • 打赏
  • 举报
回复
按照上面的办法:把:#include "CMyDoc.h" #include "CMyView.h" 加进去,再声明 class CMyView; 编译是没有错误了,可是执行到相应调用CMyView中那个自定义函数语句是说是“×××××内存只能为只读”之类错误了!

还有 什么强制转换好像也不行呀
kigy 2001-08-07
  • 打赏
  • 举报
回复
我收到的怎么都是乱码锕?麻烦你重新发一下好吗?
多谢!
HowUCan 2001-08-06
  • 打赏
  • 举报
回复
强制转换一下
(CMyView*) GetActiveView()->
蒋晟 2001-08-06
  • 打赏
  • 举报
回复
申明指针的时候,只要知道名字就可以了,所以可以先申明class CMyView,再申明指针。
在使用指针指向的对象的时候(比如调用成员函数),就要知道类的类型,要先包含"MyView.h"才行。一般我是在.cpp开头包含这些头文件。
horsehorse 2001-08-06
  • 打赏
  • 举报
回复
>不是,是我笔误,是GetActiveView() ;
>真的找不到我自己的定义的函数啊!
你当然不可能找到,因为GetActiveView返回的是CView类指针,怎么可能会有你定义的函数?
别忘了给分!

>如果在CMainFrame要使用CMyView *pView,那么就要#include "CMyView.h"
>好象加了这条语句,别的一点都不动,编译的时候就会报错,说CMyView.h文件里有什么错
如果在类CMainFrame中定义了CMyView类指针,那么在编译时编译器首先要知道CMyView是什么。解决的办法一个是用Mr_Bomber的办法,在CMainFrame类定义前面加一句:class CMyView;然后在MainFrame.cpp中加入
#include "CMyDoc.h"
#include "CMyView.h"
另一个解决办法是把这两个include语句加到MainFrame.h中,CMainFrame的定义之前。

别忘了给分!
brownfish201 2001-08-06
  • 打赏
  • 举报
回复
#include "CMyDoc.h"
#include "CMyView.h"

必须有Doc.h
次序也不能换
Mr_Bomber 2001-08-06
  • 打赏
  • 举报
回复
如果是把CMyView * pView作为一个成员变量使用的话,就可能出现一些问题,好象是类型未定义或者重复定义之类得问题,我的解决办法是在CMainFrame类定义前面加一句:class CMyView;
以后如果出现类似得问题,就在出问题得文件里面按照类似得方法做,不知道这样能不能解决你们得问题。
蒋晟 2001-08-06
  • 打赏
  • 举报
回复
DYNAMIC_DOWNCAST
kigy 2001-08-06
  • 打赏
  • 举报
回复
对呀,我刚才也碰到了类似上面:myyxr(魔域夜行人) 这位老兄同样的问题,可是我不但不明白为什么报错而且还不知道怎样绕过去呢?

请 老马等高手说说!不甚感谢!
myyxr 2001-08-06
  • 打赏
  • 举报
回复
to: horsehorse(老马) 
想起了我原来的一个问题:
如果在CMainFrame要使用CMyView *pView,那么就要#include "CMyView.h"
好象加了这条语句,别的一点都不动,编译的时候就会报错,说CMyView.h文件里有什么错
后来,我就绕了过去,可是一直不知道是怎么回事
能说说吗?
kigy 2001-08-06
  • 打赏
  • 举报
回复
不是,是我笔误,是GetActiveView() ;
真的找不到我自己的定义的函数啊!
horsehorse 2001-08-06
  • 打赏
  • 举报
回复
GetActive()是什么?
kigy 2001-08-06
  • 打赏
  • 举报
回复
首先感谢老马同志的热情帮助!
可是,我用GetActive()->却找不到我在CMyView中定义的public型函数啊?
怎么回事哦?
horsehorse 2001-08-06
  • 打赏
  • 举报
回复
1。得到当前活动视对象指针:
对于SDI,直接调用GetActiveView,对于MDI,直接调用GetActiveView将返回NULL,只能是:
CMDIChildWnd *pChild =
(CMDIChildWnd *) pFrame->GetActiveFrame();
CMyView *pView = (CMyView *) pChild->GetActiveView();
别忘了对视类指针进行类型转换。
2。用视类指针直接访问成员函数,注意只能访问public函数。
如果访问消息映射函数,最好是PostMessage或SendMessage。

kigy 2001-08-06
  • 打赏
  • 举报
回复
怎么没有高手进来解答啊?
同志们,请赐教哦!

16,551

社区成员

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

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

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