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

金融证券系统

开发平台:

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 "resource.h"
  15. #include "guitabbed.h"
  16. #include "GuiBaseTab.h"
  17. #include "..headerguitabbed.h"
  18. #define SCROLLCLOSE 0x886
  19. #define SCROLLLEFT  0x887
  20. #define SCROLLRIGHT 0x888
  21. BEGIN_MESSAGE_MAP(GuiTabbedButton, CGuiNormalButton)
  22. ON_WM_LBUTTONDOWN()
  23. ON_WM_LBUTTONUP()
  24. ON_WM_TIMER()
  25. END_MESSAGE_MAP()
  26. GuiTabbedButton::GuiTabbedButton()
  27. {
  28. bPress=FALSE;
  29. }
  30. GuiTabbedButton::~GuiTabbedButton()
  31. {
  32. }
  33. void GuiTabbedButton::OnLButtonUp(UINT nFlags, CPoint point)
  34. {
  35. // TODO: Add your message handler code here and/or call default
  36. if (!bPress) return;
  37. bPress=FALSE;
  38. KillTimer(1);
  39. //CGuiNormalButton::OnLButtonUp(nFlags, point);
  40. }
  41. void GuiTabbedButton::OnLButtonDown(UINT nFlags, CPoint point)
  42. {
  43. // TODO: Add your message handler code here and/or call default
  44. if (bPress) return;
  45. bPress=TRUE;
  46. SetTimer(1,100,NULL);
  47. //CGuiNormalButton::OnLButtonDown(nFlags, point);
  48. }
  49. void GuiTabbedButton::OnTimer(UINT nIDEvent)
  50. {
  51. // TODO: Add your message handler code here and/or call default
  52. if (!bPress) return;
  53. CRect rc;
  54. CPoint pt(GetMessagePos());
  55. ScreenToClient(&pt);
  56. GetClientRect(rc);
  57. if (rc.PtInRect(pt))
  58. {
  59. CWnd* pParent=GetParent();
  60. pParent->SendMessage(WM_COMMAND,GetDlgCtrlID());
  61. bPress=FALSE;
  62. //KillTimer(1);
  63. }
  64. else
  65. {
  66. bPress=FALSE;
  67. KillTimer(1);
  68. //CGuiNormalButton::OnTimer(nIDEvent);
  69. }
  70. }
  71. CGuiTabbed::CGuiTabbed(void)
  72. {
  73. m_nDif=0;
  74. }
  75. CGuiTabbed::~CGuiTabbed(void)
  76. {
  77. }
  78. void CGuiTabbed::Drawtabs(CDC* dc)
  79. {
  80. int m_StrPos=0;
  81. BOOL m_ViewAlltab=TRUE;
  82. CRect m_rClient;
  83. CBrush cbr;
  84. CPen light(PS_SOLID,1,GetSysColor(COLOR_BTNHIGHLIGHT));
  85. CPen Dark(PS_SOLID,1,GetSysColor(COLOR_BTNSHADOW));
  86. CPen Black(PS_SOLID,1,GetSysColor(BLACK_PEN));
  87. CRect rectText;
  88. CFont* m_fontOld=dc->SelectObject(&m_cfont);
  89. // Modified By SunZhenyu
  90. CPen* pOldPen = dc->SelectObject(&light);
  91. CSize mszBtn=GetSizeButton();
  92. int m_iSizeButton=mszBtn.cx;
  93. cbr.CreateSolidBrush(GuiDrawLayer::GetRGBColorTabs());
  94. dc->FillRect(m_rectTab,&cbr);
  95. //dc->Draw3dRect(m_rectTab,GuiDrawLayer::GetRGBColorShadow(),GuiDrawLayer::GetRGBColorBTNHigh());
  96. m_rectTab.bottom+=1;
  97. CRect rectT=m_rectTab;
  98. rectT.right-=m_iSizeButton+2;
  99. int mSizeTotal=m_iMinValRec;
  100. m_toolBtn[0].EnableWindow(FALSE);
  101. m_toolBtn[1].EnableWindow(FALSE);
  102. if (mSizeTotal > m_rectTab.Width())
  103. {
  104. m_toolBtn[1].EnableWindow(TRUE);
  105. if (m_nDif < 0) 
  106. m_toolBtn[0].EnableWindow(TRUE);
  107. if((mSizeTotal-(abs(m_nDif)-20)) < m_rectTab.Width())
  108. m_toolBtn[1].EnableWindow(FALSE);
  109. }
  110. else
  111. m_nDif=0;
  112. CRect rectScroll; 
  113. CRgn reg;
  114. CRect rectRecorte;
  115. rectRecorte=rectT;
  116. reg.CreateRectRgnIndirect(rectRecorte);
  117. dc->SelectClipRgn(&reg);
  118. int m_right=m_nDif;
  119. for ( int iCont=0; iCont< m_Numtabs;iCont++)
  120. {
  121. CGuiTab* ctb=(CGuiTab*)m_pArray[iCont];
  122. CRect mrt=ctb->rect;
  123. int ancho=mrt.Width();
  124. mrt.left=m_right;
  125. mrt.right=mrt.left+ancho;
  126. CPoint Coor[4];
  127. //si es la carpeta seleccionada, se debe 
  128. //eliminar las lineas oscuras de encima
  129. if (iCont ==m_iSelectTab)
  130. {
  131. CBrush cbr;
  132. CRect  m_rectTabAux=mrt;
  133. cbr.CreateSysColorBrush(COLOR_BTNFACE);
  134. m_rectTabAux.top+=3;
  135. m_rectTabAux.bottom+=2;
  136. dc->FillRect(m_rectTabAux,&cbr);
  137. dc->SelectObject(&light);
  138. dc->MoveTo(m_rectTabAux.left,m_rectTabAux.top);
  139. dc->LineTo(m_rectTabAux.left,m_rectTabAux.bottom);
  140. //linea de arriba
  141. dc->MoveTo(m_rectTabAux.left,m_rectTabAux.top);
  142. dc->LineTo(m_rectTabAux.right,m_rectTabAux.top);
  143. //linea derecha observe que se pinta dos veces para
  144. //dar el efecto de redondeada en la puntas
  145. dc->SelectObject(&Black);
  146. dc->MoveTo(m_rectTabAux.right-1,m_rectTabAux.top+1);
  147. dc->LineTo(m_rectTabAux.right-1,m_rectTabAux.bottom);
  148. dc->SetTextColor(RGB(0,0,0));
  149. //pDC->TextOut(rCText.left+3,rCText.top,m_caption);
  150. }
  151. else
  152. {
  153. if ((iCont+1) != m_iSelectTab)
  154. {
  155. dc->SelectObject(&Dark);
  156. dc->MoveTo(mrt.right-1,mrt.top+3);
  157. dc->LineTo(mrt.right-1,mrt.bottom+1);
  158. dc->SetTextColor(GuiDrawLayer::GetRGBColorShadow());
  159. }
  160. }
  161. CRect m_rectTabAux= mrt;
  162. m_rectTabAux.top+=4;
  163. m_rectTabAux.left+=4;
  164. int OldMode=dc->SetBkMode(TRANSPARENT);
  165. dc->DrawText(ctb->lpMsg,m_rectTabAux,DT_SINGLELINE|DT_LEFT|DT_VCENTER);
  166. m_right=mrt.right;
  167. ctb->rect=mrt;
  168. dc->SetBkMode(OldMode);
  169. }
  170. dc->SelectClipRgn(NULL);
  171. CRect rcCli;
  172. GetClientRect(rcCli);
  173.     rcCli.top=m_rectTab.top;
  174. rcCli.bottom=m_rectTab.bottom;
  175. rcCli.left=rcCli.right-(m_iSizeButton);
  176. int nacum=0;
  177. for (int i=0; i<3;i++)
  178. {
  179. CSize szBtn=m_toolBtn[i].GetSizeButton();
  180. m_toolBtn[i].MoveWindow(rcCli.left+nacum-1,rcCli.top+2,szBtn.cx,rcCli.Height()-4);
  181. nacum+=szBtn.cx;
  182. }
  183. GetClientRect(rcCli);
  184. dc->Draw3dRect(rcCli,GuiDrawLayer::GetRGBColorShadow(),GuiDrawLayer::GetRGBColorShadow());
  185. // Modified By SunZhenyu
  186. dc->SelectObject(m_fontOld);
  187. dc->SelectObject(pOldPen);
  188. }
  189. BEGIN_MESSAGE_MAP(CGuiTabbed, CGuiTabWnd)
  190. ON_WM_CREATE()
  191. ON_COMMAND(SCROLLLEFT,OnScrollLeft)
  192. ON_COMMAND(SCROLLRIGHT,OnScrollRight)
  193. ON_COMMAND(SCROLLCLOSE,OnScrollClose)
  194. END_MESSAGE_MAP()
  195. void  CGuiTabbed::OnScrollLeft()
  196. {
  197. m_nDif+=300;
  198. CClientDC dc(this);
  199. Drawtabs(&dc);
  200. //RecalLayout();
  201. }
  202. void  CGuiTabbed::OnScrollRight()
  203. {
  204. m_nDif-=300;
  205. CClientDC dc(this);
  206. Drawtabs(&dc);
  207. //RecalLayout();
  208. }
  209. void  CGuiTabbed::OnScrollClose()
  210. {
  211. //no es nuestro problema lo debe manejar la clase derivada
  212. }
  213. int CGuiTabbed::OnCreate(LPCREATESTRUCT lpCreateStruct)
  214. {
  215. if (CGuiTabWnd::OnCreate(lpCreateStruct) == -1)
  216. return -1;
  217. if (!m_img.Create(IDB_DOCKBAR,9,11,RGB(255,0,255)))
  218. {
  219. TRACE0("error imagelist");
  220. }
  221. m_toolBtn[0].Create(_T(""),WS_VISIBLE | WS_CHILD | BS_PUSHBUTTON | BS_OWNERDRAW,CRect(0,0,0,0),this,SCROLLLEFT);
  222. m_toolBtn[0].SetStyleButton(CGuiNormalButton::STL_FLAT);
  223. m_toolBtn[0].SetToolTip("Scroll Left");
  224. m_toolBtn[0].SethIcon(m_img.ExtractIcon(4));
  225. m_toolBtn[0].SetColor(GuiDrawLayer::GetRGBColorTabs());
  226. m_toolBtn[0].ShowDark(FALSE);
  227. m_toolBtn[1].Create(_T(""),WS_VISIBLE | WS_CHILD | BS_PUSHBUTTON | BS_OWNERDRAW,CRect(0,0,0,0),this,SCROLLRIGHT);
  228. m_toolBtn[1].SetStyleButton(CGuiNormalButton::STL_FLAT);
  229. m_toolBtn[1].SetToolTip("Scroll Right");
  230. m_toolBtn[1].SethIcon(m_img.ExtractIcon(2));
  231. m_toolBtn[1].SetColor(GuiDrawLayer::GetRGBColorTabs());
  232. m_toolBtn[1].ShowDark(FALSE);
  233. m_toolBtn[2].Create(_T(""),WS_VISIBLE | WS_CHILD | BS_PUSHBUTTON | BS_OWNERDRAW,CRect(0,0,0,0),this,SCROLLCLOSE);
  234. m_toolBtn[2].SetStyleButton(CGuiNormalButton::STL_FLAT);
  235. m_toolBtn[2].SetToolTip("Close");
  236. m_toolBtn[2].SethIcon(m_img.ExtractIcon(10));
  237. m_toolBtn[2].SetColor(GuiDrawLayer::GetRGBColorTabs());
  238. m_toolBtn[2].ShowDark(FALSE);
  239. m_toolBtn[0].EnableWindow(FALSE);
  240. m_toolBtn[1].EnableWindow(FALSE);
  241. SetALingTabs(CGuiTabWnd::ALN_TOP); //los tabs arriba
  242. SetStyle(CGuiTabWnd::SHADOW);    //no debe acondicionar el tama駉 de los tabs return 0;
  243. SetTypeTab(CGuiTabWnd::TYPE_MDI);
  244. SetActualTitle(FALSE);
  245. return 0;
  246. }
  247. CSize CGuiTabbed::GetSizeButton()
  248. {
  249. CSize szresult=CSize(0,0);
  250. for (int i=0; i < 3; i++)
  251. {
  252. CSize sztemp=m_toolBtn[i].GetSizeButton();
  253. szresult.cx+=sztemp.cx;
  254. szresult.cy+=sztemp.cy;
  255. }
  256. return szresult;
  257. }