问题解决,马上结贴

绿豆蛙2013 2009-08-09 02:33:31
问题就是如何在文档类中获取视图类中定义的对话框数据m_dlg[5]中的第二个对话框的指针。

现在的思路是:获取视图类的指针->然后获取对话框的指针

但是操作中我遇到点问题,我见别人是这样获取视图类指针的:

Doc.cpp中
	POSITION firstViewPos;
CView *pView;
firstViewPos=GetFirstViewPosition();
pView=GetNextView(firstViewPos);


我用这个是可以,但是pView->里面没有对象m_dlg。为什么不能用CMyView *pView呢?我一改成CMyView *pView就一大堆错误,我包含了MyView.h也不行,这是问题一。

得到指针之后,就可以利用
pView->m_dlg[1]
就是获得的指针,是不是这样?

谢谢大家,问题搞定,马上就结贴~~~~
...全文
142 13 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
绿豆蛙2013 2009-08-09
  • 打赏
  • 举报
回复
牛逼,牛逼,你真牛逼!!!
佩服,佩服,我真佩服!!!

雪影,真诚的说一声,谢谢
MoXiaoRab 2009-08-09
  • 打赏
  • 举报
回复
汗一个,强制转换的问题....LZ....
雪影 2009-08-09
  • 打赏
  • 举报
回复
1. pView=(CMonitorView*)(GetNextView(firstViewPos));是c方式的转换
2. static 是c++转换方式,比上面的转换更安全,可以在编译期间发现错误。
绿豆蛙2013 2009-08-09
  • 打赏
  • 举报
回复
牛逼!你真是太牛逼!
只是没明白你为什么这样转换类型static <CMyView*>,不都是这样吗
pView=(CMonitorView*)(GetNextView(firstViewPos));

米西牙乖 2009-08-09
  • 打赏
  • 举报
回复
包含CMyView的头文件之前,请包含对应的文档类的头文件,就没有一大堆错误了。。。
雪影 2009-08-09
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 lzh19840809 的回复:]
引用 5 楼 tttyd 的回复:
另外
C/C++ code    POSITION firstViewPos;
    CMyView*pView;
    firstViewPos=GetFirstViewPosition();
    pView=static <CMyView*>(GetNextView(firstViewPos));//这里要进行指针类型转换


这个好像不用吧,GetNextView得到的是指针

MSDN上的解释

virtual CView* GetNextView( POSITION& rPosition ) const;

Return Value

A pointer to the view identified by rPosition.

[/Quote]
晕,C2440错误就是你没有进行类型转换而导致的错误。
GetNextView返回的CView指针类型,而你要赋值的值CMyView*类型,你说需不需要进行类型转换
绿豆蛙2013 2009-08-09
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 tttyd 的回复:]
另外
C/C++ code POSITION firstViewPos;
CMyView*pView;
firstViewPos=GetFirstViewPosition();
pView=static<CMyView*>(GetNextView(firstViewPos));//这里要进行指针类型转换
[/Quote]

这个好像不用吧,GetNextView得到的是指针

MSDN上的解释

virtual CView* GetNextView( POSITION& rPosition ) const;

Return Value

A pointer to the view identified by rPosition.
绿豆蛙2013 2009-08-09
  • 打赏
  • 举报
回复
包含了啊,我把这部分程序贴出来
#include "stdafx.h"
#include "Monitor.h"

#include "MonitorDoc.h"
#include "MonitorView.h"


。。。。。。。。。。。。

	POSITION firstViewPos;
CMonitorView *pView;
firstViewPos=GetFirstViewPosition();
pView=GetNextView(firstViewPos);


错误:
error C2440: '=' : cannot convert from 'class CView *' to 'class CMonitorView *'
Types pointed to are unrelated; conversion requires reinterpret_cast, C-style cast or function-style cast
雪影 2009-08-09
  • 打赏
  • 举报
回复
另外
    POSITION firstViewPos;
CMyView *pView;
firstViewPos=GetFirstViewPosition();
pView=static<CMyView*>(GetNextView(firstViewPos));//这里要进行指针类型转换
雪影 2009-08-09
  • 打赏
  • 举报
回复
你确定你包含了CMonitorView类定义的头文件?

在pView指针定义的cpp文件里。
绿豆蛙2013 2009-08-09
  • 打赏
  • 举报
回复
为了方便大家看,我把实际的CMonitorView 改成了 CMyView,抱歉
绿豆蛙2013 2009-08-09
  • 打赏
  • 举报
回复
肯定不行啊,
	POSITION firstViewPos;
CMyView *pView;
firstViewPos=GetFirstViewPosition();
pView=GetNextView(firstViewPos);


错误:
error C2065: 'CMonitorView' : undeclared identifier
error C2065: 'pView' : undeclared identifier
warning C4552: '*' : operator has no effect; expected operator with side-effect
error C2440: '=' : cannot convert from 'class CView *' to 'int'
This conversion requires a reinterpret_cast, a C-style cast or function-style cast

用户 昵称 2009-08-09
  • 打赏
  • 举报
回复
你试试不包含.h,而使用class CMyView声明。

16,548

社区成员

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

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

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