MFC 怎么在对话框类中访问view类成员

嗯,在学孙鑫的MFC教程.....看到第七章对话框的时候想到的问题......情况是:我创建一个SDI,然后对菜单进行响应,单击菜单出现对话框,对话框已经绑定了一个自定义... 嗯,在学孙鑫的MFC教程.....看到第七章对话框的时候想到的问题......情况是:
我创建一个SDI,然后对菜单进行响应,单击菜单出现对话框,对话框已经绑定了一个自定义的Ctestdlg类,创建了一个编辑框控件。
我的目的是用户在编辑框输入的数据在“确定”后,被我在获取,接着能对view类的成员变量进行更改,所以想问一下怎么在对话框内获得view对象或者指针,进而能对其变量进行修改
百度到其中一个解决方案是:
CMyView *pView=(CMyView *)((CMainFrame *)AfxGetMainWnd())->GetActiveView();
因为不知道GetActiveView()用法,所以我不知道这个语句在SDI是否适用....
谢谢帮忙~~~
展开
 我来答
waynemm123
推荐于2016-03-29
知道答主
回答量:33
采纳率:0%
帮助的人:28.6万
展开全部
有很多种方法可以 ,我介绍两种:
第一种:
CMainFrame *pFrameWnd = (CMainFrame*)AfxGetApp()->GetMainWnd;
pFrameWnd->GetActiveView();

第二种是利用全局变量the App,在CMyAPP这个类里有一个申明的全局变量。:
theApp.GetMainWnd()->GetActiveView();
追问
这两种方法本质是和我百度到的是同一种方法吧......关于这种方法我有两个疑问:
第一, (CMainFrame*)AfxGetApp()->GetMainWnd中将指针强制转换,我想问一下为什么这样强制转换?
第二,GetActiveView()是“获得指向活动视图的指针”,这句话什么意思,视图还有分活动和非活动吗?在SDI中可以用这个函数吗?
追答
第一个疑问,因为你需要调用的是CMainFrame类的成员函数GetMainWnd,所以要强制转换。
第二个疑问,就是GetActiveView()是"A pointer to the current or active CView",其实如果是多文档编程的话,就会有不止一个View,当前获得焦点的View就是活动的。就是MDI模式。
何处淬吴钩
2012-03-04 · TA获得超过5043个赞
知道大有可为答主
回答量:2947
采纳率:50%
帮助的人:2371万
展开全部
最简单的办法是在View类里响应菜单消息,在消息响应函数里弹出对话框:
Ctestdlg dlg(pView);
dlg.Domodal();
需要为你的对话框类添加一个构造函数,Ctestdlg(CXXView *pView);然后添加一个成员变量保存pView的值,这个值就是View的指针。
追问
如果是创建模态对话框,Ctestdlg类的对象不作为局部变量,就不能通过重载构造函数的方式在view类的菜单响应函数传入view对象指针了......不过实际上影响也不大,可以自定义一个Ctestdlg类函数在view类的菜单响应函数里传递view对象指针....
这个方法理论上的确可行,没想到可以用传递指针的方式,非常非常感谢你的回答↖(^ω^)↗~~~不过还是等下面那个回答人的答出我的追问后才能确认哪个答案是满意回答....
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
455175633
2012-03-04 · TA获得超过301个赞
知道小有建树答主
回答量:632
采纳率:0%
帮助的人:406万
展开全部
适用。

这两种方法本质是和我百度到的是同一种方法吧......关于这种方法我有两个疑问:
第一, (CMainFrame*)AfxGetApp()->GetMainWnd中将指针强制转换,我想问一下为什么这样强制转换?
回答: 因为AfxGetApp()->GetMainWnd 需要强制转换的原因,
孙鑫不是讲了,字类强制转换成父类之后,子类的函数就不能用了。
你你逆向想一下。父类强制转换成子类会怎么样。
这样就会,你能使用子类的函数,全局变量。
为什么会有这种调用方式CWnd::FindWindow(,);这个就是调用静态的函数使用的,
你还是多看几遍吧。看懂了再说吧。 静态变量 静态函数?
第二,GetActiveView()是“获得指向活动视图的指针”,这句话什么意思,视图还有分活动和非活动吗?在SDI中可以用这个函数吗?
//可以用的。但是要正确的调用。
//多看几遍有益无害,

因为讲课是循环渐进的,
需要慢慢的了解这些。
碰到问题以后的课程就能解决这个问题的。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式