单步跟踪为啥不去调用OnInitialUpdate? 详情如下,请帮忙分析一下,谢谢

小龙王2010 2013-09-09 12:04:12
代码:
m_resultView->OnInitialUpdate();
return TRUE;

说明:
m_resultView是自己写的CResultView的成员变量, CResultView 是继承自自己写的CZoomView类,CZoomView类是继承自CView类的子类CScrollView类
现在是执行到m_resultView->OnInitialUpdate();时
它不先跳到CResultView的OnInitialUpdate里头然后再去执行,而是直接跳到viewcore里面的OnInitialUpdate执行, 这里执行完它也不回去执行CResultView的OnInitialUpdate而是直接执行了m_resultView->OnInitialUpdate();下面的语句return TRUE; 去了
这样就等于CResultView的OnInitialUpdate没有执行


然后刚刚去新建了一个测试用的, 如果CResultView直接继承自CView的话, 那么执行到m_resultView->OnInitialUpdate();时,它先跳转到CResultView的OnInitialUpdate()的下面的第一个 { ,然后再去跳转到CView的OnInitialUpdate, 执行完了,还会跳回来执行, CResultView的OnInitialUpdate()中余下的内容, 但是如果CResultView本身继承一个自己写的View类,而这个View类也是继承自CView类, 那么执行到m_resultView->OnInitialUpdate();这里时, 它直接跳转到viewcore中的CView 的OnInitialUpdate 并且执行完了之后不再回来执行 CResultView的OnInitialUpdate() ,而是直接走到m_resultView->OnInitialUpdate();下面的语句去了,
不知道为什么, 求高手帮忙解释一下, 谢谢
...全文
445 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
小龙王2010 2013-09-09
  • 打赏
  • 举报
回复
引用 10 楼 hdt 的回复:
感觉还是你没有写对那几句宏的问题,建议你看一下深入浅出mfc
好吧, 谢谢你啊,
真相重于对错 2013-09-09
  • 打赏
  • 举报
回复
感觉还是你没有写对那几句宏的问题,建议你看一下深入浅出mfc
小龙王2010 2013-09-09
  • 打赏
  • 举报
回复
引用 6 楼 hdt 的回复:
我可能记错了oninitupdate应该不是消息处理函数。 你大致贴一下你的代码?
CResultView类, 然后直接绑定在对话框中静态文本控件上, 代码如下:
UINT TargetCtrlID = IDC_RESULT_STATIC;
	CWnd *pWnd = this->GetDlgItem(TargetCtrlID);
	CRect RectTargetCtrl;
	pWnd->GetWindowRect(RectTargetCtrl);

	 m_pFrame = (CFrameWnd*)pWnd;
	 m_resultView = new CResultView();
	m_resultView = (CResultView*) RUNTIME_CLASS(CResultView)->CreateObject();

	CCreateContext context;
	context.m_pCurrentFrame = m_pFrame;
	context.m_pLastView = m_resultView;
	context.m_pNewDocTemplate = NULL;
	context.m_pNewViewClass = NULL;

	m_resultView->Create(NULL,NULL,WS_CHILD|WS_VISIBLE,RectTargetCtrl,m_pFrame,TargetCtrlID,&context);
	m_resultView->CenterWindow();
	//m_resultView->SetScrollSizes(MM_TEXT,CSize(RectTargetCtrl.Width(),RectTargetCtrl.Height()));

	m_resultView->OnInitialUpdate();

	return TRUE;  
CResultview中只有 OnInitialUpdate()修改了一下,其它都是自动生成,修改代码如下: void CResultView::OnInitialUpdate() { //CView::OnInitialUpdate(); CZoomView::OnInitialUpdate(); CSize sizeTotal; sizeTotal.cx = sizeTotal.cy = 1500; // Initialize the CZoomView class SetZoomSizes(sizeTotal); //SetScrollSizes(MM_TEXT,sizeTotal); } 然后报错, 因为要在视图上使用onDraw绘制图像的时候需要先调用这个OnInitialUpdate来初始化, 程序运行直接报错, 提示没有调用这个函数, 单步跟踪 发现它直接同viewcore.cpp执行了OnInitialUpdate就走了,再也没回来执行下面的语句了
真相重于对错 2013-09-09
  • 打赏
  • 举报
回复
贴出你的view类的OninitUpadte代码?
小龙王2010 2013-09-09
  • 打赏
  • 举报
回复
引用 5 楼 hdt 的回复:
不管你继承什么那几个宏是必须写的,否则无法利用mfc的消息处理机制
但是如果直接继承于CScrollView 或者CView的话, 就可以了呢? 像新建的测试用例一样,为什么呢? 但是我不能直接继承这些顶层的类,我需要修改一下, 改成定制化的CZoomview,然后以它为父类派生其他子类,那这可怎么办呢? 是不是直接继承于CScrollView 或者CView的话 这几个宏就直接生成了,而继承自己的CZoomview,他就没有这几个宏生成呢?
真相重于对错 2013-09-09
  • 打赏
  • 举报
回复
我可能记错了oninitupdate应该不是消息处理函数。 你大致贴一下你的代码?
真相重于对错 2013-09-09
  • 打赏
  • 举报
回复
不管你继承什么那几个宏是必须写的,否则无法利用mfc的消息处理机制
小龙王2010 2013-09-09
  • 打赏
  • 举报
回复
引用 3 楼 hdt 的回复:
你怎么继承cview的? OnInitialUpdate();是事件处理函数,而mfc不是通过c++继承机制来调用这些事件处理函数的 它有几个宏(我很久没用mfc了,具体记不清楚了),是必须写的
OnInitialUpdate是虚函数 通过类属性添加的, 我没有直接继承CView , 测试用例继承于CScrollView 而项目本身的用例继承自自定义的CZoomView类,而CZoomView又是继承于CSrollView类
真相重于对错 2013-09-09
  • 打赏
  • 举报
回复
你怎么继承cview的? OnInitialUpdate();是事件处理函数,而mfc不是通过c++继承机制来调用这些事件处理函数的 它有几个宏(我很久没用mfc了,具体记不清楚了),是必须写的
小龙王2010 2013-09-09
  • 打赏
  • 举报
回复
引用 1 楼 hdt 的回复:
感觉你写的mfc继承有问题
那怎么分析是哪里有问题呢、? 单步跟踪的时候,它根本就不进去, 都不知道咋办/....
真相重于对错 2013-09-09
  • 打赏
  • 举报
回复
感觉你写的mfc继承有问题
小龙王2010 2013-09-09
  • 打赏
  • 举报
回复
引用 10 楼 hdt 的回复:
感觉还是你没有写对那几句宏的问题,建议你看一下深入浅出mfc
加入,深入浅出MFC第三章的 IMPLIMENT_DYNAMIC 宏,解决问题, 因为视图类是动态创建的, 所以需要这个宏来标识一下才行

16,472

社区成员

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

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

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