GuiWorkTab.cpp
上传用户:wlkj888
上传日期:2022-08-01
资源大小:806k
文件大小:16k
源码类别:

对话框与窗口

开发平台:

Visual C++

  1. /****************************************************************************
  2.  * *  
  3.  * GuiToolKit   *
  4.  *                           (MFC extension) *  
  5.  * Created by Francisco Campos G. www.beyondata.com fcampos@beyondata.com *
  6.  *--------------------------------------------------------------------------*    
  7.  * *
  8.  * This program is free software; so you are free to use it any of your *
  9.  * applications(Freeware, Shareware, Commercial), but leave this header *
  10.  * intact. *
  11.  * *
  12.  * These files are provided "as is" without warranty of any kind. *
  13.  * *
  14.  *        GuiToolKit is forever FREE CODE !!!!! *
  15.  * *
  16.  *--------------------------------------------------------------------------*
  17.  * Created by: Francisco Campos G. *
  18.  * Bug Fixes and improvements :(Add your name) *
  19.  * -Francisco Campos *
  20.  * *
  21.  ****************************************************************************/
  22. #include "stdafx.h"
  23. #include "GuiBaseTab.h"
  24. #include "GuiWorkTab.h"
  25. #include "GuiToolButton.h"
  26. #ifdef _DEBUG
  27. #undef THIS_FILE
  28. static char THIS_FILE[] = __FILE__;
  29. #define new DEBUG_NEW
  30. #endif
  31. #define ID_WTABSPIN 501
  32. #define ID_SCROLLWINDOW 0x9666
  33. #define  SPACE_TAB 4
  34. #define  DEFAULT_FLAT 18
  35. //////////////////////////////////////////////////////////////////////
  36. // Construction/Destruction
  37. #define MIN_SCROLL ::GetSystemMetrics(SM_CXHSCROLL)*2
  38. #define SCROLLLEFT  0x889
  39. #define SCROLLRIGHT 0x890
  40. CGuiWorkTab::CGuiWorkTab()
  41. {
  42. SetStyle(CGuiTabWnd::SHADOW);
  43. m_cfont.CreateFont(14, 0, 0, 0, 400, 0, 0, 0, 0, 1, 2, 1, 34, _T("Arial"));
  44. m_deplaza = 0;
  45. m_btndesplaza.SetRectEmpty();
  46. bIniciaArrastre = FALSE;
  47. m_EnableL = FALSE;
  48. m_EnableR = FALSE;
  49. }
  50. CGuiWorkTab::~CGuiWorkTab()
  51. {
  52. }
  53. BEGIN_MESSAGE_MAP(CGuiWorkTab, CGuiTabWnd)
  54.   ON_WM_HSCROLL()
  55.   ON_WM_LBUTTONDOWN()
  56.   ON_WM_LBUTTONUP()
  57.   ON_WM_MOUSEMOVE()
  58.   ON_WM_SETCURSOR()
  59.   ON_WM_SYSCOLORCHANGE()
  60.   ON_COMMAND(SCROLLLEFT, OnSpiNiz)
  61.   ON_COMMAND(SCROLLRIGHT, OnSpiNde)
  62.    ON_WM_PAINT()
  63. ON_WM_WINDOWPOSCHANGING()
  64. ON_WM_SIZE()
  65. END_MESSAGE_MAP()
  66. void CGuiWorkTab::PintaSeparador(CDC* dc)
  67. {
  68. CRect m_rClient = m_rectTab;
  69. // se pinta el boton de desplazamiento
  70. if (m_btndesplaza.IsRectNull())
  71. {
  72. m_rClient.left    = m_rClient.Width()/2;
  73. m_rClient.top    -= 3;
  74. m_rClient.left   -= 5;
  75. m_rClient.right   = m_rClient.left + 5;
  76. m_rClient.bottom -= 1;
  77. m_btndesplaza     = m_rClient;
  78. m_scroll.SetWindowPos(NULL, m_btndesplaza.right,
  79. m_rectTab.top, m_rectTab.right- (m_rClient.left + 5), m_rectTab.Height() - 1,
  80. SWP_NOACTIVATE | SWP_NOCOPYBITS);         
  81. m_scroll.Invalidate();
  82. m_scroll.UpdateWindow();
  83. return;
  84. }
  85. else
  86. {
  87. CRect rcCli;
  88. GetClientRect(&rcCli);
  89. if (m_btndesplaza.left + 40 > rcCli.right)
  90. {
  91. m_btndesplaza.left= rcCli.right - 40;
  92. m_btndesplaza.right = m_btndesplaza.left + 5;
  93. }
  94. m_btndesplaza.top = m_rectTab.top;
  95. m_btndesplaza.bottom = m_rectTab.bottom;
  96. m_rClient = m_btndesplaza;
  97. }
  98. if (!bIniciaArrastre)
  99. {
  100. dc->Draw3dRect(m_rClient, ::GetSysColor(BLACK_PEN),
  101. ::GetSysColor(COLOR_BTNHIGHLIGHT));
  102. m_rClient.DeflateRect(1, 1);
  103. dc->Draw3dRect(m_rClient, ::GetSysColor(COLOR_BTNHIGHLIGHT),
  104. ::GetSysColor(COLOR_BTNSHADOW));
  105. }
  106. }
  107. void CGuiWorkTab::OnSpiNiz()
  108. {
  109. if (m_EnableL == TRUE)
  110. {
  111. m_PresLeft   = TRUE;
  112. m_PresRight  = FALSE;
  113. m_deplaza   += 10;
  114. CClientDC dc(this);
  115. Drawtabs(&dc);
  116. }
  117. }
  118. void CGuiWorkTab::OnSpiNde()
  119. {
  120. if (m_EnableR == TRUE)
  121. {
  122. m_PresLeft = FALSE;
  123. m_PresRight = TRUE;
  124. m_deplaza -= 10; 
  125. CClientDC dc(this);
  126. Drawtabs(&dc);
  127. }
  128. }
  129. void CGuiWorkTab::OnPaint() 
  130. {
  131. CPaintDC dc(this); // device context for painting
  132. CBrush cbr;
  133. CRect m_rectDraw;
  134. cbr.CreateSolidBrush(GuiDrawLayer::GetRGBColorXP());
  135. GetClientRect(m_rectCliente);
  136. m_rectTab = m_rectCliente;
  137. m_rectDraw = m_rectCliente;
  138. if (m_alnTab == ALN_BOTTOM)
  139. m_rectDraw.bottom = m_rectCliente.bottom- (m_sizeImag.cy + SPACE_TAB + 2);
  140. CRect rc = m_rectDraw;
  141. rc.top += 1;
  142. rc.bottom = rc.top + 1;
  143. dc.Draw3dRect(rc, GuiDrawLayer::GetRGBColorFace(m_StyleDisplay), GuiDrawLayer::GetRGBColorFace(m_StyleDisplay));
  144. if (m_alnTab == ALN_BOTTOM)
  145. {
  146. m_rectCliente.bottom = m_rectCliente.bottom- (DEFAULT_FLAT);
  147. m_rectTab.top = m_rectCliente.bottom + 2;
  148. }
  149. cbr.DeleteObject();
  150. Drawtabs(&dc);
  151. }
  152. void CGuiWorkTab::Drawtabs(CDC* dc)
  153. {
  154. int m_StrPos      = 0;
  155. BOOL m_ViewAlltab = TRUE;
  156. CRect m_rClient;
  157. CBrush cbr;
  158. CPen cp(PS_SOLID, 1,::GetSysColor(COLOR_BTNSHADOW));
  159. int m_ianchoScroll=::GetSystemMetrics(SM_CXHSCROLL) * 2;
  160. m_EnableR = TRUE;
  161. m_EnableL = TRUE;
  162. cbr.CreateSolidBrush(m_wd.GetRGBColorXP());
  163. GetClientRect(m_rClient);
  164. CRect rectT = m_rectTab;
  165. rectT.right = m_btndesplaza.left;
  166. rectT.right += 4;
  167. if (!::IsWindow(m_toolBtn[0].GetSafeHwnd()))
  168. {
  169. CRect r = m_rectTab;
  170. r.right = r.left + 35;
  171. r.top += 1;
  172. // r.bottom-=1;
  173. if (!m_img.Create(IDB_GUI_DOCKBAR, 9, 11, RGB(255, 0, 255)))
  174. {
  175. TRACE0("error imagelist");
  176. }
  177. m_toolBtn[0].Create(_T(""), 
  178. WS_VISIBLE | WS_CHILD | BS_PUSHBUTTON | BS_OWNERDRAW, 
  179. CRect(0, 0, 0, 0), this, SCROLLLEFT);
  180. m_toolBtn[0].SetToolTip(_T("Scroll Left"));
  181. m_toolBtn[0].SethIcon(m_img.ExtractIcon(4));
  182. m_toolBtn[0].ShowDark(FALSE);
  183. m_toolBtn[0].SetWait(1000);
  184. m_toolBtn[1].Create(_T(""), 
  185. WS_VISIBLE | WS_CHILD | BS_PUSHBUTTON | BS_OWNERDRAW, 
  186. CRect(0, 0, 0, 0), this, SCROLLRIGHT);
  187. m_toolBtn[1].SetToolTip(_T("Scroll Right"));
  188. m_toolBtn[1].SethIcon(m_img.ExtractIcon(2));
  189. m_toolBtn[1].ShowDark(FALSE);
  190. m_toolBtn[1].SetWait(1000);
  191. }
  192. if(m_StyleDisplay== GUISTYLE_2003)
  193. {
  194. CGradient M(CSize(rectT.Width(),rectT.Height()+1));
  195. M.PrepareReverseVertTab(dc,m_StyleDisplay);
  196. M.Draw(dc,0,rectT.bottom-rectT.Height(),0,0,rectT.Width(),rectT.Height(),SRCCOPY);
  197. dc->LineTo(rectT.left, rectT.bottom+3);
  198. dc->MoveTo(rectT.right, rectT.bottom+3);
  199. m_toolBtn[0].StyleDispl(m_StyleDisplay,FALSE);
  200. m_toolBtn[1].StyleDispl(m_StyleDisplay,FALSE);
  201. }
  202. else
  203. {
  204. dc->FillRect(rectT, &cbr);
  205. m_toolBtn[0].SetColor(GuiDrawLayer::GetRGBColorTabs());
  206. m_toolBtn[1].SetColor(GuiDrawLayer::GetRGBColorTabs());
  207. }
  208. CPen* pOldPenGlobal = dc->SelectObject(&cp);
  209. dc->MoveTo(m_rectTab.left, m_rectTab.top);
  210. dc->LineTo(m_btndesplaza.right + 1, m_rectTab.top);
  211. dc->Draw3dRect(m_rClient, ::GetSysColor(COLOR_BTNSHADOW),
  212. ::GetSysColor(COLOR_BTNHIGHLIGHT));
  213. if (!::IsWindow(m_scroll.GetSafeHwnd()))
  214. {
  215. m_scroll.Create(WS_CHILD | WS_VISIBLE | SBS_HORZ, m_rectTab, this, (UINT) -1/*ID_SCROLLWINDOW*/);
  216. }
  217. CSize szBtn_1 = m_toolBtn[0].GetSizeButton();
  218. CSize szBtn_2 = m_toolBtn[0].GetSizeButton();
  219. CRect rcSpin = CRect(0, 0, szBtn_1.cx + szBtn_2.cx + 2, szBtn_1.cy + szBtn_2.cy);
  220. m_StrPos = rcSpin.Width();
  221. if ((m_btndesplaza.left < rcSpin.right) && ! m_btndesplaza.IsRectEmpty())
  222. {
  223. m_btndesplaza.left = rcSpin.right + 5;
  224. m_btndesplaza.right = m_btndesplaza.left + 5;
  225. }
  226. PintaSeparador(dc);
  227. int m_Space = 8;
  228. int m_Pos   = 10;
  229. int m_right = m_StrPos;
  230. if (m_iMinValRec - 26 > m_btndesplaza.left) // No existe suficioente espacio para los tabs
  231. {
  232. m_ViewAlltab = FALSE;
  233. // m_spin.EnableScrollBar();
  234. if (m_PresLeft == TRUE)
  235. m_right += m_deplaza;
  236. if (m_PresRight == TRUE)
  237. m_right += m_deplaza;
  238. if (m_deplaza == 0)
  239. {
  240. m_EnableL = FALSE;
  241. m_EnableR = TRUE;
  242. //m_spin.EnableScrollBar(ESB_DISABLE_LTUP);
  243. }
  244. if ((m_iMinValRec + m_deplaza) - 26 <= m_btndesplaza.left)
  245. {
  246. //m_spin.EnableScrollBar(ESB_DISABLE_RTDN);
  247. m_EnableR = FALSE;
  248. m_EnableL = TRUE;
  249. }
  250. }
  251. else
  252. {
  253. m_EnableL = FALSE;
  254. m_EnableR = FALSE;
  255. // m_spin.EnableScrollBar(ESB_DISABLE_BOTH);
  256. m_ViewAlltab = TRUE;
  257. m_deplaza = 0;
  258. }
  259. CRect rectScroll; 
  260. CRgn reg;
  261. CRect rectRecorte;
  262. rectRecorte.left = m_rectTab.left + m_ianchoScroll;
  263. rectRecorte.top = m_rectTab.top;
  264. rectRecorte.bottom = m_rectTab.bottom;
  265. rectRecorte.right = m_btndesplaza.left;
  266. reg.CreateRectRgnIndirect(rectRecorte);
  267. dc->SelectClipRgn(&reg);
  268. for (int iCont = 0; iCont < m_Numtabs; iCont++)
  269. {
  270. //;
  271. CGuiTab* ctb = (CGuiTab*)m_pArray[iCont];
  272. CRect mrt = ctb->rect;
  273. int ancho = mrt.Width();
  274. mrt.left = m_right;
  275. mrt.right = mrt.left + ancho;
  276. CPoint Coor[4];
  277. // dibujar la hoja seleccionada
  278. if (iCont == 0)
  279. {
  280. dc->MoveTo(mrt.left, mrt.top);
  281. dc->LineTo((mrt.left) + m_rectTab.Height()/2, mrt.bottom - 1);
  282. dc->MoveTo((mrt.left) + m_rectTab.Height()/2, mrt.bottom - 1);
  283. dc->LineTo((mrt.right) - m_rectTab.Height()/2, mrt.bottom - 1);
  284. dc->MoveTo((mrt.right) - m_rectTab.Height()/2, mrt.bottom - 1);
  285. if (m_iSelectTab ==iCont)
  286. dc->LineTo(mrt.right - 2, mrt.top + 2);
  287. else
  288. dc->LineTo((mrt.right) - 3, mrt.top+ (m_rectTab.Height()/2));
  289. m_right = mrt.right;
  290. }
  291. else
  292. {
  293. // Se dibuja la hoja siguiente a la seleccionada
  294. // no se dibuja toda la diagonal y no es la ultima hoja
  295. if (iCont - 1 == m_iSelectTab) 
  296. {
  297. dc->MoveTo(mrt.left+ (m_rectTab.Height()/4) + 1, mrt.top + m_rectTab.Height()/2);
  298. dc->LineTo((mrt.left) + m_rectTab.Height()/2, mrt.bottom - 1);
  299. dc->MoveTo((mrt.left) + m_rectTab.Height()/2, mrt.bottom - 1);
  300. dc->LineTo((mrt.right) - m_rectTab.Height()/2, mrt.bottom - 1);
  301. dc->MoveTo((mrt.right) - m_rectTab.Height()/2, mrt.bottom - 1);
  302. if (iCont == m_Numtabs - 1)
  303. dc->LineTo((mrt.right - 2), mrt.top + 2);
  304. else
  305. dc->LineTo((mrt.right) - 3, mrt.top+ (m_rectTab.Height()/2));
  306. }
  307. else
  308. {
  309. dc->MoveTo(mrt.left, mrt.top);
  310. dc->LineTo((mrt.left) + m_rectTab.Height()/2, mrt.bottom - 1);
  311. dc->MoveTo((mrt.left) + m_rectTab.Height()/2, mrt.bottom - 1);
  312. dc->LineTo((mrt.right) - m_rectTab.Height()/2, mrt.bottom - 1);
  313. dc->MoveTo((mrt.right) - m_rectTab.Height()/2, mrt.bottom - 1);
  314. if (iCont == m_iSelectTab || iCont == m_Numtabs - 1)
  315. dc->LineTo((mrt.right - 2), mrt.top + 2);
  316. else
  317. dc->LineTo((mrt.right) - 3, mrt.top + 3+ (m_rectTab.Height()/2));
  318. }
  319. m_right = mrt.right;
  320. }
  321. if (iCont == m_iSelectTab)
  322. {
  323. Coor[0].x = mrt.left;
  324. Coor[0].y = mrt.top;
  325. Coor[1].x = (mrt.left) + m_rectTab.Height()/2;
  326. Coor[1].y = mrt.bottom - 1;
  327. Coor[2].x = (mrt.right) - m_rectTab.Height()/2; 
  328. Coor[2].y = mrt.bottom - 1;
  329. Coor[3].x = (mrt.right - 1);
  330. Coor[3].y = mrt.top + 3;
  331. dc->Polygon(Coor, 4);
  332. dc->SelectStockObject(WHITE_PEN);
  333. dc->SelectObject(&cp);
  334. }
  335. CFont* m_fontOld = dc->SelectObject(&m_cfont);
  336. dc->SetBkMode(TRANSPARENT);
  337. CRect mrtt = mrt;
  338. mrtt.top += 2;
  339. dc->DrawText(ctb->lpMsg, mrtt, DT_SINGLELINE | DT_CENTER | DT_VCENTER);
  340. ctb->rect = mrt;
  341. m_right -= (m_rectTab.Height()/2);
  342. if (!bIniciaArrastre)
  343. {
  344. CRect m_rectCli;
  345. GetClientRect(m_rectCli);
  346. if (m_btndesplaza.left <m_rectCli.left + rcSpin.left + 1)
  347. {
  348. m_btndesplaza.left = m_rectCli.left + rcSpin.left + 5;
  349. m_btndesplaza.right = m_btndesplaza.left + 5;
  350. PintaSeparador(dc);
  351. }
  352. m_scroll.SetWindowPos(NULL, 
  353. m_btndesplaza.right, m_rectTab.top, m_rectCli.right - (m_btndesplaza.left + 5), 
  354. m_rectTab.Height() - 1, SWP_NOACTIVATE | SWP_NOCOPYBITS);         
  355. m_scroll.Invalidate();
  356. m_scroll.UpdateWindow();
  357. CSize szBtn = m_toolBtn[0].GetSizeButton();
  358. m_toolBtn[0].MoveWindow(m_rectTab.left + 1, 
  359. m_rectTab.top + 1, szBtn.cx, m_rectTab.Height() - 2);
  360. CSize szBtn1 = m_toolBtn[1].GetSizeButton();
  361. m_toolBtn[1].MoveWindow(m_rectTab.left + szBtn.cx + 1, m_rectTab.top + 1, 
  362. szBtn1.cx, m_rectTab.Height() - 2);
  363. }
  364. dc->SelectObject(m_fontOld);
  365. }
  366. dc->SelectObject(pOldPenGlobal);
  367. cbr.DeleteObject();
  368. dc->SelectClipRgn(NULL);
  369. m_toolBtn[0].Invalidate();
  370.     m_toolBtn[0].UpdateWindow();
  371. m_toolBtn[1].Invalidate();
  372.     m_toolBtn[1].UpdateWindow();
  373. }
  374. void CGuiWorkTab::OnHScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar) 
  375. {
  376. // TODO: Add your message handler code here and/or call default
  377. //CWnd::OnHScroll(nSBCode, nPos, pScrollBar);
  378. if (pScrollBar->GetSafeHwnd() == m_scroll.GetSafeHwnd())
  379. {
  380. CGuiTab* ct = (CGuiTab*) m_pArray[m_iSelectTab];
  381. CWnd* ViewAc = ct->pParent;
  382. ViewAc->SendMessage(WM_HSCROLL, MAKEWPARAM(nSBCode, nPos));  
  383. SizeScroll();
  384. return;
  385. }
  386.     CClientDC dc(this);
  387. Drawtabs(&dc);
  388. }
  389. BOOL CGuiWorkTab::OnSetCursor(CWnd* pWnd, UINT nHitTest, UINT message) 
  390. {
  391. CPoint ptCurPos;
  392. GetCursorPos(&ptCurPos);
  393. ScreenToClient(&ptCurPos);
  394. if (m_btndesplaza.PtInRect(ptCurPos))
  395. {
  396. SetCursor(LoadCursor(NULL, IDC_SIZEWE));
  397. return TRUE;
  398. }
  399. return CGuiTabWnd::OnSetCursor(pWnd, nHitTest, message);
  400. }
  401. void CGuiWorkTab::OnLButtonDown(UINT nFlags, CPoint point) 
  402. {
  403. // TODO: Add your message handler code here and/or call default
  404. if (m_btndesplaza.PtInRect(point) && !bIniciaArrastre)
  405. {
  406. bIniciaArrastre = TRUE;
  407. SetCapture();
  408. InvalidateRect(m_btndesplaza, TRUE);
  409. }
  410. else
  411. {
  412. CGuiTabWnd::OnLButtonDown(nFlags, point);
  413. CGuiTab* ct = (CGuiTab*) m_pArray[m_iSelectTab];
  414. CWnd* ViewAc = ct->pParent;
  415. int rangmin, rangMax;
  416. ViewAc->GetScrollRange(SB_HORZ, &rangmin, &rangMax);
  417. m_scroll.SetScrollRange(rangmin, rangMax);
  418. m_scroll.SetScrollPos(ViewAc->GetScrollPos(SB_HORZ));
  419. }
  420. }
  421. void CGuiWorkTab::OnLButtonUp(UINT nFlags, CPoint point) 
  422. {
  423. if (bIniciaArrastre == TRUE)
  424. {
  425. bIniciaArrastre = FALSE;
  426. int iDiferencia = m_rectTab.right - 31;
  427. if (point.x < m_rectTab.left + 31)
  428. point.x = m_rectTab.left + 31;
  429. if (point.x > iDiferencia)
  430. point.x= iDiferencia;
  431. m_btndesplaza.left = point.x;
  432. m_btndesplaza.right = m_btndesplaza.left + 5;
  433. ReleaseCapture();
  434. Invalidate();
  435. UpdateWindow();
  436. }
  437. CGuiTabWnd::OnLButtonUp(nFlags, point);
  438. }
  439. void CGuiWorkTab::OnMouseMove(UINT nFlags, CPoint point)
  440. {
  441. CRect m_rectCli;
  442. GetClientRect(m_rectCli);
  443.     if (bIniciaArrastre == TRUE)
  444.     {
  445. int iDiferencia = m_rectCli.right - 31;
  446. if (point.x < m_rectTab.left + 31)
  447. point.x = m_rectTab.left + 31;
  448. if (point.x > iDiferencia)
  449. point.x= iDiferencia;
  450. m_scroll.SetWindowPos(NULL, point.x, 
  451. m_rectTab.top, m_rectCli.right - point.x, m_rectTab.Height() - 1,
  452. SWP_NOACTIVATE | SWP_NOZORDER | SWP_NOCOPYBITS);         
  453. m_scroll.Invalidate();
  454. m_scroll.UpdateWindow();
  455. m_btndesplaza.left = point.x;
  456. m_rectCli = m_btndesplaza;
  457. m_rectCli.left -= 5;
  458. InvalidateRect(m_btndesplaza, TRUE);
  459. UpdateWindow();
  460. }
  461. else
  462. {
  463. CGuiTabWnd::OnMouseMove(nFlags, point);
  464. }
  465. }
  466. void CGuiWorkTab::OnSysColorChange() 
  467. {
  468. CGuiTabWnd::OnSysColorChange();
  469. //m_toolBtn[0].StyleDispl(GuiDrawLayer::m_Style);
  470. //m_toolBtn[1].StyleDispl(GuiDrawLayer::m_Style);
  471. m_toolBtn[0].SetColor(GuiDrawLayer::GetRGBColorFace(GuiDrawLayer::m_Style));
  472. m_toolBtn[1].SetColor(GuiDrawLayer::GetRGBColorFace(GuiDrawLayer::m_Style));
  473. /*m_toolBtn[0].Invalidate();
  474.     m_toolBtn[0].UpdateWindow();
  475. m_toolBtn[1].Invalidate();
  476.     m_toolBtn[1].UpdateWindow();
  477. */
  478. Invalidate();
  479. UpdateWindow();
  480. }
  481. void CGuiWorkTab::OnWindowPosChanging(WINDOWPOS* lpwndpos)
  482. {
  483. CGuiTabWnd::OnWindowPosChanging(lpwndpos);
  484. CGuiTab* ct  = (CGuiTab*) m_pArray[m_iSelectTab];
  485. CWnd* ViewAc = ct->pParent;
  486. }
  487. void CGuiWorkTab::OnSize(UINT nType, int cx, int cy)
  488. {
  489. CGuiTabWnd::OnSize(nType, cx, cy);
  490. SizeScroll();
  491. }
  492. void CGuiWorkTab::SizeScroll()
  493. {
  494. SCROLLINFO sCrollInfo;
  495. ASSERT_VALID(this);
  496. if (!m_pArray.GetSize()) 
  497. return;
  498. CGuiTab* ct  = (CGuiTab*) m_pArray[m_iSelectTab];
  499. CWnd* ViewAc = ct->pParent;
  500. memset(&sCrollInfo, 0, sizeof(SCROLLINFO));
  501. sCrollInfo.cbSize = sizeof(SCROLLINFO);
  502. sCrollInfo.fMask  = SIF_ALL;
  503. ViewAc->GetScrollInfo(SB_HORZ, &sCrollInfo);
  504. if (::IsWindow(m_scroll.GetSafeHwnd()))
  505. m_scroll.SetScrollInfo(&sCrollInfo);
  506. ViewAc->ShowScrollBar(SB_HORZ, FALSE);
  507. ViewAc->ModifyStyle(WS_HSCROLL, 0, SWP_DRAWFRAME);
  508. }