Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1186431
  • 博文数量: 181
  • 博客积分: 6155
  • 博客等级: 准将
  • 技术积分: 1805
  • 用 户 组: 普通用户
  • 注册时间: 2008-08-05 09:24
文章分类

全部博文(181)

文章存档

2015年(2)

2014年(3)

2013年(9)

2012年(29)

2011年(30)

2010年(36)

2009年(40)

2008年(32)

分类: C/C++

2011-09-06 13:44:29

动态创建视图时候 AfxCheckDialogTemplate执行出错

在mfc的sdi架构中,准备多做几个视图,试图类继承自formview,但在动态创建视图的时候出了错误,AfxCheckDialogTemplate执行出错。后来通过搜索发现cformview类关联对话框时候,资源必须具备child属性。

1.CFormView类关联的对话框资源必须具有Child属性

由CFormView派生的类,可以关联一个对话框资源。但该对话框资源必须在属性设定中Style选定[Child]属性,否则的话,
代码可以编译,但Debug运行会报告一个断言错误,跟踪代码,断言在:

#ifdef _DEBUG

    // dialog template must exist and be invisible with WS_CHILD set
    if (!_AfxCheckDialogTemplate(m_lpszTemplateName, TRUE))
    {
        ASSERT(FALSE);          // invalid dialog template name
        PostNcDestroy();        // cleanup if Create fails too soon
        return FALSE;
    }

#endif //_DEBUG

2.CFormView比较特殊,是一个父窗体嵌套了一个子窗体,所以,
CFormView类的派生类的实例不响应WM_CLOSE消息,仅仅响应WM_DESTROY消息。
另外,若要用代码关闭当前View,也不能直接:PostMessage(WM_CLOSE,0,0);
而必须先获取父窗体的指针,然后对父窗体发送WM_CLOSE消息才行,像这样:
GetParent()->PostMessage(WM_CLOSE,0,0);
才能够达到目的。
《深入浅出MFC》第八章461页图8-1清楚地说明了这种情况,View窗口是CChildFrame窗口的子窗口。

阅读(2565) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~