有关在对话框上创建视图上的再探索
2009-12-05 11:44
211 查看
作者:朱金灿
来源:http://www.cnblogs.com/clever101
本文拙文《在对话框上创建视图的方法总结》,有网友朋友来邮件反映:在对话框上可以成功创建视图,但是用鼠标单击视图的时候,就会出现Assert错误,说ViewCore.cpp 252行中有错。具体是:CView类的onmouseActive函数中ASSERT(pParentFrame == pDesktopWnd || pDesktopWnd->IsChild(pParentFrame)),出错!
下班回家我决心亲自试验一番,我在我的对话框程序上添加了各种鼠标消息,包括WM_LBUTTONDOWN、WM_MOUSEMOVE和WM_LBUTTONUP,但是都没有出错。我一下抓瞎了,只好上论坛发贴求助,但是一时之间也没多少人回应。我只好直接在google上搜索ASSERT(pParentFrame == pDesktopWnd || pDesktopWnd->IsChild(pParentFrame))这个断言错误。终于搜到了一篇相关文章《如何在没有文档的情况下使用CView及其派生类》。阅读之下我算是明白了为什么会出错。首先我们明确断言错误是在CView::OnMouseActivate函数上发生的,那么让我们看看MSDN对OnMouseActivate函数的解释:
The framework calls this member function when the cursor is in an inactive window and the user presses a mouse button.
大意是当光标在一个非活动窗口和用户按下鼠标时框架就会调用这个消息。那我们再看看CView::OnMouseActivate函数的源码:
代码int CMyView::OnMouseActivate(CWnd* pDesktopWnd, UINT nHitTest, UINT message)
{
// TODO: 在此添加消息处理程序代码和/或调用默认值
// return CView::OnMouseActivate(pDesktopWnd, nHitTest, message);
return CWnd::OnMouseActivate(pDesktopWnd, nHitTest, message);
}
结果测试,这种办法也完全可行。
后来我检讨了自己思路,我发现了自己开始的思路是完全错误的,我觉得既然是ASSERT(pParentFrame ==pDesktopWnd||pDesktopWnd->IsChild(pParentFrame))出错了,我就应该先分析这句断言为什么出错,而不是忙着去搜索资料。这个道理有点像前天在CCTV 6看到的那部《危机时刻》的一个情节:一车雷管翻车了,排爆大队的副大队长忙着怎么去封锁铁路和疏散村民,而水平更高的大队长却先分析出翻车的是火雷管,然后对症下药地调来一辆消防车把雷管淋湿,一举化除危机。
参考文献:
如何在没有文档的情况下使用CView及其派生类
来源:http://www.cnblogs.com/clever101
本文拙文《在对话框上创建视图的方法总结》,有网友朋友来邮件反映:在对话框上可以成功创建视图,但是用鼠标单击视图的时候,就会出现Assert错误,说ViewCore.cpp 252行中有错。具体是:CView类的onmouseActive函数中ASSERT(pParentFrame == pDesktopWnd || pDesktopWnd->IsChild(pParentFrame)),出错!
下班回家我决心亲自试验一番,我在我的对话框程序上添加了各种鼠标消息,包括WM_LBUTTONDOWN、WM_MOUSEMOVE和WM_LBUTTONUP,但是都没有出错。我一下抓瞎了,只好上论坛发贴求助,但是一时之间也没多少人回应。我只好直接在google上搜索ASSERT(pParentFrame == pDesktopWnd || pDesktopWnd->IsChild(pParentFrame))这个断言错误。终于搜到了一篇相关文章《如何在没有文档的情况下使用CView及其派生类》。阅读之下我算是明白了为什么会出错。首先我们明确断言错误是在CView::OnMouseActivate函数上发生的,那么让我们看看MSDN对OnMouseActivate函数的解释:
The framework calls this member function when the cursor is in an inactive window and the user presses a mouse button.
大意是当光标在一个非活动窗口和用户按下鼠标时框架就会调用这个消息。那我们再看看CView::OnMouseActivate函数的源码:
代码int CMyView::OnMouseActivate(CWnd* pDesktopWnd, UINT nHitTest, UINT message)
{
// TODO: 在此添加消息处理程序代码和/或调用默认值
// return CView::OnMouseActivate(pDesktopWnd, nHitTest, message);
return CWnd::OnMouseActivate(pDesktopWnd, nHitTest, message);
}
结果测试,这种办法也完全可行。
后来我检讨了自己思路,我发现了自己开始的思路是完全错误的,我觉得既然是ASSERT(pParentFrame ==pDesktopWnd||pDesktopWnd->IsChild(pParentFrame))出错了,我就应该先分析这句断言为什么出错,而不是忙着去搜索资料。这个道理有点像前天在CCTV 6看到的那部《危机时刻》的一个情节:一车雷管翻车了,排爆大队的副大队长忙着怎么去封锁铁路和疏散村民,而水平更高的大队长却先分析出翻车的是火雷管,然后对症下药地调来一辆消防车把雷管淋湿,一举化除危机。
参考文献:
如何在没有文档的情况下使用CView及其派生类
相关文章推荐
- [原创&交流]有关在对话框上创建视图上的再探索
- 有关在对话框上创建视图上的再探索
- 有关在对话框上创建视图上的再探索
- 有关在对话框上创建视图上的再探索
- 有关在对话框上创建视图上的再探索
- 在对话框上创建视图的方法总结
- 在对话框上创建视图的方法总结
- Android创建自定义视图列表对话框(数据库中的数据作为数据源,使用RecyclerView作为列表)
- 在对话框上创建视图的方法总结
- MFC小程序003------MFC使用WebBrowser组件,在对话框中创建滚动视图,动态创建一个静态文本控件并设置鼠标单击的消息响应
- 在对话框上创建视图的方法总结
- Android之使用AlertDialog.Builder类创建带列表的对话框和带自己所布局视图的对话框
- 在对话框上创建视图的报错-》ASSERT(pParentFrame == pDesktopWnd || pDesktopWnd->IsChild(pParentFrame))
- 在对话框上创建视图的方法总结
- 对话框上创建视图方法总结
- 在对话框上创建视图的方法总结
- Win32 API创建对话框DialogBox添加快捷键Accelerator的方式探索
- VC/MFC 在对话框中创建视图并在视图区添加ListCtrl控件
- 在对话框上创建视图的方法总结
- 对话框上如何创建视图