MFC中view和Doc类关系中,在view里成功获取文档类指针,但是指针下的所有自设成员变量值为什么为空?

如题,在某一次调试之前一切正常,上述问题不发生,而且可以保证源码正确。在其他地方写完代码调试后,从某一次开始突然出错,原因我只能定向到上述问题。在恢复了最后一次正确代码时,错误仍然不消散,重装vs2010无效,换用vs2017无效,重启无效......也就是之前没有的问题在同样情况下(至少表面目测),诡异地出现。能救救我...甚至我用完全没被我改动过的以前绝对能正常运行的初始代码都会出现这个问题。

void CSDIC04View::OnDraw(CDC* pDC)
{
    CSDIC04Doc* pDoc = GetDocument();
    ASSERT_VALID(pDoc);//能通过
    if (!pDoc)
        return;

    // TODO: 在此处为本机数据添加绘制代码

    CPen    myPen;
            myPen.CreatePen(PS_SOLID, 2, RGB(0, 0, 0));
    CPen *  pOldPen = pDC->SelectObject(&myPen);

    TRACE("从这里开始有问题%d\n",pDoc->m_ptx[0]);  

}

比如说,这里trace一个文档里的变量,结果是随机初始化值。后边我需要用到这些变量的,变量为空让我很为难,后边导致报错触发中断。而且,以前在oninitialupdate里能够打断点调试,现在会直接跳过。oninitialupdate里也有类似的获取指针再获取变量以完成初始化的操作,同样根据变量和自动窗口发现变量为空。

2个回答

qq_41199332
天_璇 手机没看见就评论功能,电脑上看见了...原因写在了二楼。
6 个月之前 回复

一更:先谢谢楼上,链接看了,我的是单文档,试了写static也是一样报错....

二更:然后错误定位可以再进一步,可能是onnewdocument没有正常加载,这是为什么?

三更:问题迂回解决。原因是onnewdocument和oninitialupdate、ondraw下的一个绘图函数的执行顺序异常导致。之前没有错误时,应该是先执行了onnewdocument,再进行oninitialupdate(我里面也有调用doc的变量),ondraw。但是有了错误后,先执行ondraw,再执行onnewdocument,这就获取不到信息了,进而出错。

使用if加变量强制跳过第一次ondraw下的函数后,程序正常运行!

在ondraw打断点,规避第一次调用函数后,结束ondraw时显示未加载mfc140ud.i386.pdb,有错以前没这个问题,而是直接到onpaint最后一行。

求解释......

