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

对话框与窗口

开发平台:

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