From: boca4711 <boc...@us...> - 2004-11-01 14:34:41
|
Update of /cvsroot/anyedit/AnyEditToolkit/GuiLib In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv1035/GuiLib Modified Files: GuiTabWnd.cpp GuiTabWnd.h Log Message: - Added flickerfree drawing - ShowTitle send ID_GUI_SHOWTITLE instead of WM_SHOWTITLE to parent window - AddTab calls ShowTitle - DeleteTab shows correct window after deletion - Registered message GUITK_CHANGE_ACTIVE_TAB is send when the current tab is changed Index: GuiTabWnd.h =================================================================== RCS file: /cvsroot/anyedit/AnyEditToolkit/GuiLib/GuiTabWnd.h,v retrieving revision 1.6 retrieving revision 1.7 diff -C2 -d -r1.6 -r1.7 *** GuiTabWnd.h 20 Oct 2004 16:27:27 -0000 1.6 --- GuiTabWnd.h 1 Nov 2004 14:34:28 -0000 1.7 *************** *** 63,74 **** void SetTypeTab(TypeTab Type=TYPE_NORMAL); void virtual Drawtabs(CDC* dc); ! void Addtab(CWnd* pParent, CString lpMsg, UINT uIcon, LPCTSTR lpcsTooltip = NULL); void SetImageList(UINT nBitmapID, int cx, int nGrow, COLORREF crMask); void RecalLayout(); virtual void AjustTabs(); ! void SetCurtab(int m_numtab); int GetCurtab(); ! void DeleteTab(int m_numTab); ! void ShowTitle(CString m_Caption); CWnd* GetActiveWnd () const; CWnd* GetNumWnd(int m_numtab) const; --- 63,74 ---- void SetTypeTab(TypeTab Type=TYPE_NORMAL); void virtual Drawtabs(CDC* dc); ! void Addtab(CWnd* pParent, CString strTitle, UINT uIcon, LPCTSTR lpszTooltip = NULL); void SetImageList(UINT nBitmapID, int cx, int nGrow, COLORREF crMask); void RecalLayout(); virtual void AjustTabs(); ! void SetCurtab(int nTab); int GetCurtab(); ! void DeleteTab(int nTab); ! void ShowTitle(CString strCaption); CWnd* GetActiveWnd () const; CWnd* GetNumWnd(int m_numtab) const; *************** *** 129,132 **** --- 129,134 ---- }; + extern GUILIBDLLEXPORT UINT GUITK_CHANGE_ACTIVE_TAB; + ///////////////////////////////////////////////////////////////////////////// Index: GuiTabWnd.cpp =================================================================== RCS file: /cvsroot/anyedit/AnyEditToolkit/GuiLib/GuiTabWnd.cpp,v retrieving revision 1.7 retrieving revision 1.8 diff -C2 -d -r1.7 -r1.8 *** GuiTabWnd.cpp 20 Oct 2004 16:27:27 -0000 1.7 --- GuiTabWnd.cpp 1 Nov 2004 14:34:28 -0000 1.8 *************** *** 22,35 **** ****************************************************************************/ - - - - - #include "stdafx.h" #include "GuiTabWnd.h" #include "GuiBasetab.h" ! #ifdef _DEBUG --- 22,30 ---- ****************************************************************************/ #include "stdafx.h" #include "GuiTabWnd.h" #include "GuiBasetab.h" ! #include "memdc.h" #ifdef _DEBUG *************** *** 45,48 **** --- 40,45 ---- #define DEFAULT_FLAT 18 + UINT GUITK_CHANGE_ACTIVE_TAB = ::RegisterWindowMessage (_T("GUITK_ON_CHANGE_ACTIVE_TAB")); + CGuiTabWnd::CGuiTabWnd() { *************** *** 107,111 **** --- 104,110 ---- m_TypeTab=Type; } + //**************************************************************************** + /// Erase background of tab control. BOOL CGuiTabWnd::OnEraseBkgnd(CDC* pDC) { *************** *** 117,123 **** CRect m_rect; GetClientRect(m_rect); ! pDC->FillRect(m_rect,&cbr); cbr.DeleteObject(); - } return TRUE; --- 116,121 ---- CRect m_rect; GetClientRect(m_rect); ! pDC->FillRect(m_rect, &cbr); cbr.DeleteObject(); } return TRUE; *************** *** 136,214 **** } void CGuiTabWnd::OnPaint() { ! CPaintDC dc(this); // device context for painting ! if (m_Numtabs <=0) return; ! CBrush cbr; ! CRect m_rectDraw; ! CGuiTab* ct=(CGuiTab*) m_pArray[m_iSelectTab]; ! if (m_alnTab!=ALN_TOP) ! cbr.CreateSolidBrush((GuiDrawLayer::m_Style== GUISTYLE_XP)?GuiDrawLayer::GetRGBColorTabs(): ct->m_clrHtab); ! else ! cbr.CreateSolidBrush(GuiDrawLayer::m_Style == GUISTYLE_XP?GuiDrawLayer::GetRGBColorFace(GuiDrawLayer::m_Style):ct->m_clrHtab); ! GetClientRect(m_rectCliente); ! m_rectTab=m_rectCliente; ! m_rectDraw=m_rectCliente; ! if (m_alnTab==ALN_BOTTOM) ! m_rectDraw.bottom=m_rectCliente.bottom-(m_sizeImag.cy+SPACE_TAB+2); ! else ! m_rectDraw.top=m_rectCliente.top+(m_sizeImag.cy+SPACE_TAB+2); ! if (m_style != S3D) //si son carpetas estilo excel o tabbed como devstudio 7 ! { ! if (m_alnTab==ALN_BOTTOM) ! { ! m_rectCliente.bottom=m_rectCliente.bottom-(DEFAULT_FLAT); ! m_rectTab.top=m_rectCliente.bottom+2; ! } else { ! m_rectTab.bottom=m_rectCliente.top+(DEFAULT_FLAT)+3; } - } ! if (m_alnTab!=ALN_TOP) ! { ! dc.FillRect(m_rectTab,&cbr); ! m_rectDraw.left+=1; ! dc.Draw3dRect(m_rectDraw,GuiDrawLayer::GetRGBColorShadow(GuiDrawLayer::m_Style),GuiDrawLayer::GetRGBColorShadow(GuiDrawLayer::m_Style)); ! if (GuiDrawLayer::m_Style!= GUISTYLE_XP) { ! //eliminar la linea inferior ! m_rectDraw.top=m_rectDraw.bottom-1; ! m_rectDraw.left+=1; ! m_rectDraw.right-=1; ! dc.Draw3dRect(m_rectDraw,ct->m_clrHtab,ct->m_clrHtab); } ! m_rectDraw.left-=1; ! } ! else ! { ! CRect rc=m_rectDraw; ! for (int i=0; i< 2; i++) { ! dc.Draw3dRect(rc,GuiDrawLayer::GetRGBColorFace(GuiDrawLayer::m_Style),GuiDrawLayer::GetRGBColorFace(GuiDrawLayer::m_Style)); ! rc.DeflateRect(1,1); } ! rc.InflateRect(3,3); ! dc.Draw3dRect(m_rectDraw,GuiDrawLayer::GetRGBColorShadow(GuiDrawLayer::m_Style),GuiDrawLayer::GetRGBColorShadow(GuiDrawLayer::m_Style)); ! rc=m_rectDraw; ! rc.bottom=rc.top+3; ! dc.FillRect(rc,&cbr); } - - - cbr.DeleteObject (); - Drawtabs(&dc); - } - - BOOL CGuiTabWnd::Create(DWORD dwStyle, const RECT& rect, CWnd* pParentWnd, UINT nID) { --- 134,216 ---- } + /// Paint tab control void CGuiTabWnd::OnPaint() { + CRect rect; + if (GetUpdateRect(&rect, FALSE)) + { + CPaintDC dc(this); // device context for painting ! CMemDC memDC(&dc, &rect); ! if (m_Numtabs <= 0) return; ! CBrush cbr; ! CRect m_rectDraw; ! CGuiTab* ct=(CGuiTab*) m_pArray[m_iSelectTab]; ! if (m_alnTab != ALN_TOP) ! cbr.CreateSolidBrush((GuiDrawLayer::m_Style== GUISTYLE_XP) ? GuiDrawLayer::GetRGBColorTabs() : ct->m_clrHtab); ! else ! cbr.CreateSolidBrush(GuiDrawLayer::m_Style == GUISTYLE_XP ? GuiDrawLayer::GetRGBColorFace(GuiDrawLayer::m_Style) : ct->m_clrHtab); ! GetClientRect(m_rectCliente); ! m_rectTab = m_rectCliente; ! m_rectDraw = m_rectCliente; ! if (m_alnTab == ALN_BOTTOM) ! m_rectDraw.bottom = m_rectCliente.bottom - (m_sizeImag.cy + SPACE_TAB + 2); else + m_rectDraw.top = m_rectCliente.top + (m_sizeImag.cy + SPACE_TAB + 2); + + if (m_style != S3D) //si son carpetas estilo excel o tabbed como devstudio 7 { ! if (m_alnTab == ALN_BOTTOM) ! { ! m_rectCliente.bottom = m_rectCliente.bottom - (DEFAULT_FLAT); ! m_rectTab.top = m_rectCliente.bottom + 2; ! } ! else ! { ! m_rectTab.bottom = m_rectCliente.top + (DEFAULT_FLAT) + 3; ! } } ! if (m_alnTab != ALN_TOP) { ! memDC.FillRect(m_rectTab, &cbr); ! m_rectDraw.left += 1; ! memDC.Draw3dRect(m_rectDraw, GuiDrawLayer::GetRGBColorShadow(GuiDrawLayer::m_Style), GuiDrawLayer::GetRGBColorShadow(GuiDrawLayer::m_Style)); ! if (GuiDrawLayer::m_Style != GUISTYLE_XP) ! { ! //eliminar la linea inferior ! m_rectDraw.top = m_rectDraw.bottom - 1; ! m_rectDraw.left += 1; ! m_rectDraw.right -= 1; ! memDC.Draw3dRect(m_rectDraw, ct->m_clrHtab, ct->m_clrHtab); + } + m_rectDraw.left -= 1; } ! else { ! CRect rc = m_rectDraw; ! for (int i = 0; i < 2; i++) ! { ! memDC.Draw3dRect(rc, GuiDrawLayer::GetRGBColorFace(GuiDrawLayer::m_Style), GuiDrawLayer::GetRGBColorFace(GuiDrawLayer::m_Style)); ! rc.DeflateRect(1, 1); ! } ! ! rc.InflateRect(3, 3); ! memDC.Draw3dRect(m_rectDraw, GuiDrawLayer::GetRGBColorShadow(GuiDrawLayer::m_Style), GuiDrawLayer::GetRGBColorShadow(GuiDrawLayer::m_Style)); ! rc = m_rectDraw; ! rc.bottom = rc.top+3; ! memDC.FillRect(rc, &cbr); } ! cbr.DeleteObject(); ! Drawtabs(&memDC); + DefWindowProc(WM_PAINT, (WPARAM)memDC.m_hDC, (LPARAM)0); } } BOOL CGuiTabWnd::Create(DWORD dwStyle, const RECT& rect, CWnd* pParentWnd, UINT nID) { *************** *** 230,234 **** } - void CGuiTabWnd::RecalLayout() { --- 232,235 ---- *************** *** 288,292 **** } - void CGuiTabWnd::AjustTabs() { --- 289,292 ---- *************** *** 578,614 **** } ! void CGuiTabWnd::ShowTitle(CString m_Caption) { ! if (m_ActualTitle==TRUE) { ! CWnd* pParent=GetParent(); ! pParent->SetWindowText(m_Caption); ! pParent->SendMessage(WM_COMMAND, WM_SHOWTITLE); } - } /// Add tab to tab control. ! void CGuiTabWnd::Addtab(CWnd *pParent, CString lpMsg, UINT uIcon, LPCTSTR lpcsTooltip) { ASSERT_VALID(pParent); ! m_pArray.SetAtGrow(m_Numtabs,new CGuiTab(pParent,lpMsg,uIcon)); ! if (m_alnTab!=ALN_TOP || m_TypeTab == TYPE_NORMAL) { ! if (m_Numtabs==0) pParent->ShowWindow(SW_SHOW); else pParent->ShowWindow(SW_HIDE); ! m_iSelectTab=0; } else ! m_iSelectTab=m_Numtabs; m_Numtabs++; //assign color ! CGuiTab* ctn=(CGuiTab*) m_pArray[m_Numtabs-1]; ! GuiDrawLayer::GetNextColor(m_Numtabs,ctn->m_clrLTab,ctn->m_clrHtab); ! if (m_alnTab==ALN_TOP && m_TypeTab != TYPE_NORMAL) { pParent->ShowWindow(SW_SHOWMAXIMIZED); --- 578,619 ---- } ! ! /// Set title of parent window. ! void CGuiTabWnd::ShowTitle(CString strCaption) { ! if (m_ActualTitle == TRUE) { ! CWnd* pParent = GetParent(); ! pParent->SetWindowText(strCaption); ! pParent->SendMessage(WM_COMMAND, ID_GUI_SHOWTITLE); } } /// Add tab to tab control. ! void CGuiTabWnd::Addtab(CWnd *pParent, CString strTitle, UINT uIcon, LPCTSTR lpszTooltip) { ASSERT_VALID(pParent); ! m_pArray.SetAtGrow(m_Numtabs, new CGuiTab(pParent, strTitle, uIcon)); ! if (m_alnTab != ALN_TOP || m_TypeTab == TYPE_NORMAL) { ! if (m_Numtabs == 0) ! { ! // first tab is added pParent->ShowWindow(SW_SHOW); + ShowTitle(strTitle); + } else pParent->ShowWindow(SW_HIDE); ! m_iSelectTab = 0; } else ! m_iSelectTab = m_Numtabs; m_Numtabs++; //assign color ! CGuiTab* ctn = (CGuiTab*) m_pArray[m_Numtabs-1]; ! GuiDrawLayer::GetNextColor(m_Numtabs, ctn->m_clrLTab, ctn->m_clrHtab); ! if (m_alnTab == ALN_TOP && m_TypeTab != TYPE_NORMAL) { pParent->ShowWindow(SW_SHOWMAXIMIZED); *************** *** 617,634 **** if (m_style == S3D || m_TypeTab == TYPE_MDI) { ! if (lpcsTooltip != NULL) ! CToolTip.AddTool(this, lpcsTooltip, CRect(0,0,0,0), m_Numtabs); else ! CToolTip.AddTool(this, lpMsg, CRect(0,0,0,0), m_Numtabs); } RecalLayout(); } ! ! void CGuiTabWnd::DeleteTab(int m_numtab) { ! if (m_numtab < m_Numtabs) { ! CGuiTab* ctn = (CGuiTab*) m_pArray[m_numtab]; if (m_alnTab != ALN_TOP) ASSERT_VALID(ctn->pParent); --- 622,639 ---- if (m_style == S3D || m_TypeTab == TYPE_MDI) { ! if (lpszTooltip != NULL) ! CToolTip.AddTool(this, lpszTooltip, CRect(0,0,0,0), m_Numtabs); else ! CToolTip.AddTool(this, strTitle, CRect(0,0,0,0), m_Numtabs); } RecalLayout(); } ! /// Remove tab with number nTab. ! void CGuiTabWnd::DeleteTab(int nTab) { ! if (nTab < m_Numtabs) { ! CGuiTab* ctn = (CGuiTab*) m_pArray[nTab]; if (m_alnTab != ALN_TOP) ASSERT_VALID(ctn->pParent); *************** *** 638,656 **** delete ctn; m_Numtabs--; ! m_pArray.RemoveAt(m_numtab, 1); if (m_Numtabs > 0) { ! if (m_iSelectTab == m_numtab) { m_iSelectTab = m_iSelectTab-1; ! if (m_iSelectTab< 0) m_iSelectTab = 0; ! CGuiTab* ctn =(CGuiTab*) m_pArray[m_iSelectTab]; CWnd* pParentNew = ctn->pParent; ASSERT_VALID(pParentNew); pParentNew->ShowWindow(SW_SHOW); } else { ! if (m_iSelectTab > m_numtab) { m_iSelectTab--; --- 643,663 ---- delete ctn; m_Numtabs--; ! m_pArray.RemoveAt(nTab, 1); if (m_Numtabs > 0) { ! if (m_iSelectTab == nTab) { m_iSelectTab = m_iSelectTab-1; ! if (m_iSelectTab < 0) ! m_iSelectTab = 0; ! CGuiTab* ctn = (CGuiTab*) m_pArray[m_iSelectTab]; CWnd* pParentNew = ctn->pParent; ASSERT_VALID(pParentNew); pParentNew->ShowWindow(SW_SHOW); + pParentNew->BringWindowToTop(); } else { ! if (m_iSelectTab > nTab) { m_iSelectTab--; *************** *** 659,663 **** RecalLayout(); } ! } } --- 666,670 ---- RecalLayout(); } ! GetParent()->SendMessage (GUITK_CHANGE_ACTIVE_TAB, m_iSelectTab); } } *************** *** 671,686 **** } ! ! void CGuiTabWnd::SetCurtab(int m_numtab) { ! if (m_numtab < m_Numtabs && m_numtab != m_iSelectTab ) { ! CGuiTab* ctn=(CGuiTab*) m_pArray[m_numtab]; ! CWnd* pParentNew= ctn->pParent; ! CGuiTab* ct =(CGuiTab*) m_pArray[m_iSelectTab]; ! CWnd* pParentActual=ct->pParent; ASSERT_VALID(pParentNew); ASSERT_VALID(pParentActual); ! if (m_alnTab==ALN_TOP && m_TypeTab != TYPE_NORMAL) { pParentNew->BringWindowToTop(); --- 678,693 ---- } ! /// Set current tab. ! void CGuiTabWnd::SetCurtab(int nTab) { ! if (nTab < m_Numtabs && nTab != m_iSelectTab ) { ! CGuiTab* ctn = (CGuiTab*) m_pArray[nTab]; ! CWnd* pParentNew = ctn->pParent; ! CGuiTab* ct = (CGuiTab*) m_pArray[m_iSelectTab]; ! CWnd* pParentActual = ct->pParent; ASSERT_VALID(pParentNew); ASSERT_VALID(pParentActual); ! if (m_alnTab == ALN_TOP && m_TypeTab != TYPE_NORMAL) { pParentNew->BringWindowToTop(); *************** *** 692,703 **** } ! m_iSelectTab=m_numtab; ! if (m_alnTab==ALN_TOP) AjustTabs(); Invalidate(); UpdateWindow(); - } - } --- 699,708 ---- } ! m_iSelectTab = nTab; ! if (m_alnTab == ALN_TOP) AjustTabs(); Invalidate(); UpdateWindow(); } } *************** *** 707,728 **** } ! void CGuiTabWnd::OnLButtonDown(UINT nFlags, CPoint point) { // TODO: Add your message handler code here and/or call default CWnd::OnLButtonDown(nFlags, point); ! for (int iCont=0; iCont< m_Numtabs;iCont++) { ! CGuiTab* ct=(CGuiTab*) m_pArray[iCont]; if (ct->rect.PtInRect(point) != 0) { SetCurtab(iCont); ShowTitle(ct->lpMsg); ! m_InTab=TRUE; return; } - } - } --- 712,732 ---- } ! /// Handle mouse click with left button void CGuiTabWnd::OnLButtonDown(UINT nFlags, CPoint point) { // TODO: Add your message handler code here and/or call default CWnd::OnLButtonDown(nFlags, point); ! for (int iCont = 0; iCont < m_Numtabs; iCont++) { ! CGuiTab* ct = (CGuiTab*) m_pArray[iCont]; if (ct->rect.PtInRect(point) != 0) { SetCurtab(iCont); + GetParent()->SendMessage (GUITK_CHANGE_ACTIVE_TAB, iCont); ShowTitle(ct->lpMsg); ! m_InTab = TRUE; return; } } } |