https://bbs.csdn.net/topics/391915676 这里贴一个可能类似的问题,虽然我看不太懂。

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
MFC—获取子窗口View指针
CMainFrame* pMainFrame = (CMainFrame*)(AfxGetApp()->m_pMainWnd); CChildFxFrame* pChildFxFrame = (CChildFxFrame*)pMainFrame->GetActiveFrame(); CFxView* pView = (CFxView*)pMainFrame-&g...
获取view中所有文档
通过什么方法可以一次性的得到view中的所有的文档,赋给notedocumentcollection? 希望得到的是该view中的所有的文档,
MFC View Doc Frame关系指针
MFC View Doc Frame关系指针
Doc中如何获得View的指针?
Thanks
如何在doc中获得view的指针
如何在doc中获得view的指针
为什么获取的指针为空?
在rnrnpacket_handler被我定义成静态函数rnrnvoid CNMCView::packet_handler(u_char *param, const struct pcap_pkthdr *header, const u_char *pkt_data)rnrn //添加获取当前视图指针rn CMainFrame *pMF=(CMainFrame *)AfxGetMainWnd(); rn CNMCView *pView=(CNMCView *)pMF->GetActiveView();//到这里为什么获取到的pview指针为空啊?rn pView->m_ncmlistctrl.InsertItem(0,"192.168.1.1");rnrn
如何把MO的指针传给doc/View结构的View中
就是不用在view中用CFormView类,然后把控件拖到对话框上,再进行操作,我想直接用控件的view与CView直接关联,然后再操作
View里怎么取得所有视图的指针?
麻烦写段代码
view 中无法创建 对话框的类指针
我在GSView.h中声明了一个对话框的类指针 CDlgCtrl* m_pCtrl; 头文件也包含了#include "DlgCtrl.h"rn但是生成的时候,总是报错,实在找不到问题了rn[img=https://img-bbs.csdn.net/upload/201508/17/1439781290_608798.png][/img]
vc++中怎么获取view的指针呢?
做界面时,用Splitter分割界面,只会单独上下分或是左右分,怎么将界面分为左右下三部分区域呢?rn还有就是:vc++中怎么获取view的指针呢?期望各位侠士指点!
MFC获取指针.doc
MFC获取指针.mfc框架中各个文件中函数的调用所必需的的指针
请问如何获取view指针
在自定义的class中rn(CDocument::GetNextView((((CMainFrame*)AfxGetApp()->m_pMainWnd)rn ->GetActiveDocument())->GetFirstViewPosition() )rn ->m_lpp).m_strL="mmm";rnm_lpp是view成员变量,m_strL是m_lpp所属class的成员变量rnrn编译如下rnerror C2664: 'GetNextView' : cannot convert parameter 1 from 'struct __POSITION *' to 'struct __POSITION *& 'rn A reference that is not to 'const' cannot be bound to a non-lvaluernrnerror C2227: left of '->m_lpp' must point to class/struct/unionrnrnerror C2228: left of '.m_strL' must have class/struct/union typernrn3 error(s), 0 warning(s)rn请问怎么解决它们呢 谢谢了
获取View类成员的指针问题
假设View类中定义rnrn[code=C/C++]class CMyView : public CViewrnrn friend class CLASS_A;rn public:rn // constructor & destructorrn public:rn // operationsrn private:rn CLASS_B Object_B;rn[/code]rnrn假设CLASS_A定义如下rn[code=C/C++]class CLASS_Arnrn public:rn re_direct();rn private:rn int ** pointer_a;rn[/code]rnrn假设CLASS_B如下rn[code=C/C++]rnclass CLASS_Brnrn friend class CMyView;rn friend class CLASS_A;rnrn private:rn int * pointer_b;rn[/code]rnrn现在想用CLASS_A中的指针指向CLASS_B对象(在View中定义的那个)的地址,现有CLASS_A的MF如下rn[code=C/C++]rnvoid CLASS_A::re_direct()rnrn CFrameWnd * pFrame = (CFrameWnd *)AfxGetMainWnd();rn ASSERT_VALID(pFrame);rnrn CGA_BASEDView * p_MyView = (CMyView *)(pFrame->GetActiveView());rn rn pointer_a = &(p_MyView->Object_B.pointer_b);rn[/code]rn这样实现肯定是不可以的,所以问问大家有什么办法可以实现
MDI获取View指针问题?????
问题描述:rnrn使用多文档视图,打开了多个视图,如v1,v2,v3,当前选中的是v1rnrn那么如何通过app类获取到这个vi视图的指针?rnrn尝试过:AfxGetMainWnd()->MDIGetActive()->GetActiveView() 这样得不到,得到的是空。rnrn应该是要获取到CChildFrame类的指针,然后获取GetActiveView(),但是如何获取CChildFrame指针??rnrn求助............
求助:MFC多文档在对话框中获取View指针问题
如题rn在初始化对话框OnInitDialog()中需要用到View中的成员变量rn在对话框.cpp中添加了rn#include "DemoDoc.h"rn#include "DemoView.h"rn#include "MainFrm.h"后用下面这句话来获得View指针,但是获得的指针为空,请问是怎么回事?谢谢大虾指点rn[code=c]CDemoView* pView = (CDemoView*)((CMainFrame*)AfxGetMainWnd())->GetActiveView();[/code]
C++类中的成员指针
请帮忙看一下下面的代码:实在是找不到原因呀?rnclass arnrn public:rn void method(char *inputname)rn strcpy(name,inputname); /运行到这里为什么会报错呢。但name=new char[10] 就不会了为什么?rn rn private:rn char *name;rnrnvoid main()rn a aa;rn a.method();rnrnrnrn
指针指向类中的成员
在建立对象时,系统会为每一个对象分配一定的存储空间存放其成员。对象空间的起始地址就是 对象的指针。可以定义一个指针变量,用来存放对象的指针。如下有一个类: class Time { public:     Time(int,int,int);     int hour;     int minute;     int sec;     void get_time(); };
MFC 如何在MainFrame里获取其他View的指针? 急
我想在 MainFrame 里直接对其他窗口操作(而不是发送消息),即获得其他View的指针,用GetRuntimeClass(),可找到的都是CTempWnd,而在其他View(有2个View)里可以正确的找到;rnrn请告诉我在MainFrame里怎样找到吗?
获取view中的所有内容
如题,如何获取view中的所有内容,rn有实例代码最好
在mfc中,如何获取文档(doc)指针链表
在mfc中,如何获取文档(doc)指针链表
MFC中DOC/View中的问题
刚开始看MFC,想问一下在用文件样版控件架构Doc/view时,Document,Frame,View这三个控件和文件样板之间的指向和产生关系是什么样的呢?
自定义视图类中,如何获取文档指针?
本文对同一文档数据,利用不同视图进行二维、三维显示,我自定义一个三维视图类后,不知如何获取该文档的指针?
在自定义对话框类中如何获取文档指针?
MFC单文档,自定义对话框类CXx,rn若要在此类中的函数中获取文档指针,该怎么做?rn(像CXxView::GetDocument()一样的作用)
VC MFC类中各种类的指针的获取和应用.doc
每一个MFC应用程序都有一个CWinApp派生类的对象。这个对象对应着程序的主线程。而 CWinApp 类中有一个 CWnd * m_pMainWnd 成员变量。这个成员变量记录了应用程序的主窗口。当你新建一个MFC应用程序的时候,在 InitInstance虚函数里都会出现对 m_pMainWnd 赋值的语句.唯一的例外是单文档界面的MFC应用程序,你无法在 InitInstance 函数里看到这段代码,因为它已经被隐藏在 ProcessShellCommand 这个函数里了。由此你就可以下结论了:只要创建自己的窗口类,就要把这个类的对象赋值给 m_pMainWnd .而这个成员只能在C**APP类中才可以使用,所以怎样使用这个CWinApp类里的CWnd 类型的变量来得到主框架窗口的指针呢??
在MFC类中各种类的指针的获取和应用.doc
在MFC类中各种类的指针的获取和应用 关于MFC下的文档和视图以及框架之间的访问。
怎么获得view的指针
我在单文档里用CPen画了一个圆,然后又新建了一个对话框,在view上点右键弹出来。rn在对话框里面可以输入圆的半径,我希望按ok后,圆进行重新绘制。rn我知道应该用Invalidate或者InvalidateRect,可是需要先得到它的指针啊rn即 void CIuput::OnOK() rnrn // TODO: Add extra validation here rn UpdateData(false);rn ????->InvalidateRect(rect,TRUE);rn CDialog::OnOK();rn rnrn我怎么才能实现这种效果呢?rn
获得View指针
请问如何在SDI的MianFrame中获得View指针。如何在App中获得View指针?
请问:MDI中MainFrame中如何获取View指针
1:MDI中MainFrame中如何获取View指针 ?rn 我使用GetActiveView();可是在我的View中自定义的函数却不能使用,请告知rn2:在View中又如何获取MainFrame的指针呢rn3:MainFram可否获取CDocument的指针呢rn
View指针问题....
我想在CMainFrame类中调用CMyView类中的成员变量或成员函数,于是在CMainFrame中声明了CMyView* m_pView;可是编译时报错:rn(1) syntax error : missing ';' before '*'rn(2) 'CMessageTestView' : missing storage-class or type specifiersrn(3) 'm_pView' : missing storage-class or type specifiersrnrn不知道是什么原因,请各位高手指点,并解释一下什么原因....
如何得到VIEW的指针?
ff
如何取得VIEW的指针?
我有个函数FUNCTION1()在我自己加入的文件FUN.CPP中,有另一个函数FUNCTION2()在CTESTVIEW类中定义.rn现在我想在FUNCTION1中调用FUNCTION2,怎么处理才最好?rnFUN.CPPrn----------rn#INCLUDE "STDAFX.H"rnrnVOID FUNCTION1()rnrn.....rnrn-----------rnrn我在FUNCTION1中用rnm_view = (CTestView *)AfxGetApp()->GetMainWnd()->GetParentFrame()->GetActiveView();rn报"非法操作"rn在调用FUNCTION1时(在DOC中)将VIEW的指针做为参数传给FUNCTION1的方法在普通调用时可以,但是用AFXBEGINTHREAD(FUNCTION1...)时,主调函数一结束,指向VIEW的指针也就消失了,此时在FUNCTION1中应用指针会不会出错?rnrnvoid CTESTDOC::on....()rnrn.....rn取VIEW的指针m_view;rnafxbeginthread(function1...)rnrnrn
为什么GetActiveDocument()指针为空
context.m_pCurrentDoc = GetActiveDocument();rn if ((GetActiveDocument())==NULL)rn AfxMessageBox("空");rnrn为什么总是弹出 AfxMessageBox("空");rnrn我是在打开一个文件,已经生成了view界面后,再调用的
MFC中如何获取指针
举例来说,有两个类A,B,在A的外部别的地方声明了一个A的对象a或指针pa,在类B中也想使用A的对象a或指针pa,怎么办?我觉得应该使用this指针来找到该对象,但不知怎么做,试验多次总不成功,rn
mfc中各类指针的获取
讲解了再mfc中如何获取各种不同类,对象的指针
关于MFC中指针的获取
我用MFC生成了一个EXE的工程,现在在view中添加了一个非模态对话框,希望在对话框中设置数据,然后根据设置的数据调用View的函数,使View发生相应的变化。问题在于我已经在View中包含了对话框的头文件了,本着头文件不能互包含的原则,那我怎么在对话框中得到View的指针呢?或者说我应该怎样实现这种功能呢?
如何在一开始得到所有View的指针?
在MainFrm中得到他下面的所有试图的指针。
程序规范的问题:MFC Doc/View中,是View操作Doc,还是Doc操作View
如果Viw操作Doc,那么所有界面的消息都在view中响应,而Doc只处理数据rn如果Doc操作View,则消息在文档中响应,而View只负责显示rn还有是不是可以让CFrameWn来负责消息的发送,而Doc和View只接受WM_COMMAND消息rnrn我开发Vc++已经两年了,一直是凭感觉走,所以架构有点乱,不是很规范rn请问有没有相应的标准rn还有书写的格式和注释的格式rn变量命名格式我只是参照匈牙利命名法,rn函数命名有没有相应的标准
怎么在一个view中得到另一个view的指针?
一个MDI程序有2个view类,怎样才能在一个view中得到另一个view的指针?rn我用了RUNTIME_CLASS宏,RUNTIME_CLASS(CView1)可是好象不行,MSDN说是可以返回指针的嘛
如何在doc里获取其他类的指针。或者在其他类获取doc的指针?
单文档的一个工程,在自己写的一个 MyDlg类里有一个变量CString str,我想在doc里使用该变量。rn1、我在doc头文件里 CMyDlg* m_MyDlg; 然后在doc里使用该变量:AfxMessageBox(m_MyDlg->str);发现执行到这一句的时候程序就死了。rn2、我改方法,在doc头文件里 CMyDlg m_MyDlg2;没有加星号 然后在doc里使用该变量:AfxMessageBox(m_MyDlg.str);这次程序不死了,但是发现这个变量是空的。rn3、于是我想在doc头文件里定义了一个变量CString strInDoc;然后去MyDlg类里赋值。但是发现在MyDlg类里无法获取doc的指针,用GetActiveDocument(); 函数不行。报错。rnrn问题描述的很清楚吧,求个高人解答啊、、、、、、、rnrn
一个有关View中指针的问题
View中this指向什么rn
相关热词 c++和c#哪个就业率高 c# 批量动态创建控件 c# 模块和程序集的区别 c# gmap 截图 c# 验证码图片生成类 c# 再次尝试 连接失败 c#开发编写规范 c# 压缩图片好麻烦 c#计算数组中的平均值 c#获取路由参数