GuiMDITabbed.cpp
上传用户:zhanglf88
上传日期:2013-11-19
资源大小:6036k
文件大小:4k
源码类别:

金融证券系统

开发平台:

Visual C++

  1. //-----------------------------------------------------------------------//
  2. // This is a part of the GuiLib MFC Extention.  //
  3. // Autor  :  Francisco Campos  //
  4. // (C) 2002 Francisco Campos <www.beyondata.com> All rights reserved     //
  5. // This code is provided "as is", with absolutely no warranty expressed  //
  6. // or implied. Any use is at your own risk.  //
  7. // You must obtain the author's consent before you can include this code //
  8. // in a software library.  //
  9. // If the source code in  this file is used in any application  //
  10. // then acknowledgement must be made to the author of this program  //
  11. // fcampos@tutopia.com  //
  12. //-----------------------------------------------------------------------//
  13. #include "stdafx.h"
  14. #include "afxpriv.h"
  15. #include "..headerguimditabbed.h"
  16. BEGIN_MESSAGE_MAP(CGuiMDITabbed, CGuiTabbed)
  17.   ON_MESSAGE(WM_SIZEPARENT, OnSizeParent)
  18.    ON_WM_TIMER()
  19. END_MESSAGE_MAP()
  20. LRESULT CGuiMDITabbed::OnSizeParent(WPARAM, LPARAM lParam)
  21. {
  22.    AFX_SIZEPARENTPARAMS* pParams = (AFX_SIZEPARENTPARAMS*)lParam;
  23.    CRect rc=pParams->rect;
  24.    pParams->rect.top += 24;
  25.    pParams->rect.left+=2;
  26.    pParams->rect.right-=1;
  27.    pParams->rect.bottom-=1;
  28.    MoveWindow(rc.left, rc.top , rc.Width(), rc.Height(), true);
  29.    CClientDC dc(this);
  30.    GetClientRect(rc);
  31.    dc.Draw3dRect(rc,GuiDrawLayer::GetRGBColorShadow(),GuiDrawLayer::GetRGBColorShadow());
  32.    return 0;
  33. }
  34. void CGuiMDITabbed::OnTimer(UINT nIDEvent) 
  35. {
  36. UpdateWindows();
  37. }
  38. CGuiMDITabbed::CGuiMDITabbed(void)
  39. {
  40. pParentWindow = NULL;
  41. }
  42. CGuiMDITabbed::~CGuiMDITabbed(void)
  43. {
  44. }
  45. void CGuiMDITabbed::OnScrollClose()
  46. {
  47. CWnd* pWnd=GetNumWnd(GetCurtab());
  48. if (pWnd==NULL) return;
  49. pWnd->SendMessage(WM_CLOSE);
  50. UpdateWindows();
  51. if (GetCurtab()== 0)
  52. GetParentFrame()->RecalcLayout();
  53. }
  54. void CGuiMDITabbed::UpdateWindows()
  55. {
  56. /* Modified by SunZhenyu
  57. SetTimer(1,200,NULL);
  58. */
  59. KillTimer(1);
  60. CWnd* pWnd=CWnd::FromHandle(::GetTopWindow(GetParentFrame()->GetSafeHwnd()));
  61. char ClassName[32];
  62. while (pWnd != NULL)
  63. {
  64. ::GetClassName(pWnd->GetSafeHwnd(),ClassName,32);
  65. CString szClassName=ClassName;
  66. if(szClassName=="MDIClient")
  67. break;
  68. pWnd=pWnd->GetNextWindow();
  69. }
  70. ASSERT(::IsWindow(pWnd->GetSafeHwnd()));
  71. //primero adicionar los nuevos
  72. CWnd* pChild= CWnd::FromHandle(::GetTopWindow(pWnd->GetSafeHwnd()));
  73. while(pChild != NULL)
  74. {
  75. CString m_Caption;
  76. pChild->GetWindowText(m_Caption);
  77. if (!m_Caption.IsEmpty()) 
  78. {
  79. if (!FindItem(pChild->GetSafeHwnd()))
  80. Addtab(pChild,m_Caption,-1);
  81. else
  82. UpdateCaption(pChild,m_Caption);
  83. }
  84. pChild= CWnd::FromHandle(::GetNextWindow(pChild->GetSafeHwnd(), GW_HWNDNEXT));
  85. }
  86. /* Modified by SunZhenyu */
  87. // get active child frame, modified 2003/6/19
  88. CMDIFrameWnd* pFrame = DYNAMIC_DOWNCAST(CMDIFrameWnd, GetParentFrame());
  89. CMDIChildWnd* pActiveChild = NULL;
  90. if( pFrame )
  91. pActiveChild = pFrame->MDIGetActive();
  92. // get active child frame, modified 2003/6/19
  93. //---eliminar las ventanas borradas
  94. int nNumtabs=GetCount();
  95. for (int i=0; i< nNumtabs; i++)
  96. {
  97. CWnd* pWnd=GetNumWnd(i);
  98. if (!::IsWindow(HWND(pWnd->GetSafeHwnd())))
  99. {
  100. DeleteTab(i);
  101. UpdateWindow();
  102. break;
  103. }
  104. /* Modified by SunZhenyu */
  105. // set cur tab by active child frame, modified 2003/6/19
  106. else if( pWnd->GetSafeHwnd() == pActiveChild->GetSafeHwnd() )
  107. {
  108. SetCurtab(i);
  109. }
  110. // set cur tab by active child frame, modified 2003/6/19
  111. }
  112. SetTimer(1,200,NULL);
  113. }