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

2009-08-28 15:37

 

动态创建视图时候 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窗口的子窗口。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值