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

金融证券系统

开发平台:

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 "guitabpowerpoint.h"
  15. #include "GuiDrawLayer.h"
  16. #include "GuiBaseTab.h"
  17. #include "resource.h"
  18. #define ID_CLOSE 6500
  19. CGuiTabPowerPoint::CGuiTabPowerPoint(void)
  20. {
  21. bAutoAjust=TRUE;
  22. m_clrTabs=GuiDrawLayer::GetRGBColorFace();
  23. m_bShowButton=TRUE;
  24. }
  25. CGuiTabPowerPoint::~CGuiTabPowerPoint(void)
  26. {
  27. }
  28. BEGIN_MESSAGE_MAP(CGuiTabPowerPoint, CGuiTabWnd)
  29. ON_WM_CREATE()
  30. ON_COMMAND(ID_CLOSE,OnClose)
  31. END_MESSAGE_MAP()
  32. void CGuiTabPowerPoint::Close()
  33. {
  34. }
  35. BOOL CGuiTabPowerPoint::OnCommand(WPARAM wParam, LPARAM lParam)
  36. {
  37. HWND hwnd = (HWND) lParam;
  38. if (m_ToolButton.GetSafeHwnd() == hwnd)
  39. SendMessage (WM_COMMAND,ID_CLOSE);
  40. return TRUE;
  41. }
  42. void CGuiTabPowerPoint::AjustTabs()
  43. {
  44. int m_iSizeAct=0;
  45. m_iMinValRec=4;
  46. CClientDC dc(this);
  47. GetClientRect(m_rectCliente);
  48. m_rectCliente.bottom=m_rectCliente.top+(m_sizeImag.cy+4+1);
  49. CFont* m_fontOld=dc.SelectObject(&m_cfont);
  50. for (int iCont=0; iCont< m_Numtabs;iCont++)
  51. {
  52. CGuiTab* ct=(CGuiTab*) m_pArray[iCont];
  53. CRect m_Arect;
  54. CSize m_sChar=dc.GetTextExtent(ct->lpMsg);
  55. m_Arect.left=m_iMinValRec+1;
  56. m_iMinValRec+=m_alnTab!=ALN_TOP?m_sizeImag.cx+2+m_sChar.cx+14:m_sChar.cx+14;
  57. if(m_alnTab==ALN_BOTTOM)
  58. {
  59. m_Arect.top=m_rectCliente.bottom;
  60. m_Arect.right=m_iMinValRec;
  61. m_Arect.bottom=m_rectCliente.bottom+4+m_sizeImag.cy;
  62. }
  63. else
  64. {
  65. m_Arect.top=m_rectCliente.top;
  66. m_Arect.right=m_iMinValRec;
  67. m_Arect.bottom=m_rectCliente.top+4+m_sizeImag.cy;
  68. }
  69. ct->rect= m_Arect;
  70. }
  71. dc.SelectObject(m_fontOld);
  72. if (bAutoAjust)
  73. {
  74. int m_NewResize=4;
  75. if (m_iMinValRec > m_rectCliente.Width()-4)
  76. {
  77. m_iSizeAct=(m_rectCliente.Width()-12)/m_Numtabs;
  78. for (int iCont=0; iCont< m_Numtabs;iCont++)
  79. {
  80. CGuiTab* ct=(CGuiTab*) m_pArray[iCont];
  81. if (ct->uIcon != -1)
  82. {
  83. if (m_sizeImag.cx+22 > m_NewResize+m_iSizeAct)
  84. continue;
  85. }
  86. CRect m_Arect;
  87. m_Arect.left=m_NewResize;
  88. m_Arect.right=m_NewResize+m_iSizeAct;
  89. m_Arect.top=m_alnTab==ALN_TOP? m_rectCliente.top:m_rectCliente.bottom;
  90. m_Arect.bottom=m_alnTab==ALN_TOP? m_rectCliente.top+4+m_sizeImag.cy:m_rectCliente.bottom+4+m_sizeImag.cy;
  91. m_NewResize+=m_iSizeAct+1;
  92. ct->rect= m_Arect;
  93. }
  94. }
  95. }
  96. }
  97. void CGuiTabPowerPoint::Drawtabs(CDC* dc)
  98. {
  99. CBrush cb;
  100. CRect rectText;
  101. CRect rc;
  102. int nHeight=0;
  103. CBrush cbr;
  104. CPen cp(PS_SOLID,1,::GetSysColor(COLOR_BTNSHADOW));
  105. CPen cpw(PS_SOLID,1,GuiDrawLayer::GetRGBColorWhite());
  106. cbr.CreateSolidBrush(m_clrTabs);
  107. dc->FillRect(m_rectTab,&cbr);
  108. CFont* m_fontOld=dc->SelectObject(&m_cfont);
  109. CPen penShadow(PS_SOLID, 1, GuiDrawLayer::GetRGBColorShadow());
  110. CPen* pOldPen = dc->SelectObject(&penShadow);
  111. /*Modified By SunZhenyu 2003/11/11, add the next 1 line */
  112. if( ALN_BOTTOM != m_alnTab )
  113. {
  114. dc->MoveTo(m_rectTab.left,m_rectTab.bottom-1);
  115. dc->LineTo(m_rectTab.right,m_rectTab.bottom-1);
  116. }
  117. int nMode = dc->SetBkMode(TRANSPARENT);
  118. int m_right=0;
  119. for ( int iCont=0; iCont< m_Numtabs;iCont++)
  120. {
  121. dc->SelectObject(&penShadow);
  122. CGuiTab* ctb=(CGuiTab*)m_pArray[iCont];
  123. CRect mrt=ctb->rect;
  124. int ancho=mrt.Width();
  125. mrt.left=m_right;
  126. mrt.right=mrt.left+ancho;
  127. CPoint Coor[4];
  128. CPoint CoorFive[6];
  129. if (iCont-1 == m_iSelectTab ) 
  130. {
  131. CBrush brushRed(GuiDrawLayer::GetRGBColorFace());
  132. CBrush* pOldBrush = dc->SelectObject(&brushRed);
  133. CoorFive[0].x=mrt.left+(m_rectTab.Height()/4)+1;
  134. CoorFive[0].y=(mrt.bottom-m_rectTab.Height()/2)+1;
  135. CoorFive[1].x=(mrt.left)+m_rectTab.Height()/2;
  136. CoorFive[1].y=mrt.top+1;
  137. CoorFive[2].x=(mrt.right)-m_rectTab.Height()/2;
  138. CoorFive[2].y=mrt.top+1;
  139. if (iCont == m_Numtabs-1)
  140. {
  141. CoorFive[3].x=mrt.right-2;
  142. CoorFive[3].y=mrt.bottom+1;
  143. }
  144. else
  145. {
  146. CoorFive[3].x=(mrt.right)-5;
  147. CoorFive[3].y=(mrt.bottom-(m_rectTab.Height()/2))+1;
  148. }
  149. CoorFive[4].x=(mrt.right)-8;
  150. CoorFive[4].y=mrt.bottom+1;
  151. CoorFive[5].x=(mrt.left)+9;
  152. CoorFive[5].y=mrt.bottom+1;
  153. /*Modified By SunZhenyu 2003/11/11, add the next 5 line */
  154. if( ALN_BOTTOM == m_alnTab )
  155. {
  156. for( int k=0; k<6; k++ )
  157. CoorFive[k].y = m_rectTab.bottom - (CoorFive[k].y-m_rectTab.top);
  158. }
  159. dc->Polygon(CoorFive,6);
  160. dc->SelectObject(pOldBrush);
  161. }
  162. else
  163. {
  164. CBrush brushRed(GuiDrawLayer::GetRGBColorXP());
  165. CBrush* pOldBrush = dc->SelectObject(&brushRed);
  166. CoorFive[0].x=mrt.left;
  167. CoorFive[0].y=mrt.bottom+1;
  168. CoorFive[1].x=(mrt.left)+m_rectTab.Height()/2;
  169. CoorFive[1].y=mrt.top+1;
  170. CoorFive[2].x=(mrt.right)-m_rectTab.Height()/2;
  171. CoorFive[2].y=mrt.top+1;
  172. if (iCont == m_iSelectTab || iCont == m_Numtabs-1 )
  173. {
  174. CoorFive[3].x=mrt.right-2;
  175. CoorFive[3].y=mrt.bottom+1;
  176. }
  177. else
  178. {
  179. CoorFive[3].x=(mrt.right)-5;
  180. CoorFive[3].y=(mrt.bottom-(m_rectTab.Height()/2))+1;
  181. }
  182. CoorFive[4].x=(mrt.right)-8;
  183. CoorFive[4].y=mrt.bottom+1;
  184. CoorFive[5].x=(mrt.left)+9;
  185. CoorFive[5].y=mrt.bottom+1;
  186. /*Modified By SunZhenyu 2003/11/11, add the next 5 line */
  187. if( ALN_BOTTOM == m_alnTab )
  188. {
  189. for( int k=0; k<6; k++ )
  190. CoorFive[k].y = m_rectTab.bottom - (CoorFive[k].y-m_rectTab.top);
  191. }
  192. dc->Polygon(CoorFive,6);
  193. dc->SelectObject(pOldBrush);
  194. }
  195. m_right=mrt.right;
  196. if (iCont == m_iSelectTab )
  197. {
  198. /*Modified By SunZhenyu 2003/11/11, replace the next 1 line
  199. CBrush brushRed(GuiDrawLayer::GetRGBColorWhite());
  200. */
  201. CBrush brushRed(m_clrSelectTabBK);
  202. CBrush* pOldBrush = dc->SelectObject(&brushRed);
  203. Coor[0].x=mrt.left;
  204. Coor[0].y=mrt.bottom;
  205. Coor[1].x=(mrt.left)+m_rectTab.Height()/2;
  206. Coor[1].y=mrt.top+1;
  207. Coor[2].x=(mrt.right)-m_rectTab.Height()/2; 
  208. Coor[2].y=mrt.top+1;
  209. Coor[3].x=(mrt.right-1);
  210. Coor[3].y=mrt.bottom;
  211. /*Modified By SunZhenyu 2003/11/11, add the next 5 line */
  212. if( ALN_BOTTOM == m_alnTab )
  213. {
  214. for( int k=0; k<4; k++ )
  215. Coor[k].y = m_rectTab.bottom - (Coor[k].y-m_rectTab.top);
  216. }
  217. dc->Polygon(Coor,4);
  218. dc->SelectObject(pOldBrush);
  219. /*Modified By SunZhenyu 2003/11/11, add the next 5 line */
  220. if( ALN_BOTTOM == m_alnTab )
  221. {
  222. dc->FillRect( CRect(mrt.left+1,mrt.top+1,mrt.right-1,mrt.top+4), &brushRed );
  223. }
  224. else
  225. {
  226. dc->SelectObject(&cpw);
  227. dc->MoveTo(mrt.left+1,mrt.bottom);
  228. dc->LineTo(mrt.right-1,mrt.bottom);
  229. dc->MoveTo(mrt.left+1,mrt.bottom+1);
  230. dc->LineTo(mrt.right-1,mrt.bottom+1);
  231. }
  232. }
  233. // Modified By SunZhenyu
  234. // CFont* m_fontOld=dc->SelectObject(&m_cfont);
  235. dc->SetBkMode(TRANSPARENT);
  236. CRect mrtt=mrt; mrtt.top+=2;
  237. CSize m_sChar=dc->GetTextExtent(ctb->lpMsg,strlen(ctb->lpMsg));
  238. ctb->rect=mrt;
  239. m_right-=(m_rectTab.Height()/2);
  240. if (m_sChar.cx < ctb->rect.Width()-8)  
  241. {
  242. rectText=ctb->rect;
  243. /*Modified By SunZhenyu 2003/11/11, add the next 1 line */
  244. dc->SetTextColor(iCont == m_iSelectTab ? m_clrSelectTabText : ::GetSysColor(COLOR_BTNTEXT));
  245. dc->DrawText(ctb->lpMsg,mrtt,DT_SINGLELINE|DT_CENTER|DT_VCENTER);
  246. }
  247. else
  248. {
  249. int nDif= ctb->rect.Width()-m_sizeImag.cx;
  250. nDif/=2;
  251. if(ctb->uIcon == -1) continue;
  252. Image.Draw(dc,ctb->uIcon,CPoint(ctb->rect.left+nDif,ctb->rect.top+2),ILD_TRANSPARENT);
  253. CToolTip.SetToolRect(this,iCont+1,CRect(0,0,0,0));
  254. }
  255. }
  256. GetClientRect(rc);
  257. CSize m_SizeBtn=m_ToolButton.GetSizeButton();
  258. if (m_bShowButton==TRUE)
  259. {
  260. if (m_right+m_SizeBtn.cx > rc.Width())
  261. m_ToolButton.ShowWindow(SW_HIDE);
  262. else
  263. {
  264. rc.left=rc.right-(m_SizeBtn.cx+2);
  265. rc.bottom=m_rectTab.Height()-2;
  266. m_ToolButton.MoveWindow(rc.left,rc.top+1,m_SizeBtn.cx,rc.bottom-1);
  267. m_ToolButton.ShowWindow(SW_SHOW);
  268. }
  269. }
  270. dc->SetBkMode(nMode);
  271. dc->SelectObject(m_fontOld);
  272. // Modified By SunZhenyu
  273. dc->SelectObject(pOldPen);
  274. }
  275. void CGuiTabPowerPoint::ShowButtonClose(BOOL bShowButton)
  276. {
  277. m_bShowButton=bShowButton;
  278. };
  279. void CGuiTabPowerPoint::SetAutoAjust(BOOL bAjust)
  280. {
  281. bAutoAjust=bAjust;
  282. m_ToolButton.ShowWindow(bAutoAjust==FALSE?SW_HIDE:SW_SHOW);
  283. }
  284. void CGuiTabPowerPoint::SetColorTabs(COLORREF clrTabs)
  285. {
  286. m_clrTabs=clrTabs;
  287. }
  288. int CGuiTabPowerPoint::OnCreate(LPCREATESTRUCT lpCreateStruct)
  289. {
  290. if (CGuiTabWnd::OnCreate(lpCreateStruct) == -1)
  291. return -1;
  292. if (!m_img.Create(IDB_MDIICONS,9,3,RGB(255,0,255)))
  293. {
  294. TRACE0("error imagelist");
  295. }
  296. SetALingTabs(CGuiTabWnd::ALN_TOP); //los tabs arriba
  297. SetStyle(CGuiTabWnd::FLAT);
  298. m_ToolButton.ShowDark(FALSE);
  299. SetActualTitle(FALSE);
  300. m_ToolButton.Create(_T(""),WS_CHILD|WS_VISIBLE|BS_OWNERDRAW,CRect(0,0,0,0),this,ID_CLOSE);
  301. m_ToolButton.SetToolTip("Close");
  302. m_ToolButton.SethIcon(m_img.ExtractIcon(2));
  303. m_ToolButton.SetColor(GuiDrawLayer::GetRGBColorFace());
  304. // TODO:  Add your specialized creation code here
  305. return 0;
  306. }