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

金融证券系统

开发平台:

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 "GuiTabWnd.h"
  15. #include "GuiBasetab.h"
  16. #include "resource.h"
  17. #ifdef _DEBUG
  18. #define new DEBUG_NEW
  19. #undef THIS_FILE
  20. static char THIS_FILE[] = __FILE__;
  21. #endif
  22. /////////////////////////////////////////////////////////////////////////////
  23. // CGuiTabWnd
  24. #define  SPACE_TAB 4
  25. #define  DEFAULT_FLAT 18
  26. CGuiTabWnd::CGuiTabWnd()
  27. {
  28. m_rectCliente.SetRectEmpty();
  29. m_rectTab.SetRectEmpty();
  30. m_ActualVar=0;
  31. m_Numtabs=0;
  32. m_iSelectTab=0;
  33. m_sizeImag=CSize(15,15);
  34. m_pArray.RemoveAll();
  35. m_iMinValRec=0;  //minimo valor requerido para mostrar toda las carpetas
  36. // Modified Bu SunZhenyu
  37. if( !m_cfont.CreateStockObject( DEFAULT_GUI_FONT ) )
  38. m_cfont.CreateStockObject( ANSI_VAR_FONT );
  39. // m_cfont.CreateFont(-11,0,0,0,400,0,0,0,0,1,2,1,34,"MS Sans Serif");
  40. m_style=S3D;
  41. m_ActualTitle=TRUE;
  42. m_alnTab=ALN_BOTTOM;
  43. m_TypeTab=TYPE_NORMAL;
  44. /*Modified By SunZhenyu 2003/11/11, add the next 2 line */
  45. m_clrSelectTabBK = ::GetSysColor(COLOR_BTNHIGHLIGHT);
  46. m_clrSelectTabText = ::GetSysColor(COLOR_BTNTEXT);
  47. }
  48. CGuiTabWnd::~CGuiTabWnd()
  49. {
  50. /* Modified By SunZhenyu 2003/8/22, Add next 7 lines. */
  51. for(int i=0; i<m_pArray.GetSize(); i++)
  52. {
  53. CGuiTab * p = (CGuiTab*)m_pArray[i];
  54. if( p )
  55. delete p;
  56. }
  57. m_pArray.RemoveAll();
  58. }
  59. BEGIN_MESSAGE_MAP(CGuiTabWnd, CWnd)
  60. //{{AFX_MSG_MAP(CGuiTabWnd)
  61. ON_WM_ERASEBKGND()
  62. ON_WM_PAINT()
  63. ON_WM_CREATE()
  64. ON_WM_SIZE()
  65. ON_WM_LBUTTONDOWN()
  66. ON_WM_SYSCOLORCHANGE()
  67. //}}AFX_MSG_MAP
  68. // Modified By SunZhenyu, 2003/11/11, add the next 1 line
  69. ON_MESSAGE(WM_GUITABWND_COLORCHANGE, OnColorChange)
  70. END_MESSAGE_MAP()
  71. /////////////////////////////////////////////////////////////////////////////
  72. // CGuiTabWnd message handlers
  73. BOOL CGuiTabWnd::PreTranslateMessage(MSG* pMsg) 
  74. {
  75. // TODO: Add your specialized code here and/or call the base class
  76. if (pMsg->message == WM_MOUSEMOVE)
  77. CToolTip.RelayEvent(pMsg);
  78. return CWnd::PreTranslateMessage(pMsg);
  79. }
  80. //****************************************************************************
  81. void CGuiTabWnd::OnSysColorChange( )
  82. {
  83. CWnd::OnSysColorChange( );
  84. }
  85. void CGuiTabWnd::SetTypeTab(TypeTab Type)
  86. {
  87. m_TypeTab=Type;
  88. }
  89. //****************************************************************************
  90. BOOL CGuiTabWnd::OnEraseBkgnd(CDC* pDC) 
  91. {
  92. // TODO: Add your message handler code here and/or call default
  93. if (m_Numtabs == 0)
  94. {
  95. CBrush cbr;
  96. cbr.CreateSysColorBrush(COLOR_BTNFACE);
  97. CRect m_rect;
  98. GetClientRect(m_rect);
  99. pDC->FillRect(m_rect,&cbr);
  100. }
  101. return TRUE;
  102. }
  103. void CGuiTabWnd::SetActualTitle(BOOL bActual)
  104. {
  105. m_ActualTitle=bActual;
  106. }
  107. void CGuiTabWnd::SetALingTabs(AlingTab alnTab)
  108. {
  109. m_alnTab=alnTab;
  110. Invalidate();
  111. UpdateWindow();
  112. }
  113. void CGuiTabWnd::OnPaint() 
  114. {
  115. CPaintDC dc(this); // device context for painting
  116. CBrush cbr;
  117. CRect m_rectDraw;
  118. if (m_alnTab!=ALN_TOP)
  119. cbr.CreateSolidBrush(GuiDrawLayer::GetRGBColorXP());
  120. else
  121. cbr.CreateSolidBrush(GuiDrawLayer::GetRGBColorFace());
  122. GetClientRect(m_rectCliente);
  123. m_rectTab=m_rectCliente;
  124. m_rectDraw=m_rectCliente;
  125. if (m_alnTab==ALN_BOTTOM)
  126. m_rectDraw.bottom=m_rectCliente.bottom-(m_sizeImag.cy+SPACE_TAB+2);
  127. else
  128. m_rectDraw.top=m_rectCliente.top+(m_sizeImag.cy+SPACE_TAB+2);
  129. if (m_alnTab!=ALN_TOP)
  130. {
  131. /* Modified By SunZhenyu 2003/10/26, Remove next 2 lines. */
  132. // dc.FillRect(m_rectTab,&cbr);
  133. // dc.Draw3dRect(m_rectDraw,GetSysColor(COLOR_BTNSHADOW),GetSysColor(COLOR_BTNSHADOW));
  134. }
  135. else
  136. {
  137. CRect rc=m_rectDraw;
  138. for (int i=0; i< 2; i++)
  139. {
  140. dc.Draw3dRect(rc,GuiDrawLayer::GetRGBColorFace(),GuiDrawLayer::GetRGBColorFace());
  141. rc.DeflateRect(1,1);
  142. }
  143. rc.InflateRect(3,3);
  144. dc.Draw3dRect(rc,GetSysColor(COLOR_BTNSHADOW),GetSysColor(COLOR_BTNSHADOW));
  145. rc=m_rectDraw;
  146. rc.bottom=rc.top+3;
  147. dc.FillRect(rc,&cbr);
  148. }
  149. if (m_style != S3D) //si son carpetas estilo excel o tabbed como devstudio 7
  150. {
  151. if (m_alnTab==ALN_BOTTOM)
  152. {
  153. m_rectCliente.bottom=m_rectCliente.bottom-(DEFAULT_FLAT);
  154. m_rectTab.top=m_rectCliente.bottom+2;
  155. }
  156. else
  157. {
  158. m_rectTab.bottom=m_rectCliente.top+(DEFAULT_FLAT)+3;
  159. }
  160. }
  161. Drawtabs(&dc);
  162. }
  163. BOOL CGuiTabWnd::Create(DWORD dwStyle, const RECT& rect, CWnd* pParentWnd, UINT nID) 
  164. {
  165. // TODO: Add your specialized code here and/or call the base class
  166. pParent= pParentWnd;
  167. return CWnd::Create(NULL, _T(""), dwStyle, rect, pParentWnd, nID);
  168. }
  169. int CGuiTabWnd::OnCreate(LPCREATESTRUCT lpCreateStruct) 
  170. {
  171. if (CWnd::OnCreate(lpCreateStruct) == -1)
  172. return -1;
  173. CToolTip.Create(this,TTS_ALWAYSTIP);
  174. CToolTip.Activate(TRUE);
  175. CToolTip.BringWindowToTop();
  176. // TODO: Add your specialized creation code here
  177. return 0;
  178. }
  179. void CGuiTabWnd::RecalLayout()
  180. {
  181. GetClientRect(m_rectCliente);
  182. if (m_style == S3D)
  183. {
  184. m_rectCliente.bottom=m_rectCliente.bottom-(m_sizeImag.cy+SPACE_TAB+1);
  185. }
  186. else
  187. {
  188. if (m_alnTab==ALN_BOTTOM)
  189. m_rectCliente.bottom=m_rectCliente.bottom-(DEFAULT_FLAT);
  190. else
  191. {
  192. m_rectCliente.top+=DEFAULT_FLAT;
  193. m_rectCliente.bottom=m_rectCliente.bottom-(DEFAULT_FLAT+4);
  194. }
  195. }
  196. for (int iCont=0; iCont< m_Numtabs;iCont++)
  197. {
  198. CGuiTab* ct=(CGuiTab*) m_pArray[iCont];
  199. CWnd* m_tempWin= ct->pParent;
  200. ASSERT_VALID(m_tempWin);
  201. if (m_style == S3D)
  202. {
  203.    m_tempWin->SetWindowPos(NULL,m_rectCliente.left+(SPACE_TAB-2),
  204.    m_rectCliente.top+(SPACE_TAB/2),m_rectCliente.right-(SPACE_TAB+1),
  205.    m_rectCliente.bottom-(SPACE_TAB+2),SWP_NOACTIVATE|
  206.    SWP_NOZORDER);
  207. }
  208. else
  209. {
  210. if (m_alnTab==ALN_BOTTOM)
  211. {
  212.    m_tempWin->SetWindowPos(NULL,m_rectCliente.left+(SPACE_TAB-3),
  213.    m_rectCliente.top+3,m_rectCliente.right-2,
  214.    m_rectCliente.bottom-1,SWP_NOACTIVATE|SWP_NOZORDER);
  215. }
  216. else
  217. if (m_TypeTab == TYPE_NORMAL)
  218. {
  219.   m_tempWin->SetWindowPos(NULL,m_rectCliente.left+(SPACE_TAB-3),
  220.   m_rectCliente.top+3,m_rectCliente.right-2,
  221.   m_rectCliente.bottom,SWP_NOACTIVATE|SWP_NOZORDER);
  222. }
  223. }
  224. }
  225. }
  226. AjustTabs();
  227. Invalidate();
  228. UpdateWindow();
  229. }
  230. void CGuiTabWnd::AjustTabs()
  231. {
  232. int m_iSizeAct=0;
  233. m_iMinValRec=4;
  234. CClientDC dc(this);
  235. GetClientRect(m_rectCliente);
  236. if (m_alnTab==ALN_BOTTOM)
  237. m_rectCliente.bottom=m_rectCliente.bottom-(m_sizeImag.cy+SPACE_TAB+1);
  238. else
  239. m_rectCliente.bottom=m_rectCliente.top+(m_sizeImag.cy+SPACE_TAB+1);
  240. CFont* m_fontOld=dc.SelectObject(&m_cfont);
  241. for (int iCont=0; iCont< m_Numtabs;iCont++)
  242. {
  243. CGuiTab* ct=(CGuiTab*) m_pArray[iCont];
  244. CRect m_Arect;
  245. CSize m_sChar=dc.GetTextExtent(ct->lpMsg);
  246. m_Arect.left=m_iMinValRec+1;
  247. m_iMinValRec+=m_alnTab!=ALN_TOP?m_sizeImag.cx+2+m_sChar.cx+14:m_sChar.cx+14;
  248. if(m_alnTab==ALN_BOTTOM)
  249. {
  250. m_Arect.top=m_rectCliente.bottom;
  251. m_Arect.right=m_iMinValRec;
  252. m_Arect.bottom=m_rectCliente.bottom+4+m_sizeImag.cy;
  253. }
  254. else
  255. {
  256. m_Arect.top=m_rectCliente.top;
  257. m_Arect.right=m_iMinValRec;
  258. m_Arect.bottom=m_rectCliente.top+4+m_sizeImag.cy;
  259. }
  260. ct->rect= m_Arect;
  261. }
  262. dc.SelectObject(m_fontOld);
  263. //si el espacio requerido es mayor que el disponible
  264. //se debe proporcionar cada tab solo si es 3d
  265. if (m_style== S3D)
  266. {
  267. int m_NewResize=4;
  268. if (m_iMinValRec > m_rectCliente.Width()-4)
  269. {
  270. m_iSizeAct=(m_rectCliente.Width()-12)/m_Numtabs;
  271. for (int iCont=0; iCont< m_Numtabs;iCont++)
  272. {
  273. CGuiTab* ct=(CGuiTab*) m_pArray[iCont];
  274. CRect m_Arect;
  275. m_Arect.left=m_NewResize;
  276. m_Arect.right=m_NewResize+m_iSizeAct;
  277. m_Arect.top=m_rectCliente.bottom;
  278. m_Arect.bottom=m_rectCliente.bottom+4+m_sizeImag.cy;
  279. m_NewResize+=m_iSizeAct+1;
  280. ct->rect= m_Arect;
  281. }
  282. }
  283. }
  284. }
  285. void CGuiTabWnd::Drawtabs(CDC* dc)
  286. {
  287. CPen light(PS_SOLID,1,GetSysColor(COLOR_BTNHIGHLIGHT));
  288. CPen Dark(PS_SOLID,1,GetSysColor(COLOR_BTNSHADOW));
  289. CPen Black(PS_SOLID,1,GetSysColor(BLACK_PEN));
  290. CRect rectText;
  291. CFont* m_fontOld=dc->SelectObject(&m_cfont);
  292. for (int iCont=0; iCont< m_Numtabs;iCont++)
  293. {
  294. CGuiTab* ct=(CGuiTab*) m_pArray[iCont];
  295. CPen* oldPen= dc->SelectObject(&light);
  296. //si es la carpeta seleccionada, se debe 
  297. //eliminar las lineas oscuras de encima
  298. if (iCont ==m_iSelectTab)
  299. {
  300. CBrush cbr;
  301. CRect  m_rectTabAux=ct->rect;
  302. m_rectTabAux.DeflateRect(1,1);
  303. m_rectTabAux.top-=4;
  304. m_rectTabAux.bottom=m_rectTabAux.top+4;
  305. cbr.CreateSysColorBrush(COLOR_BTNFACE);
  306. dc->FillRect(ct->rect,&cbr);
  307. dc->MoveTo(ct->rect.left,ct->rect.top-3);
  308. dc->LineTo(ct->rect.left,ct->rect.bottom-1);
  309. dc->FillRect(m_rectTabAux,&cbr);
  310. dc->SelectStockObject(BLACK_PEN);
  311. dc->MoveTo(ct->rect.left,ct->rect.bottom-1);
  312. dc->LineTo(ct->rect.right,ct->rect.bottom-1);
  313. //linea derecha observe que se pinta dos veces para
  314. //dar el efecto de redondeada en la puntas
  315. dc->SelectStockObject(BLACK_PEN);
  316. dc->MoveTo(ct->rect.right-1,ct->rect.top-1);
  317. dc->LineTo(ct->rect.right-1,ct->rect.bottom-1);
  318. }
  319. else
  320. {
  321. if ((iCont+1) != m_iSelectTab)
  322. {
  323. dc->SelectObject(&Dark);
  324. dc->MoveTo(ct->rect.right-1,ct->rect.top+2);
  325. dc->LineTo(ct->rect.right-1,ct->rect.bottom-2);
  326. }
  327. }
  328. //se dibuja el icono
  329. int nMode = dc->SetBkMode(TRANSPARENT);
  330. CSize m_sChar=dc->GetTextExtent(ct->lpMsg,strlen(ct->lpMsg));
  331. if (m_sizeImag.cx+m_sChar.cx < ct->rect.Width()-8)  
  332. {
  333. Image.Draw(dc,ct->uIcon,CPoint(ct->rect.left+2,ct->rect.top+2),ILD_TRANSPARENT);
  334. rectText=ct->rect;
  335. rectText.left+=m_sizeImag.cx+8;
  336. rectText.right-=2;
  337. dc->DrawText(ct->lpMsg,rectText,DT_SINGLELINE|DT_LEFT|DT_VCENTER);
  338. CToolTip.SetToolRect(this,iCont+1,CRect(0,0,0,0));
  339. }
  340. else
  341. {
  342. //verificamos si se puede poner algun texto o
  343. //por lo memos el icono
  344. if (m_sizeImag.cx < ct->rect.Width())
  345. {
  346. Image.Draw(dc,ct->uIcon,CPoint(ct->rect.left+2,ct->rect.top+2),ILD_TRANSPARENT);
  347. rectText=ct->rect;
  348. rectText.left+=m_sizeImag.cx+8;
  349. rectText.right-=5;
  350. CString m_cadBreak=ct->lpMsg;
  351. int c=0;
  352. int cont=m_cadBreak.GetLength();
  353. while(cont > 1 )
  354. {
  355. CString m_scadtemp=m_cadBreak+"...";
  356. CSize coor=dc->GetTextExtent(m_scadtemp,m_scadtemp.GetLength());
  357. if(coor.cx > rectText.Width())
  358. m_cadBreak=m_cadBreak.Left(m_cadBreak.GetLength()-1);
  359. else
  360. break;
  361. cont--;
  362. }
  363. m_cadBreak+=_T("...");
  364. rectText.right+=3;
  365. dc->DrawText(m_cadBreak,rectText,DT_SINGLELINE|DT_LEFT|DT_VCENTER);
  366. CToolTip.SetToolRect(this,iCont+1,&ct->rect);
  367. }
  368. }
  369. dc->SetBkMode(nMode);
  370. // Modified By SunZhenyu
  371. dc->SelectObject(oldPen);
  372. }
  373. dc->SelectObject(m_fontOld);
  374. }
  375. void CGuiTabWnd::SetImageList(UINT nBitmapID, int cx, int nGrow, COLORREF crMask)
  376. {
  377. CBitmap cbmp;
  378. BITMAP bmp;
  379. Image.Create(nBitmapID,cx,nGrow,crMask);
  380. cbmp.LoadBitmap(nBitmapID);
  381. cbmp.GetBitmap(&bmp);
  382. Image.Add(&cbmp,crMask);
  383. m_sizeImag=CSize(cx,bmp.bmHeight);
  384. }
  385. CWnd* CGuiTabWnd::GetActiveWnd () const
  386. {
  387. return m_Numtabs == -1 ? NULL : 
  388. ((CGuiTab*) m_pArray [m_Numtabs])->pParent;
  389. }
  390. BOOL CGuiTabWnd::FindItem(HWND hWnd)
  391. {
  392. for (int iCont=0; iCont< m_Numtabs;iCont++)
  393. {
  394. CGuiTab* ct=(CGuiTab*) m_pArray[iCont];
  395. if (ct->pParent->GetSafeHwnd() == hWnd)
  396.     return TRUE;
  397. }
  398. return FALSE;
  399. }
  400. CWnd*  CGuiTabWnd::GetNumWnd(int m_numtab) const
  401. {
  402.         if (m_numtab > m_Numtabs)
  403. return NULL;
  404. else
  405. {
  406. if (m_pArray.GetSize() < 1) return NULL;
  407. CWnd* pw=((CGuiTab*) m_pArray [m_numtab])->pParent;
  408. if (HIWORD(pw)== NULL) return NULL;
  409. else
  410.   return ((CGuiTab*) m_pArray [m_numtab])->pParent;
  411. }
  412. }
  413. void CGuiTabWnd::UpdateCaption(CWnd* pWnd,CString m_Title)
  414. {
  415. for (int iCont=0; iCont< m_Numtabs;iCont++)
  416. {
  417. CGuiTab* ct=(CGuiTab*) m_pArray[iCont];
  418. if (ct->pParent->GetSafeHwnd() == pWnd->GetSafeHwnd())
  419. {
  420. CString x=ct->lpMsg;
  421. if(x!=m_Title)
  422. {
  423. ct->lpMsg=m_Title;
  424. GetParentFrame()->SendMessage(WM_SIZE);
  425. RecalLayout();
  426. Invalidate();
  427. UpdateWindow();
  428. }
  429. break;
  430. }
  431. }
  432. }
  433. void CGuiTabWnd::ShowTitle(CString m_Caption)
  434. {
  435. if (m_ActualTitle==TRUE)
  436. {
  437. CWnd* pParent=GetParent();
  438. pParent->SetWindowText(m_Caption);
  439. pParent->SendMessage(WM_COMMAND,WM_SHOWTITLE);
  440. }
  441. }
  442. void CGuiTabWnd::Addtab(CWnd *pParent, CString lpMsg, UINT uIcon)
  443. {
  444. ASSERT_VALID(pParent);
  445. m_pArray.SetAtGrow(m_Numtabs,new CGuiTab(pParent,lpMsg,uIcon));
  446. if (m_Numtabs==0)
  447. {
  448. // ShowTitle(lpMsg);
  449. pParent->ShowWindow(SW_SHOW);
  450. m_iSelectTab=m_Numtabs;
  451. }
  452. else
  453. pParent->ShowWindow(SW_HIDE);
  454. m_Numtabs++;
  455. if (m_alnTab==ALN_TOP)
  456. pParent->ShowWindow(SW_SHOWMAXIMIZED);
  457. if (m_style == S3D)
  458. CToolTip.AddTool(this,lpMsg,CRect(0,0,0,0),m_Numtabs);
  459. RecalLayout();
  460. }
  461. void CGuiTabWnd::DeleteTab(int m_numtab)
  462. {
  463. if (m_numtab < m_Numtabs)
  464. {
  465. CGuiTab* ctn=(CGuiTab*) m_pArray[m_numtab]; 
  466. CWnd* pParen=ctn->pParent;
  467. if (m_alnTab!=ALN_TOP)
  468. ASSERT_VALID(pParen);
  469. m_Numtabs--;
  470. /* Modified By SunZhenyu 2003/8/22, Add next 1 lines. */
  471. delete ctn;
  472. m_pArray.RemoveAt(m_numtab,1);
  473. if (m_Numtabs >0)
  474. {
  475. if (m_iSelectTab == m_numtab)
  476. {
  477. m_iSelectTab=0;
  478. CGuiTab* ctn =(CGuiTab*) m_pArray[m_iSelectTab];
  479. CWnd* pParentNew=ctn->pParent;
  480. ASSERT_VALID(pParentNew);
  481. pParentNew->ShowWindow(SW_SHOW);
  482. }
  483. RecalLayout();
  484. }
  485. }
  486. }
  487. void CGuiTabWnd::OnSize(UINT nType, int cx, int cy) 
  488. {
  489. CWnd::OnSize(nType, cx, cy);
  490. if (m_Numtabs > 0)
  491. RecalLayout();
  492. }
  493. void CGuiTabWnd::SetCurtab(int m_numtab)
  494. {
  495. if (m_numtab < m_Numtabs && m_numtab != m_iSelectTab )
  496. {
  497. CGuiTab* ctn=(CGuiTab*) m_pArray[m_numtab]; 
  498. CWnd* pParentNew= ctn->pParent;
  499. CGuiTab* ct =(CGuiTab*) m_pArray[m_iSelectTab];
  500. CWnd* pParentActual=ct->pParent;
  501. ASSERT_VALID(pParentNew);
  502. ASSERT_VALID(pParentActual);
  503. if (m_alnTab==ALN_TOP)
  504. {
  505. pParentNew->BringWindowToTop();
  506. }
  507. else
  508. {
  509. pParentActual->ShowWindow(SW_HIDE);
  510. pParentNew->ShowWindow(SW_SHOW);
  511. }
  512. m_iSelectTab=m_numtab;
  513. Invalidate();
  514. UpdateWindow();
  515. }
  516. // Modified By SunZhenYu, 2003/10/28, add next 3 lines
  517. CWnd * pParent = GetParent();
  518. if( pParent )
  519. {
  520. WPARAM wParam = GetDlgCtrlID();
  521. NMHDR hdr;
  522. hdr.hwndFrom = GetSafeHwnd();
  523. hdr.idFrom = GetDlgCtrlID();
  524. hdr.code = TCN_SELCHANGE;
  525. pParent->SendMessage( WM_NOTIFY, wParam, (LPARAM)&hdr);
  526. }
  527. }
  528. int CGuiTabWnd::GetCurtab()
  529. {
  530. return m_iSelectTab;
  531. }
  532. void CGuiTabWnd::OnLButtonDown(UINT nFlags, CPoint point) 
  533. {
  534. // TODO: Add your message handler code here and/or call default
  535. CWnd::OnLButtonDown(nFlags, point);
  536. for (int iCont=0; iCont< m_Numtabs;iCont++)
  537. {
  538. CGuiTab* ct=(CGuiTab*) m_pArray[iCont];
  539. if (ct->rect.PtInRect(point) != 0)
  540. {
  541.             SetCurtab(iCont);
  542. ShowTitle(ct->lpMsg);
  543. return;
  544. }
  545. }
  546. }
  547. void CGuiTabWnd::SetStyle(Style estyle)
  548. {
  549. m_style=estyle;
  550. }
  551. // Modified By SunZhenyu, 2003/10/28, add the next function
  552. CRect CGuiTabWnd::GetTabRect( int m_numtab )
  553. {
  554. if( m_numtab >= 0 && m_numtab < m_Numtabs )
  555. {
  556. CGuiTab* ct=(CGuiTab*) m_pArray[m_numtab];
  557. CRect rect = ct->rect;
  558. ClientToScreen( &rect );
  559. return rect;
  560. }
  561. return CRect(0,0,0,0);
  562. }
  563. // Modified By SunZhenyu, 2003/11/09, add the next function
  564. void CGuiTabWnd::SetSelectTabColor( COLORREF clrBK, COLORREF clrText )
  565. {
  566. m_clrSelectTabBK = clrBK;
  567. m_clrSelectTabText = clrText;
  568. }
  569. // Modified By SunZhenyu, 2003/11/11, add the next 1 function
  570. LRESULT CGuiTabWnd::OnColorChange(WPARAM wParam, LPARAM lParam)
  571. {
  572. SetSelectTabColor( wParam, lParam );
  573. Invalidate( );
  574. return 0L;
  575. }