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

金融证券系统

开发平台:

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 "GuiMiniTool.h"
  15. #include "GuiDrawLayer.h"
  16. #include "GuiToolButton.h"
  17. #include "resource.h"
  18. #ifdef _DEBUG
  19. #define new DEBUG_NEW
  20. #undef THIS_FILE
  21. static char THIS_FILE[] = __FILE__;
  22. #endif
  23. /////////////////////////////////////////////////////////////////////////////
  24. // CGuiMiniTool
  25. CGuiMiniTool::CGuiMiniTool()
  26. {
  27. m_arrButtons.RemoveAll();
  28. nNumItems=-1;
  29. m_AlingButton=ALIGN_LEFT;
  30. m_AlinTexto=ALIGN_LEFT;
  31. m_clrface=GuiDrawLayer::GetRGBColorXP();
  32. m_bAutoSize=FALSE;
  33. m_bExisteCombo=FALSE;
  34. m_cfont.CreateFont(-11,0,0,0,400,0,0,0,0,1,2,1,34,"MS Sans Serif");
  35. m_clrCaption=GuiDrawLayer::GetRGBColorShadow();
  36. m_Caption=_T("");
  37. msz=CSize(0,0);
  38. }
  39. CGuiMiniTool::~CGuiMiniTool()
  40. {
  41. /* Modified By SunZhenyu 2003/8/22, Add next 9 lines. */
  42. for(int i=0; i<m_arrButtons.GetSize(); i++)
  43. {
  44. CArrButton * p = (CArrButton*)m_arrButtons[i];
  45. if( p && p->m_btipo && p->m_bt )
  46. delete p->m_bt;
  47. if( p )
  48. delete p;
  49. }
  50. m_arrButtons.RemoveAll();
  51. }
  52. BEGIN_MESSAGE_MAP(CGuiMiniTool, CStatic)
  53. //{{AFX_MSG_MAP(CGuiMiniTool)
  54. ON_WM_CREATE()
  55. ON_WM_SIZE()
  56. ON_WM_ERASEBKGND()
  57. ON_WM_PAINT()
  58. ON_WM_SYSCOLORCHANGE()
  59. //}}AFX_MSG_MAP
  60. END_MESSAGE_MAP()
  61. /////////////////////////////////////////////////////////////////////////////
  62. // CGuiMiniTool message handlers
  63. int CGuiMiniTool::OnCreate(LPCREATESTRUCT lpCreateStruct) 
  64. {
  65. if (CStatic::OnCreate(lpCreateStruct) == -1)
  66. return -1;
  67. // TODO: Add your specialized creation code here
  68. return 0;
  69. }
  70. void CGuiMiniTool::OnSysColorChange( )
  71. {
  72. CStatic::OnSysColorChange( );
  73. }
  74. //********************************************************************************
  75. void  CGuiMiniTool::PreSubclassWindow()
  76. {
  77. CStatic::PreSubclassWindow();
  78. }
  79. //********************************************************************************
  80. void  CGuiMiniTool::AddButton(int nIndex,UINT Cmd,CMenu* pMenu,CString m_szCaption,CString m_ToolTip)
  81. {
  82. CGuiToolButton* m_guib=new CGuiToolButton();
  83. nNumItems++;
  84. m_guib->Create(_T(""), WS_VISIBLE | WS_CHILD | BS_PUSHBUTTON | BS_OWNERDRAW, 
  85. CRect(0,0,0,0), this, Cmd);
  86. if (!m_szCaption.IsEmpty())
  87. {
  88. m_guib->SetFont(&m_cfont);
  89. m_guib->SetCaption(m_szCaption);
  90. }
  91. m_arrButtons.SetAtGrow(nNumItems, new CArrButton
  92. (m_guib,m_imgList.ExtractIcon(nIndex),pMenu,m_ToolTip));
  93. RecalLayout();
  94. }
  95. //**************************************************************************
  96. HICON CGuiMiniTool::GetImagIcon(int nNum)
  97. {
  98. return m_imgList.ExtractIcon(nNum);
  99. }
  100. //****************************************************************************
  101. BOOL  CGuiMiniTool::CreateCombo(CGuiComboBoxExt* pControl,UINT nID,int iSize,
  102. DWORD dwStyle)
  103. {
  104. ASSERT(pControl);
  105. if (!pControl->Create(dwStyle, 
  106.   CRect(1,1,iSize,250), this, nID))
  107.    return FALSE;
  108. pControl->m_IsCallMiniTool=TRUE;
  109. nNumItems++;
  110. m_arrButtons.SetAtGrow(nNumItems, new CArrButton(pControl));
  111. RecalLayout();
  112. return TRUE;
  113. }
  114. //********************************************************************************
  115. void  CGuiMiniTool::SetImageList(UINT nBitmapID, int cx, int nGrow, COLORREF crMask)
  116. {
  117. CBitmap cbmp;
  118. BITMAP bmp;
  119. m_imgList.Create(nBitmapID,cx,nGrow,crMask);
  120. cbmp.LoadBitmap(nBitmapID);
  121. cbmp.GetBitmap(&bmp);
  122. m_imgList.Add(&cbmp,crMask);
  123. }
  124. //********************************************************************************
  125. void CGuiMiniTool::AutoSize(BOOL mbAutosize)
  126. {  
  127. m_bAutoSize=mbAutosize;
  128. RecalLayout();
  129. }
  130. //********************************************************************************
  131. void  CGuiMiniTool::DelButton(int nIndex)
  132. {
  133. /* Modified By SunZhenyu 2003/8/22, replace all funtion lines. */
  134. CArrButton * p = (CArrButton*)m_arrButtons[nIndex];
  135. if( p && p->m_btipo && p->m_bt )
  136. delete p->m_bt;
  137. if( p )
  138. delete p;
  139. nNumItems--;
  140. m_arrButtons.RemoveAt(nIndex);
  141. RecalLayout();
  142. /*
  143. nNumItems--;
  144. m_arrButtons.RemoveAt(nIndex,nNumItems);
  145. RecalLayout();
  146. */
  147. }
  148. //********************************************************************************
  149. int   CGuiMiniTool::GetCountButton()
  150. {
  151. return m_arrButtons.GetSize();
  152. }
  153. //********************************************************************************
  154. void  CGuiMiniTool::RecalLayout()
  155. {
  156. if (!GetSafeHwnd()) return;
  157. CRect rcClient;
  158. GetClientRect(rcClient);
  159. rcClient.DeflateRect(1,1);
  160. CRect rctemp=rcClient;
  161. int nTipo=0;
  162. if (m_bAutoSize)
  163. CalcAutoSize(rcClient);
  164. if (msz.cx > 0)
  165. {
  166. if (m_AlinTexto==ALIGN_LEFT)
  167. rctemp.left+=msz.cx;
  168. else
  169. rctemp.right-=msz.cx;
  170. }
  171. for (int i=0; i < nNumItems+1;i++)
  172. {
  173. CArrButton* m_cwnd=(CArrButton*) m_arrButtons [i];
  174. if(m_cwnd->m_btipo== TRUE)  //es un boton
  175. {
  176. CSize sztemp=((CArrButton*) m_arrButtons [i])->m_bt->GetSizeButton();
  177. nTipo=sztemp.cx;
  178. }
  179. else
  180. {
  181. CRect rctemp;
  182. m_cwnd->m_pwnd->GetWindowRect(rctemp);
  183. if (m_bAutoSize)
  184. {
  185. nTipo=m_nResultCombo;
  186. rctemp.right=rctemp.left+nTipo;
  187. }
  188. else
  189. nTipo=rctemp.Width();
  190. }
  191. if (m_AlingButton == ALIGN_RIGHT)
  192. rctemp.left=rctemp.right-nTipo;
  193. else
  194. rctemp.right=rctemp.left+nTipo;
  195. if (m_cwnd->m_btipo==TRUE)
  196. m_cwnd->m_bt->MoveWindow(rctemp);
  197. else
  198. m_cwnd->m_pwnd->MoveWindow(rctemp);
  199. if (m_AlingButton == ALIGN_RIGHT)
  200. rctemp.right-=nTipo;
  201. else
  202. rctemp.left+=nTipo;
  203. }
  204. m_rcDrawTexto=rctemp;
  205. Drawtext();
  206. }
  207. //*********************************************************************
  208. void CGuiMiniTool::AlingButtons(Aling Alingsb)
  209. {
  210. m_AlingButton=Alingsb;
  211. }
  212. void CGuiMiniTool::SetCaption(CString mSzCaption,Aling AlinText)
  213. {
  214. CClientDC dc(this);
  215. m_Caption=mSzCaption;
  216. msz=dc.GetTextExtent(m_Caption,m_Caption.GetLength());
  217. m_AlinTexto=AlinText;
  218. }
  219. void CGuiMiniTool::SetColorCaption(COLORREF clrCaption)
  220. {
  221. m_clrCaption=clrCaption;
  222. }
  223. //*********************************************************************
  224. void CGuiMiniTool::CalcAutoSize(CRect m_rc)
  225. {
  226. m_nResultCombo=0;
  227.     m_nResultButtons=0; 
  228. int m_numCombo=0;
  229. for (int i=0; i < nNumItems+1;i++)
  230. {
  231. if (((CArrButton*) m_arrButtons [i])->m_btipo ==TRUE)
  232. {
  233. CSize sztemp=((CArrButton*) m_arrButtons [i])->m_bt->GetSizeButton();
  234. m_nResultButtons+=sztemp.cx;
  235. }
  236. else
  237. {
  238. m_bExisteCombo=TRUE;
  239. m_numCombo++;
  240. }
  241. }
  242. //calculamos el espacio para los combobox
  243. if (m_bExisteCombo)
  244. {
  245. if (m_nResultButtons+msz.cx > m_rc.Width())  //el espacio no alcanza para los botones
  246. m_nResultCombo=0;
  247. else
  248. {
  249. if ((GetSystemMetrics(SM_CXHTHUMB)+msz.cx) > m_rc.Width()-50)
  250. m_nResultCombo=0;
  251. else
  252. {
  253. m_nResultCombo=m_rc.Width()-(m_nResultButtons+msz.cx);
  254. m_nResultCombo/=m_numCombo;
  255. }
  256. }
  257. }
  258. }
  259. //********************************************************************************
  260. void CGuiMiniTool::SetBorder(Borders Style)
  261. {
  262. m_border=Style;
  263. }  
  264. //********************************************************************************
  265. void CGuiMiniTool::OnPaint() 
  266. {
  267. CPaintDC dc(this); // device context for painting
  268. CBrush cbr;
  269. CRect m_rectDraw;
  270. GetClientRect(&m_rectDraw);
  271. cbr.CreateSolidBrush(m_clrface);
  272. dc.FillRect(&m_rectDraw,&cbr);
  273. if (m_border == STYLE3D)
  274. dc.Draw3dRect(m_rectDraw,GuiDrawLayer::GetRGBColorBTNHigh(),
  275. GuiDrawLayer::GetRGBColorShadow());
  276. if (m_border == STYLEPRESS)
  277. {
  278. dc.Draw3dRect(m_rectDraw,GuiDrawLayer::GetRGBColorShadow(),
  279. GuiDrawLayer::GetRGBColorBTNHigh());
  280. }
  281. if (m_border == STYLEFRAME)
  282. {
  283. dc.Draw3dRect(m_rectDraw,GuiDrawLayer::GetRGBColorShadow(),
  284. GuiDrawLayer::GetRGBColorShadow());
  285. }
  286. Drawtext();
  287. //el flat ya esta
  288. }
  289. //********************************************************************************
  290. void CGuiMiniTool::SetColor(COLORREF m_clrFace)
  291. {
  292. m_clrface=m_clrFace;
  293. for (int i=0; i < nNumItems+1;i++)
  294.      if (((CArrButton*) m_arrButtons [i])->m_btipo ==TRUE)
  295. ((CArrButton*) m_arrButtons [i])->m_bt->SetColor(m_clrface);
  296. else
  297. ((CArrButton*) m_arrButtons [i])->m_pwnd->SetColor(m_clrface);
  298. }
  299. //********************************************************************************
  300. void CGuiMiniTool::OnSize(UINT nType, int cx, int cy) 
  301. {
  302. CStatic::OnSize(nType, cx, cy);
  303. RecalLayout();
  304. // TODO: Add your message handler code here
  305. }
  306. //********************************************************************************
  307. BOOL CGuiMiniTool::OnEraseBkgnd(CDC* pDC) 
  308. {
  309. // TODO: Add your message handler code here and/or call default
  310. return TRUE;
  311. }
  312. //********************************************************************************
  313. CArrButton::CArrButton(CGuiToolButton* m_button,HICON m_hIcon,
  314.    CMenu *pMenu,CString m_ToolTip)
  315. {
  316. m_bt=m_button;
  317. m_bt->SethIcon(m_hIcon);
  318. m_bt->SetToolTip(m_ToolTip);
  319. m_bt->SetMenu(pMenu);
  320. m_btipo=TRUE;
  321. }
  322. //********************************************************************************
  323. CArrButton::CArrButton(CGuiComboBoxExt* m_pComponent)
  324. {
  325. ASSERT(m_pComponent);
  326. m_pwnd=m_pComponent;
  327. m_btipo=FALSE;
  328. }
  329. //********************************************************************************
  330. BOOL CGuiMiniTool::OnCommand(WPARAM wParam, LPARAM lParam)
  331. {
  332. HWND hwnd = (HWND) lParam;
  333. for (int i=0; i < nNumItems+1;i++)
  334. {
  335. if (((CArrButton*) m_arrButtons [i])->m_btipo ==TRUE)
  336. if (((CArrButton*) m_arrButtons [i])->m_bt->m_hWnd
  337. == hwnd)
  338. {
  339. int x=((CArrButton*) m_arrButtons [i])->m_bt->GetDlgCtrlID();
  340. CWnd* pParent= GetParent();
  341. pParent->SendMessage (WM_COMMAND,x);
  342. AfxGetMainWnd()->SendMessage(WM_COMMAND,x);
  343. return TRUE;
  344. }
  345. }
  346. return FALSE;
  347. }
  348. CGuiToolButton* CGuiMiniTool::GetButton(UINT uID_Object)
  349. {
  350. for (int i=0; i < nNumItems+1;i++)
  351. {
  352. if (((CArrButton*) m_arrButtons [i])->m_btipo ==TRUE)
  353. if (((CArrButton*) m_arrButtons [i])->m_bt->GetDlgCtrlID() == (int)(uID_Object))
  354. {
  355. return ((CArrButton*) m_arrButtons [i])->m_bt;
  356. }
  357. }
  358. return NULL;
  359. }
  360. void CGuiMiniTool::Drawtext()
  361. {
  362. CClientDC dc(this);
  363. CRect rc;
  364. GetClientRect(rc);
  365. CFont* m_fontOld=dc.SelectObject(&m_cfont);
  366. int nMode = dc.SetBkMode(TRANSPARENT);
  367. dc.SetTextColor(m_clrCaption);
  368. if(m_AlinTexto==ALIGN_LEFT)
  369. {
  370. rc.left+=5;
  371. dc.DrawText(m_Caption,rc,DT_SINGLELINE|DT_LEFT|DT_VCENTER) ;
  372. }
  373. else
  374. {
  375. m_rcDrawTexto.left=(long)(rc.right-msz.cx*1.1);
  376. m_rcDrawTexto.right=m_rcDrawTexto.left+msz.cx;
  377. dc.DrawText(m_Caption,m_rcDrawTexto,DT_SINGLELINE|DT_RIGHT|DT_VCENTER) ;
  378. }
  379. dc.SetBkMode(nMode);
  380. dc.SelectObject(m_fontOld);
  381. }