博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
MFC Feature Pack for Visual C++ 2008的BUG之一
阅读量:4007 次
发布时间:2019-05-24

本文共 1514 字,大约阅读时间需要 5 分钟。

  1. CMFCTabCtrl::EnableActiveTabCloseButton

用于在CMFCTabCtrl的Tab页显示一个关闭按钮,看看关闭按钮怎么实现:

 

  1. void  CMFCBaseTabCtrl::OnLButtonDown(UINT nFlags, CPoint point)
  2. {
  3.  m_bWindowPosChanged = FALSE;
  4.  CWnd::OnLButtonDown(nFlags, point);
  5.   if  (m_rectCloseButton.PtInRect(point))
  6.  {
  7.   m_bTabCloseButtonPressed = TRUE;
  8.   RedrawWindow(m_rectCloseButton);
  9.    return ;
  10.  }
  11. ...
  12.   void  CMFCBaseTabCtrl::OnLButtonUp(UINT nFlags, CPoint point)
  13. {
  14.   if  (m_bTabCloseButtonPressed)
  15.  {
  16.   m_bTabCloseButtonPressed = FALSE;
  17.   m_bTabCloseButtonHighlighted = FALSE;
  18.   RedrawWindow(m_rectCloseButton);
  19.    if  (m_rectCloseButton.PtInRect(point))
  20.   {
  21.    CWnd* pWndActive = GetActiveWnd();
  22.     if  (pWndActive != NULL)
  23.    {
  24.     pWndActive->SendMessage(WM_CLOSE);
  25.    }
  26.     return ;
  27.   }
  28.  }
  29. ...

应该就这些了。

在例子TabbedView中添加这个功能:

  1. int  CTabbedViewView::OnCreate(LPCREATESTRUCT lpCreateStruct) 
  2. {
  3.   if  (CTabView::OnCreate(lpCreateStruct) == -1)
  4.    return  -1;
  5.  AddView (RUNTIME_CLASS (CView1), _T( "Simple" ), 100);
  6.  AddView (RUNTIME_CLASS (CView2), _T( "List" ), 101);
  7.  AddView (RUNTIME_CLASS (CView3), _T( "Form" ), 102);
  8.  AddView (RUNTIME_CLASS (CView4), _T( "ScrollView" ), 102);
  9.  m_wndTabs.EnableActiveTabCloseButton();
  10.   return  0;
  11. }

然后点击一个页面上的关闭按钮,会发现这个tab页并没有消失,而切换到其他页面,程序就中断了,问题出在:

  1. BOOL  CMFCTabCtrl::SetActiveTab( int  iTab)
  2. {
  3. ...
  4.   if  (m_iActiveTab != -1 && m_bHideInactiveWnd)
  5.  {
  6.    //--------------------
  7.    // Hide active window:
  8.    //--------------------
  9.   CWnd* pWndActive = GetActiveWnd();
  10.    if  (pWndActive != NULL)
  11.   {
  12.    pWndActive->ShowWindow(SW_HIDE);
  13.   }
  14.  }

由于窗口已经销毁,而该Tab页仍然存在,所以m_iActiveTab就是被销毁的窗口所在页面,pWndActive是已经被销毁的窗口,自然调用其ShowWindow方法就出错了。

转载地址:http://ghwfi.baihongyu.com/

你可能感兴趣的文章
Spring JTA应用之JOTM配置
查看>>
spring JdbcTemplate 的若干问题
查看>>
Servlet和JSP的线程安全问题
查看>>
GBK编码下jQuery Ajax中文乱码终极暴力解决方案
查看>>
jQuery性能优化指南
查看>>
利用spring的mock类进行单元测试
查看>>
spring的beanFactory和factoryBean
查看>>
性能测试中用LambdaProbe监控Tomcat Tomcat和Probe的配置
查看>>
Java RMI之HelloWorld篇
查看>>
Oracle 物化视图
查看>>
利用VMware搭建虚拟开发环境及VMware虚拟机上网
查看>>
spring系列之 回调函数的使用
查看>>
Java中的枚举(一)
查看>>
Java中的枚举(二)
查看>>
request.getInputStream()读取post传递的xml文件问题
查看>>
用Java实现断点续传(HTTP)
查看>>
Oracle树查询及相关函数
查看>>
Struts2中配置Servlet详解
查看>>
weblogic10和hibernate3 冲突解决方案
查看>>
WebLogic部署SSH2项目的小结
查看>>