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

金融证券系统

开发平台:

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 "GuiLib.h"
  15. #include "resource.h"
  16. #include "GuiListEdit.h"
  17. #define  LST_DELETE 555
  18. #define  LST_INSERT 556
  19. #define  LST_UP     557
  20. #define  LST_DOWN   558
  21. #define  LST_LIST 559
  22. #define  DROPBUTTON 560
  23. // CGuiListEdit
  24. IMPLEMENT_DYNAMIC(CGuiListEdit, CStatic)
  25. CGuiListEdit::CGuiListEdit()
  26. {
  27. m_border=STYLEFRAME;
  28. m_clrface=GuiDrawLayer::GetRGBColorFace();
  29. }
  30. CGuiListEdit::~CGuiListEdit()
  31. {
  32. }
  33. BEGIN_MESSAGE_MAP(CGuiListEdit, CStatic)
  34. ON_COMMAND(LST_DELETE,Delete)
  35. ON_COMMAND(LST_INSERT,Insert)
  36. ON_COMMAND(LST_UP,Up)
  37. ON_COMMAND(LST_DOWN,Down)
  38. ON_WM_PAINT()
  39. ON_WM_CREATE()
  40. ON_WM_SIZE()
  41. ON_NOTIFY(LVN_ENDLABELEDIT, LST_LIST, OnEndlabeleditList)
  42. ON_NOTIFY(NM_DBLCLK, LST_LIST, OnClickList)
  43. END_MESSAGE_MAP()
  44. // CGuiListEdit message handlers
  45. void CGuiListEdit::Delete()
  46. {
  47. //solo nos interesa el seleccionado actualmente
  48. int nItem=m_list->GetNextItem(-1,LVNI_SELECTED);
  49. m_list->DeleteItem(nItem);
  50. }
  51. CString CGuiListEdit::GetText(int nItem)
  52. {
  53. if (nItem < 0) return _T("");
  54. if (nItem > m_list->GetItemCount()) return _T("");
  55. CString m_szA=m_list->GetItemText(nItem,0);
  56. return m_szA;
  57. }
  58. int CGuiListEdit::GetNumItem()
  59. {
  60. return m_list->GetItemCount();
  61. }
  62. void CGuiListEdit::AddItem(CString m_szCad)
  63. {
  64. int nItem=m_list->GetItemCount();
  65. nItem=m_list->InsertItem(nItem,m_szCad);
  66. m_list->SetItemData (nItem, 0);
  67. }
  68. void CGuiListEdit::OnClickList(NMHDR* pNMHDR, LRESULT* pResult)
  69. {
  70. int nActual=m_list->GetNextItem(-1,LVNI_SELECTED);
  71. if (nActual == -1) 
  72. Insert();
  73. }
  74. void CGuiListEdit::Insert()
  75. {
  76. CRect rc;
  77. m_list->SetFocus();
  78. int nItem=m_list->GetItemCount();
  79. nItem=m_list->InsertItem(nItem,_T(""));
  80. m_list->SetItemData (nItem, 0);
  81.     m_list->GetItemRect(0,&rc,LVIS_SELECTED | LVIS_FOCUSED);
  82. CEdit* mEdit=m_list->EditLabel(nItem);
  83. CSize szBtn=m_toolBtn.GetSizeButton();
  84. mEdit->SetWindowPos (NULL, -1, -1,
  85. rc.Width () - 10, rc.Height (),
  86. SWP_NOMOVE | SWP_NOZORDER | SWP_NOACTIVATE);
  87. }
  88. void CGuiListEdit::OnEndlabeleditList(NMHDR* pNMHDR, LRESULT* pResult) 
  89. {
  90. LV_DISPINFO* pDispInfo = (LV_DISPINFO*)pNMHDR;
  91. // TODO: Add your control notification handler code here
  92. LV_ITEM* pItem = &((LV_DISPINFO*)pNMHDR)->item;
  93. CString m_sz=pItem->pszText;
  94. if (!m_sz.IsEmpty())
  95. m_list->SetItemText(pItem->iItem,0,m_sz);
  96. else 
  97. m_list->DeleteItem(pItem->iItem);
  98. *pResult = 0;
  99. }
  100. void CGuiListEdit::Up()
  101. {
  102. int nActual=m_list->GetNextItem(-1,LVNI_SELECTED);
  103. if (nActual == -1) return;
  104. if (nActual > 0)
  105. {
  106. CString m_szA=m_list->GetItemText(nActual,0);
  107. CString m_sz=m_list->GetItemText(nActual-1,0);
  108. m_list->SetItemText(nActual,0,m_sz);
  109. m_list->SetItemText(nActual-1,0,m_szA);
  110. m_list->SetItemState (nActual-1, LVIS_SELECTED | LVIS_FOCUSED, 
  111. LVIS_SELECTED | LVIS_FOCUSED);
  112. }
  113. m_list->SetFocus();
  114. }
  115. void CGuiListEdit::Down()
  116. {
  117. int nActual=m_list->GetNextItem(-1,LVNI_SELECTED);
  118. if (nActual == -1) return;
  119. if (nActual+1 < m_list->GetItemCount())
  120. {
  121. CString m_szA=m_list->GetItemText(nActual,0);
  122. CString m_sz=m_list->GetItemText(nActual+1,0);
  123. m_list->SetItemText(nActual,0,m_sz);
  124. m_list->SetItemText(nActual+1,0,m_szA);
  125. m_list->SetItemState (nActual+1, LVIS_SELECTED | LVIS_FOCUSED, 
  126. LVIS_SELECTED | LVIS_FOCUSED);
  127. }
  128. m_list->SetFocus();
  129. }
  130. void CGuiListEdit::PreSubclassWindow()
  131. {
  132. // TODO: Add your specialized code here and/or call the base class
  133. ModifyStyle(0,BS_OWNERDRAW);
  134. if ( !m_Conta.Create(WS_VISIBLE|WS_CHILD,CRect(0,0,0,0),this,0x9999))
  135. return ;
  136. m_Conta.AddComponen(&m_MiniTool);
  137. /*m_toolBtn.Create(_T(""),WS_VISIBLE | WS_CHILD | BS_PUSHBUTTON | BS_OWNERDRAW,CRect(0,0,0,0),this,DROPBUTTON);
  138. m_toolBtn.SetCaption(_T(" ... "));
  139. m_toolBtn.SetStyleButton(CGuiNormalButton::STL_SEMIFLAT);
  140. */m_list=(CListCtrl*) m_Conta.AddComponen(RUNTIME_CLASS(CListCtrl),LST_LIST,WS_VISIBLE | WS_CHILD);
  141. m_MiniTool.SetImageList(IDB_DOCKBAROFFICE,14,12,RGB(255,0,255));
  142. m_MiniTool.AddButton(9,LST_DOWN,NULL,_T(""),_T("Item Down"));
  143. m_MiniTool.AddButton(11,LST_UP,NULL,_T(""),_T("Item Up"));
  144. m_MiniTool.AddButton(8,LST_DELETE,NULL,_T(""),_T("Delete"));
  145. m_MiniTool.AddButton(10,LST_INSERT,NULL,_T(""),_T("Insert"));
  146. m_MiniTool.AutoSize(TRUE);
  147. m_MiniTool.SetBorder(CGuiMiniTool::STYLEPRESS);
  148. m_MiniTool.SetCaption(_T("Options:"),CGuiMiniTool::ALIGN_LEFT);
  149. m_MiniTool.AlingButtons(CGuiMiniTool::ALIGN_RIGHT);
  150. m_MiniTool.SetColorCaption(RGB(0,0,0));
  151. m_list->ModifyStyleEx(0,WS_EX_CLIENTEDGE);
  152. m_list->ModifyStyle(0,WS_VISIBLE | WS_CHILD | LVS_REPORT | LVS_SINGLESEL | 
  153. LVS_NOCOLUMNHEADER | LVS_EDITLABELS | LVS_SHOWSELALWAYS);
  154. m_list->SendMessage (LVM_SETEXTENDEDLISTVIEWSTYLE, 0, LVS_EX_FULLROWSELECT);
  155. m_list->InsertColumn(0,_T(""));
  156. m_Conta.UsedAllWindow(TRUE);
  157. //m_MiniTool.SetColor(GuiDrawLayer::GetRGBColorXP());
  158. CStatic::PreSubclassWindow();
  159. }
  160. void CGuiListEdit::SetStyle(Border border)
  161. {
  162. m_border=border;
  163. }
  164. void CGuiListEdit::OnPaint()
  165. {
  166. CPaintDC dc(this); // device context for painting
  167. // TODO: Add your message handler code here
  168. // Do not call CStatic::OnPaint() for painting messages
  169. CBrush cbr;
  170. CRect m_rectDraw;
  171. GetClientRect(&m_rectDraw);
  172. cbr.CreateSolidBrush(m_clrface);
  173. dc.FillRect(&m_rectDraw,&cbr);
  174. if (m_border == STYLE3D)
  175. dc.Draw3dRect(m_rectDraw,GuiDrawLayer::GetRGBColorBTNHigh(),
  176. GuiDrawLayer::GetRGBColorShadow());
  177. if (m_border == STYLEPRESS)
  178. {
  179. dc.Draw3dRect(m_rectDraw,GuiDrawLayer::GetRGBColorShadow(),
  180. GuiDrawLayer::GetRGBColorBTNHigh());
  181. }
  182. if (m_border == STYLEFRAME)
  183. {
  184. dc.Draw3dRect(m_rectDraw,GuiDrawLayer::GetRGBColorShadow(),
  185. GuiDrawLayer::GetRGBColorShadow());
  186. }
  187. m_Conta.MoveWindow(0,0,m_rectDraw.Width(),m_rectDraw.Height());
  188. m_list->SetColumnWidth (0, m_rectDraw.Width ()-10);
  189. }
  190. int CGuiListEdit::OnCreate(LPCREATESTRUCT lpCreateStruct)
  191. {
  192. if (CStatic::OnCreate(lpCreateStruct) == -1)
  193. return -1;
  194. // TODO:  Add your specialized creation code here
  195. return 0;
  196. }
  197. void CGuiListEdit::OnSize(UINT nType, int cx, int cy)
  198. {
  199. CStatic::OnSize(nType, cx, cy);
  200. CWnd* pWnd = GetWindow(GW_CHILD);
  201.         if (pWnd != NULL)
  202.         {
  203.             pWnd->MoveWindow(0, 0, cx, cy);
  204.             ASSERT(pWnd->GetWindow(GW_HWNDNEXT) == NULL);
  205. }
  206. //m_Conta.MoveWindow(0,0,cx,cy);
  207. // TODO: Add your message handler code here
  208. }