void CWorkTab::Drawtabs(CGDI* dc) { int m_StrPos = 0; BOOL m_ViewAlltab = TRUE; CRect m_rClient; CBrush cbr; CPen cp; cp.CreatePen(PS_SOLID, 1,::GetSysColor(COLOR_BTNSHADOW)); int m_ianchoScroll=::GetSystemMetrics(SM_CXHSCROLL) * 2; m_EnableR = TRUE; m_EnableL = TRUE; cbr.CreateSolidBrush(m_wd.GetRGBColorXP()); GetClientRect(m_rClient); CRect rectT = m_rectTab; rectT.right = m_btndesplaza.left; rectT.right += 4; dc->FillRect(rectT, &cbr); HPEN hPen = dc->SelectObject(&cp); dc->MoveTo(m_rectTab.left, m_rectTab.top); dc->LineTo(m_btndesplaza.right + 1, m_rectTab.top); dc->Draw3dRect(m_rClient, ::GetSysColor(COLOR_BTNSHADOW), ::GetSysColor(COLOR_BTNHIGHLIGHT)); if (!::IsWindow(m_toolBtn[0].GetSafeHwnd())) { CRect r = m_rectTab; r.right = r.left + 35; r.top += 1; // r.bottom-=1; if (!m_img.Create(IDB_GUI_DOCKBAR, 9, 11, RGB(255, 0, 255))) { //TRACE0("error imagelist"); } m_toolBtn[0].Create(GetSafeHwnd(),SCROLLLEFT, _T(""), WS_VISIBLE | WS_CHILD | BS_PUSHBUTTON | BS_OWNERDRAW, CRect(0, 0, 0, 0)); m_toolBtn[0].SetToolTip(_T("Scroll Left")); m_toolBtn[0].SethIcon(m_img.ExtractIcon(4)); m_toolBtn[0].ShowDark(FALSE); m_toolBtn[0].SetScrollButton(); m_toolBtn[1].Create(GetSafeHwnd(),SCROLLRIGHT, _T(""), WS_VISIBLE | WS_CHILD | BS_PUSHBUTTON | BS_OWNERDRAW, CRect(0, 0, 0, 0)); m_toolBtn[1].SetToolTip(_T("Scroll Right")); m_toolBtn[1].SethIcon(m_img.ExtractIcon(2)); m_toolBtn[1].ShowDark(FALSE); m_toolBtn[1].SetScrollButton(); } if (!::IsWindow(m_scroll.GetSafeHwnd())) { m_scroll.Create(GetSafeHwnd(),0L,NULL,WS_CHILD | WS_VISIBLE | SBS_HORZ, m_rectTab); } CSize szBtn_1 = m_toolBtn[0].GetSizeButton(); CSize szBtn_2 = m_toolBtn[0].GetSizeButton(); CRect rcSpin = CRect(0, 0, szBtn_1.cx + szBtn_2.cx + 2, szBtn_1.cy + szBtn_2.cy); m_StrPos = rcSpin.Width(); if ((m_btndesplaza.left < rcSpin.right) && ! m_btndesplaza.IsRectEmpty()) { m_btndesplaza.left = rcSpin.right + 5; m_btndesplaza.right = m_btndesplaza.left + 5; } PintaSeparador(dc); int m_Space = 8; int m_Pos = 10; int m_right = m_StrPos; if (m_iMinValRec - 26 > m_btndesplaza.left) // No existe suficioente espacio para los tabs { m_ViewAlltab = FALSE; // m_spin.EnableScrollBar(); if (m_PresLeft == TRUE) m_right += m_deplaza; if (m_PresRight == TRUE) m_right += m_deplaza; if (m_deplaza == 0) { m_EnableL = FALSE; m_EnableR = TRUE; //m_spin.EnableScrollBar(ESB_DISABLE_LTUP); } if ((m_iMinValRec + m_deplaza) - 26 <= m_btndesplaza.left) { //m_spin.EnableScrollBar(ESB_DISABLE_RTDN); m_EnableR = FALSE; m_EnableL = TRUE; } } else { m_EnableL = FALSE; m_EnableR = FALSE; // m_spin.EnableScrollBar(ESB_DISABLE_BOTH); m_ViewAlltab = TRUE; m_deplaza = 0; } CRect rectScroll; CRect rectRecorte; rectRecorte.left = m_rectTab.left + m_ianchoScroll; rectRecorte.top = m_rectTab.top; rectRecorte.bottom = m_rectTab.bottom; rectRecorte.right = m_btndesplaza.left; HRGN hRgn= CreateRectRgnIndirect(rectRecorte); dc->SelectClipRgn(hRgn); for (int iCont = 0; iCont < m_Numtabs; iCont++) { //; CTab* ctb = (CTab*)m_pArray[iCont]; CRect mrt = ctb->rect; int ancho = mrt.Width(); mrt.left = m_right; mrt.right = mrt.left + ancho; CPoint Coor[4]; // dibujar la hoja seleccionada if (iCont == 0) { dc->MoveTo(mrt.left, mrt.top); dc->LineTo((mrt.left) + m_rectTab.Height()/2, mrt.bottom - 1); dc->MoveTo((mrt.left) + m_rectTab.Height()/2, mrt.bottom - 1); dc->LineTo((mrt.right) - m_rectTab.Height()/2, mrt.bottom - 1); dc->MoveTo((mrt.right) - m_rectTab.Height()/2, mrt.bottom - 1); if (m_iSelectTab ==iCont) dc->LineTo(mrt.right - 2, mrt.top + 2); else dc->LineTo((mrt.right) - 3, mrt.top+ (m_rectTab.Height()/2)); m_right = mrt.right; } else { // Se dibuja la hoja siguiente a la seleccionada // no se dibuja toda la diagonal y no es la ultima hoja if (iCont - 1 == m_iSelectTab) { dc->MoveTo(mrt.left+ (m_rectTab.Height()/4) + 1, mrt.top + m_rectTab.Height()/2); dc->LineTo((mrt.left) + m_rectTab.Height()/2, mrt.bottom - 1); dc->MoveTo((mrt.left) + m_rectTab.Height()/2, mrt.bottom - 1); dc->LineTo((mrt.right) - m_rectTab.Height()/2, mrt.bottom - 1); dc->MoveTo((mrt.right) - m_rectTab.Height()/2, mrt.bottom - 1); if (iCont == m_Numtabs - 1) dc->LineTo((mrt.right - 2), mrt.top + 2); else dc->LineTo((mrt.right) - 3, mrt.top+ (m_rectTab.Height()/2)); } else { dc->MoveTo(mrt.left, mrt.top); dc->LineTo((mrt.left) + m_rectTab.Height()/2, mrt.bottom - 1); dc->MoveTo((mrt.left) + m_rectTab.Height()/2, mrt.bottom - 1); dc->LineTo((mrt.right) - m_rectTab.Height()/2, mrt.bottom - 1); dc->MoveTo((mrt.right) - m_rectTab.Height()/2, mrt.bottom - 1); if (iCont == m_iSelectTab || iCont == m_Numtabs - 1) dc->LineTo((mrt.right - 2), mrt.top + 2); else dc->LineTo((mrt.right) - 3, mrt.top + 3+ (m_rectTab.Height()/2)); } m_right = mrt.right; } if (iCont == m_iSelectTab) { Coor[0].x = mrt.left; Coor[0].y = mrt.top; Coor[1].x = (mrt.left) + m_rectTab.Height()/2; Coor[1].y = mrt.bottom - 1; Coor[2].x = (mrt.right) - m_rectTab.Height()/2; Coor[2].y = mrt.bottom - 1; Coor[3].x = (mrt.right - 1); Coor[3].y = mrt.top + 3; dc->Polygon(Coor, 4); dc->SelectStockObject(WHITE_PEN); dc->MoveTo(mrt.left + 3, mrt.top + 3); dc->LineTo(mrt.right - 1, mrt.top + 3); dc->MoveTo(mrt.left + 2, mrt.top + 2); dc->LineTo(mrt.right, mrt.top + 2); dc->SelectObject(&cp); } HFONT hFont= dc->SelectObject(CFont((HFONT)GetStockObject(DEFAULT_GUI_FONT))); dc->SetBkMode(TRANSPARENT); CRect mrtt = mrt; mrtt.top += 2; dc->DrawText(ctb->lpMsg, mrtt, DT_SINGLELINE | DT_CENTER | DT_VCENTER); ctb->rect = mrt; m_right -= (m_rectTab.Height()/2); if (!bIniciaArrastre) { CRect m_rectCli; GetClientRect(m_rectCli); if (m_btndesplaza.left <m_rectCli.left + rcSpin.left + 1) { m_btndesplaza.left = m_rectCli.left + rcSpin.left + 5; m_btndesplaza.right = m_btndesplaza.left + 5; PintaSeparador(dc); } m_scroll.SetWindowPos(NULL, m_btndesplaza.right, m_rectTab.top, m_rectCli.right - (m_btndesplaza.left + 5), m_rectTab.Height() - 1, SWP_NOACTIVATE | SWP_NOCOPYBITS); m_scroll.Invalidate(); m_scroll.UpdateWindow(); CSize szBtn = m_toolBtn[0].GetSizeButton(); m_toolBtn[0].MoveWindow(m_rectTab.left + 1, m_rectTab.top + 1, szBtn.cx, m_rectTab.Height() - 2); CSize szBtn1 = m_toolBtn[1].GetSizeButton(); m_toolBtn[1].MoveWindow(m_rectTab.left + szBtn.cx + 1, m_rectTab.top + 1, szBtn1.cx, m_rectTab.Height() - 2); } } cbr.DeleteObject(); dc->SelectClipRgn(NULL); ::DeleteObject(hRgn); cp.DeleteObject(); m_toolBtn[0].Invalidate(); m_toolBtn[0].UpdateWindow(); m_toolBtn[1].Invalidate(); m_toolBtn[1].UpdateWindow(); }
void CGuiWorkTab::Drawtabs(CDC* dc) { int m_StrPos=0; BOOL m_ViewAlltab=TRUE; CRect m_rClient; CBrush cbr; CPen cp(PS_SOLID,1,::GetSysColor(COLOR_BTNSHADOW)); int m_ianchoScroll=::GetSystemMetrics (SM_CXHSCROLL) * 2; m_EnableR=TRUE; m_EnableL=TRUE; cbr.CreateSolidBrush(m_wd.GetRGBColorXP()); GetClientRect(m_rClient); CRect rectT=m_rectTab; rectT.right=m_btndesplaza.left; rectT.right+=4; dc->FillRect(rectT,&cbr); CPen *pOldPen = dc->SelectObject(&cp); dc->MoveTo(m_rectTab.left,m_rectTab.top); dc->LineTo(m_btndesplaza.right+1,m_rectTab.top); dc->Draw3dRect(m_rClient, ::GetSysColor(COLOR_BTNSHADOW), ::GetSysColor(COLOR_BTNHIGHLIGHT)); if (!::IsWindow(m_mSpin.GetSafeHwnd())) { CRect r=m_rectTab; r.right=r.left+35; r.top+=1; r.bottom-=1; if (!m_mSpin.Create(_T(""),WS_VISIBLE | WS_CHILD |SS_OWNERDRAW, r, this)) m_mSpin.AlingButtons(CGuiMiniTool::ALIGN_LEFT); m_mSpin.SetColor(GuiDrawLayer::GetRGBColorFace()); m_mSpin.SetImageList(IDB_DOCKBAR, 9,10, RGB(255,0,255)); m_mSpin.AddButton(4,ID_SPINIZ,NULL,_T(""),"Left"); m_mSpin.AddButton(2,ID_SPINDE,NULL,_T(""),"Right"); m_mSpin.AutoSize(TRUE); m_mSpin.SetBorder(CGuiMiniTool::STYLEFRAME); CGuiToolButton* btn=m_mSpin.GetButton(ID_SPINIZ); btn->ShowDark(FALSE); btn=m_mSpin.GetButton(ID_SPINDE); btn->ShowDark(FALSE); } if (!::IsWindow(m_scroll.GetSafeHwnd())) { m_scroll.Create(WS_VISIBLE|WS_CHILD|UDS_HORZ,m_rectTab,this,ID_SCROLLWINDOW); } CRect rcSpin; m_mSpin.GetClientRect(rcSpin); m_StrPos=rcSpin.Width(); if ((m_btndesplaza.left < rcSpin.right) && ! m_btndesplaza.IsRectEmpty()) { m_btndesplaza.left=rcSpin.right+5; m_btndesplaza.right=m_btndesplaza.left+5; } PintaSeparador(dc); int m_Space=8; int m_Pos=10; int m_right=m_StrPos; if (m_iMinValRec-26 > m_btndesplaza.left) //No existe suficioente espacio para los tabs { m_ViewAlltab=FALSE; //m_spin.EnableScrollBar(); if (m_PresLeft==TRUE) m_right+=m_deplaza; if (m_PresRight==TRUE) m_right+=m_deplaza; if (m_deplaza == 0) { m_EnableL=FALSE; m_EnableR=TRUE; ;//m_spin.EnableScrollBar(ESB_DISABLE_LTUP); } if ((m_iMinValRec+m_deplaza)-26 <= m_btndesplaza.left) { ;//m_spin.EnableScrollBar(ESB_DISABLE_RTDN); m_EnableR=FALSE; m_EnableL=TRUE; } } else { m_EnableL=FALSE; m_EnableR=FALSE; //m_spin.EnableScrollBar(ESB_DISABLE_BOTH); m_ViewAlltab=TRUE; m_deplaza=0; } CRect rectScroll; CRgn reg; CRect rectRecorte; rectRecorte.left=m_rectTab.left+m_ianchoScroll; rectRecorte.top=m_rectTab.top; rectRecorte.bottom=m_rectTab.bottom; rectRecorte.right=m_btndesplaza.left; reg.CreateRectRgnIndirect(rectRecorte); dc->SelectClipRgn(®); for ( int iCont=0; iCont< m_Numtabs; iCont++) { //; CGuiTab* ctb=(CGuiTab*)m_pArray[iCont]; CRect mrt=ctb->rect; int ancho=mrt.Width(); mrt.left=m_right; mrt.right=mrt.left+ancho; CPoint Coor[4]; //dibujar la hoja seleccionada if (iCont == 0 ) { dc->MoveTo(mrt.left,mrt.top); dc->LineTo((mrt.left)+m_rectTab.Height()/2,mrt.bottom-1); dc->MoveTo((mrt.left)+m_rectTab.Height()/2,mrt.bottom-1); dc->LineTo((mrt.right)-m_rectTab.Height()/2,mrt.bottom-1); dc->MoveTo((mrt.right)-m_rectTab.Height()/2,mrt.bottom-1); if (m_iSelectTab ==iCont) dc->LineTo(mrt.right-2,mrt.top+2); else dc->LineTo((mrt.right)-3,mrt.top+(m_rectTab.Height()/2)); m_right=mrt.right; } else { //Se dibuja la hoja siguiente a la seleccionada //no se dibuja toda la diagonal y no es la ultima hoja if (iCont-1 == m_iSelectTab ) { dc->MoveTo(mrt.left+(m_rectTab.Height()/4)+1,mrt.top+m_rectTab.Height()/2); dc->LineTo((mrt.left)+m_rectTab.Height()/2,mrt.bottom-1); dc->MoveTo((mrt.left)+m_rectTab.Height()/2,mrt.bottom-1); dc->LineTo((mrt.right)-m_rectTab.Height()/2,mrt.bottom-1); dc->MoveTo((mrt.right)-m_rectTab.Height()/2,mrt.bottom-1); if (iCont == m_Numtabs-1) dc->LineTo((mrt.right-2),mrt.top+2); else dc->LineTo((mrt.right)-3,mrt.top+(m_rectTab.Height()/2)); } else { dc->MoveTo(mrt.left,mrt.top); dc->LineTo((mrt.left)+m_rectTab.Height()/2,mrt.bottom-1); dc->MoveTo((mrt.left)+m_rectTab.Height()/2,mrt.bottom-1); dc->LineTo((mrt.right)-m_rectTab.Height()/2,mrt.bottom-1); dc->MoveTo((mrt.right)-m_rectTab.Height()/2,mrt.bottom-1); if (iCont == m_iSelectTab || iCont == m_Numtabs-1 ) dc->LineTo((mrt.right-2),mrt.top+2); else dc->LineTo((mrt.right)-3,mrt.top+3+(m_rectTab.Height()/2)); } m_right=mrt.right; } if (iCont == m_iSelectTab ) { Coor[0].x=mrt.left; Coor[0].y=mrt.top; Coor[1].x=(mrt.left)+m_rectTab.Height()/2; Coor[1].y=mrt.bottom-1; Coor[2].x=(mrt.right)-m_rectTab.Height()/2; Coor[2].y=mrt.bottom-1; Coor[3].x=(mrt.right-1); Coor[3].y=mrt.top+3; /* Modified By SunZhenyu, 2003/11/7, add the next 2 line */ CBrush brush( m_clrSelectTabBK ); CBrush * pOldBrush = dc->SelectObject( &brush ); dc->Polygon(Coor,4); /* Modified By SunZhenyu, 2003/11/7, add the next 1 line */ dc->SelectObject( pOldBrush ); dc->SelectStockObject(WHITE_PEN); dc->MoveTo(mrt.left+3,mrt.top+3); dc->LineTo(mrt.right-1,mrt.top+3); dc->MoveTo(mrt.left+2,mrt.top+2); dc->LineTo(mrt.right,mrt.top+2); dc->SelectObject(&cp); /* Modified By SunZhenyu, 2003/11/9, add the next 1 line */ dc->SetTextColor(m_clrSelectTabText); } else /* Modified By SunZhenyu, 2003/11/9, add the next 1 line */ dc->SetTextColor(::GetSysColor(COLOR_BTNTEXT)); CFont* m_fontOld=dc->SelectObject(&m_cfont); dc->SetBkMode(TRANSPARENT); CRect mrtt=mrt; mrtt.top+=2; dc->DrawText(ctb->lpMsg,mrtt,DT_SINGLELINE|DT_CENTER|DT_VCENTER); // Modified By SunZhenyu dc->SelectObject(m_fontOld); ctb->rect=mrt; m_right-=(m_rectTab.Height()/2); if (!bIniciaArrastre) { CRect m_rectCli; GetClientRect(m_rectCli); if (m_btndesplaza.left <m_rectCli.left+rcSpin.left+1) { m_btndesplaza.left=m_rectCli.left+rcSpin.left+5; m_btndesplaza.right=m_btndesplaza.left+5; PintaSeparador(dc); } m_scroll.SetWindowPos(NULL,m_btndesplaza.right ,m_rectTab.top,m_rectCli.right-(m_btndesplaza.left+5),m_rectTab.Height()-1,SWP_NOACTIVATE|SWP_NOCOPYBITS); m_scroll.Invalidate(); m_scroll.UpdateWindow(); m_mSpin.SetWindowPos(NULL,m_rectTab.left,m_rectTab.top,m_ianchoScroll,m_rectTab.Height()-2,SWP_NOACTIVATE|SWP_NOZORDER); } } dc->SelectClipRgn(NULL); // Modified By SunZhenyu dc->SelectObject(pOldPen); m_mSpin.Invalidate(); m_mSpin.UpdateWindow(); }