CHtmlView在vs2010/vs2017中崩溃问题的解决

博客讲述了在使用MFC类CHtmlViewExt时遇到的问题及解决方案。在VS2010中,关闭文档会导致程序崩溃,通过覆盖PostNcDestroy和OnDestroy函数解决了问题。而在VS2017中,同样的方法会导致崩溃,需要调整为不覆盖PostNcDestroy并修改OnDestroy的实现。此外,还发现打开文档时可能崩溃,通过覆盖OnSize函数解决了这个问题。
摘要由CSDN通过智能技术生成

定义MFC类CHtmlViewExt,继承CHtmlView。

1、在vs2010中,用CHtmlViewExt作为doc视图类,关闭文档时会导致程序崩溃。

解决方法:覆盖 PostNcDestroy、OnDestroy两个函数。

(1)覆盖PostNcDestroy()

void CHtmlViewExt::PostNcDestroy()
{
      //CHtmlView::PostNcDestroy();//注释掉自动生成的代码,防止CView 销毁自己导致关闭程序时崩溃
}
(2)覆盖OnDestroy()

void CHtmlViewExt::OnDestroy()
{
      //CHtmlView::OnDestroy();

      if (m_pBrowserApp)
      {
            m_pBrowserApp.Release();
            m_pBrowserApp = NULL;
      }
      CWnd::OnDestroy(); //跳过CView的OnDestroy
}

2、上述修改方法,在vs2017中会导致文档关闭时程序崩溃,修改方法:

(1)不覆盖PostNcDestroy()

void CHtmlViewExt::PostNcDestroy()
{
      CHtmlView::PostNcDestroy();//注释掉自动生成的代码,防止CView 销毁自己导致关闭程序时崩溃
}

(2)覆盖OnDestroy()

void CHtmlViewExt::OnDestroy()
{
      //CHtmlView::OnDestroy();

      if (m_pBrowserApp)
      {
            m_pBrowserApp.Release();
            m_pBrowserApp = NULL;
      }
      CHtmlView::OnDestroy(); 
}

3、在vs2017中,打开文档,调用OnOpenDocument()时,程序也会崩溃。修改方法:覆盖OnSize函数。

void CHtmlViewExt::OnSize(UINT nType, int cx, int cy)
{
    CFormView::OnSize(nType, cx, cy); //不能用CHtmlViewExt.OnSize()。
}
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

CDMX7Y

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值