CView给我的一个反思,对MFC的理解需要深入
2014-01-06 11:16
211 查看
报错的内容:
用鼠标单击视图的时候,就会出现Assert错误,具体为
CView类的onmouseActive函数中
ASSERT(pParentFrame == pDesktopWnd || pDesktopWnd->IsChild(pParentFrame))
解决方法:
继承类中响应WM_MOUSEACTIVATE
int CMyView::OnMouseActivate(CWnd* pDesktopWnd, UINT nHitTest, UINT message)
{
return CWnd::OnMouseActivate(pDesktopWnd, nHitTest, message);
}
具体原因分析:
在对话框程序上pDesktopWnd是对话框指针,视图类的父窗口也是对话框指针,那么ASSERT(pParentFrame == pDesktopWnd || pDesktopWnd->IsChild(pParentFrame))这句就不会出错,因为CView::GetParentFrame()的往他的祖先窗口中上溯,直到找到一个是FrameWnd类型的窗口之后,
返回这个窗口对象的指针(如果没有的话,返回NULL),在对话框程序中这么要么为NULL,要么为对话框指针;但是假如是单文档程序呢,情况就不一样了,CView::GetParentFrame()必定是返回单文档程序的框架指针,而pDesktopWnd指针则是对话框指针,二者不相等,那么我们再看看pDesktopWnd->IsChild(pParentFrame)是否为TRUE,很显然框架窗口不可能是对话框窗口的父窗口。
《在没有文档的情况下使用CView及其派生类》/article/2877157.html
《有关在对话框上创建视图上的再探索》/article/6283108.html
用鼠标单击视图的时候,就会出现Assert错误,具体为
CView类的onmouseActive函数中
ASSERT(pParentFrame == pDesktopWnd || pDesktopWnd->IsChild(pParentFrame))
解决方法:
继承类中响应WM_MOUSEACTIVATE
int CMyView::OnMouseActivate(CWnd* pDesktopWnd, UINT nHitTest, UINT message)
{
return CWnd::OnMouseActivate(pDesktopWnd, nHitTest, message);
}
具体原因分析:
在对话框程序上pDesktopWnd是对话框指针,视图类的父窗口也是对话框指针,那么ASSERT(pParentFrame == pDesktopWnd || pDesktopWnd->IsChild(pParentFrame))这句就不会出错,因为CView::GetParentFrame()的往他的祖先窗口中上溯,直到找到一个是FrameWnd类型的窗口之后,
返回这个窗口对象的指针(如果没有的话,返回NULL),在对话框程序中这么要么为NULL,要么为对话框指针;但是假如是单文档程序呢,情况就不一样了,CView::GetParentFrame()必定是返回单文档程序的框架指针,而pDesktopWnd指针则是对话框指针,二者不相等,那么我们再看看pDesktopWnd->IsChild(pParentFrame)是否为TRUE,很显然框架窗口不可能是对话框窗口的父窗口。
《在没有文档的情况下使用CView及其派生类》/article/2877157.html
《有关在对话框上创建视图上的再探索》/article/6283108.html
相关文章推荐
- 【Solidity】1.一个Solidity源文件的布局 - 深入理解Solidity
- PHP Notice: session_start(): ps_files_cleanup_dir-深入理解PHP原理之Session Gc的一个小概率Notice
- 深入理解php底层:php一个生命周期
- java之实现Cloneable接口的详解,克隆一个对象--对应有浅克隆和深克隆,概念结合代码深入理解
- 深入理解PHP内存管理之一个低概率Core的分析
- 深入理解计算机系统中一个echo()函数的C语言实现
- 深入理解Python中协程的应用机制: 使用纯Python来实现一个操作系统吧!!
- 深入理解MFC子类化(二)
- MFC中,Release版出错Debug版不出错的一个最常见原因之深入剖析
- 一个老测试员对测试理解(需要掌握哪些知识)
- 深入理解Struts,实现一个简单的MVC
- rss的普及需要一个容易理解的中文名字,叫“新闻源”如何?
- 一个深入理解JAVA传统线程对象创建的例子
- android MotionEvent中getX()和getRawX()的区别 这个需要深入理解一下
- 深入理解计算机系统读书笔记之一个简单汇编程序的调试分析
- 深入理解Android音视频同步机制(五)如何从零开始写一个音视频同步的播放器
- 深入理解MFC子类化
- 深入理解Python中协程的应用机制: 使用纯Python来实现一个操作系统吧!!
- 通过一个工具类更深入理解动态代理和Threadlocal
- 对“三层结构”的深入理解——怎样才算是一个符合“三层结构”的Web应用程序?