NdbControls.cpp
上传用户:romrleung
上传日期:2022-05-23
资源大小:18897k
文件大小:9k
源码类别:

MySQL数据库

开发平台:

Visual C++

  1. /* Copyright (C) 2003 MySQL AB
  2.    This program is free software; you can redistribute it and/or modify
  3.    it under the terms of the GNU General Public License as published by
  4.    the Free Software Foundation; either version 2 of the License, or
  5.    (at your option) any later version.
  6.    This program is distributed in the hope that it will be useful,
  7.    but WITHOUT ANY WARRANTY; without even the implied warranty of
  8.    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  9.    GNU General Public License for more details.
  10.    You should have received a copy of the GNU General Public License
  11.    along with this program; if not, write to the Free Software
  12.    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA */
  13. #include "stdafx.h"
  14. #include "NdbControls.h"
  15. /**
  16. * CNdbControl implementation
  17. */
  18. BOOL CNdbControl::GetRect(LPRECT lprc) const {
  19. _ASSERT(this) ;
  20. return GetClientRect(m_hControl, lprc) ;
  21. BOOL CNdbControl::Resize(LONG x, LONG y, LONG w, LONG h) const {
  22. _ASSERT(this) ;
  23. if(!MoveWindow(m_hControl, x, y, w, h, TRUE))
  24. return FALSE ;
  25. if(m_bVisible){
  26. ShowWindow(m_hControl, SW_SHOW) ;
  27. UpdateWindow(m_hControl) ;
  28. }
  29. return TRUE ;
  30. }
  31. BOOL CNdbControl::Show(BOOL bShow) {
  32. _ASSERT(this) ;
  33. if(bShow){
  34. ShowWindow(m_hControl, SW_SHOW);
  35. m_bVisible = TRUE ;
  36. }else{
  37. ShowWindow(m_hControl, SW_HIDE);
  38. m_bVisible = FALSE ;
  39. }
  40. EnableWindow(m_hControl, bShow) ;
  41. UpdateWindow(m_hControl) ;
  42. return TRUE ;
  43. }
  44. CNdbControl::~CNdbControl(){
  45. DestroyWindow(m_hControl) ;
  46. if(m_hMenu)
  47. DestroyMenu(m_hMenu) ;
  48. }
  49. /**
  50. * CNdbListView implementation
  51. */
  52. BOOL CNdbListView::Create(HINSTANCE hInst, HWND hParent, DWORD dwId, NDB_ITEM_TYPE enType, PNDB_LV pstH, DWORD dwWidth) {
  53. if(!pstH)
  54. return FALSE ;
  55. LV_COLUMN lvC ;
  56. m_hInstance = hInst ;
  57. m_hParent = hParent ;
  58. m_dwId = dwId ;
  59. m_dwWidth = dwWidth ;
  60. m_dwWidth = 100 ;
  61. m_enType = enType;
  62. char* szLabels[MAX_LV_HEADERS] ;
  63. int count = 0 ;
  64. m_hControl = CreateWindowEx(WS_EX_OVERLAPPEDWINDOW, WC_LISTVIEW, TEXT(""), 
  65. WS_VISIBLE | WS_CHILD | WS_BORDER | LVS_REPORT,
  66. 0, 0, 0, 0, m_hParent, (HMENU)m_dwId, hInst, NULL ); 
  67. if(!m_hControl)
  68. return FALSE ;
  69. lvC.mask = LVCF_FMT | LVCF_WIDTH | LVCF_TEXT | LVCF_SUBITEM;
  70. lvC.fmt = LVCFMT_LEFT;
  71. switch(enType){
  72. case ITEM_COMPR_ROOT:
  73. szLabels[0] = pstH->szComputer ;
  74. szLabels[1] = pstH->szHostname ;
  75. szLabels[2] = pstH->szStatus ;
  76. count = 3 ;
  77. break ;
  78. case ITEM_DB_ROOT:
  79. szLabels[0] = pstH->szDatabase ;
  80. szLabels[1] = pstH->szStatus ;
  81. count = 2 ;
  82. break ;
  83. case ITEM_COMPR:
  84. szLabels[0] = pstH->szProcess ;
  85. szLabels[1] = pstH->szDatabase;
  86. szLabels[2] = pstH->szOwner ;
  87. szLabels[3] = pstH->szStatus ;
  88. count = 4 ;
  89. case ITEM_DB:
  90. szLabels[0] = pstH->szProcess ;
  91. szLabels[1] = pstH->szComputer;
  92. szLabels[2] = pstH->szOwner ;
  93. szLabels[3] = pstH->szStatus ;
  94. count = 4 ;
  95. break ;
  96. NDB_DEFAULT_UNREACHABLE ;
  97. }
  98. for(int j = 0 ; j < count ; ++j){
  99. lvC.iSubItem = j ;
  100. lvC.cx = m_dwWidth ;
  101. lvC.pszText = szLabels[j] ;
  102. if(0xFFFFFFFF == ListView_InsertColumn(m_hControl, j, &lvC))
  103. return FALSE ;
  104. }
  105. SendMessage(m_hControl, LVM_SETEXTENDEDLISTVIEWSTYLE, LVS_EX_FULLROWSELECT, 
  106. LVS_EX_FULLROWSELECT );
  107. ShowWindow(m_hControl, SW_SHOW) ;
  108. return TRUE ;
  109. }
  110. /**
  111. * CNdbToolBar implementation
  112. */
  113. /**
  114. * CNdbTreeView implementation
  115. */
  116. BOOL CNdbTreeView::Create(HINSTANCE hInst, HWND hParent, DWORD dwMenuId, DWORD dwId){
  117. if(!CreateTreeView(hInst, hParent, dwId))
  118. return FALSE ;
  119. m_hMenu = LoadMenu(m_hInstance,MAKEINTRESOURCE(dwMenuId)) ;
  120. if(!m_hMenu)
  121. return FALSE ;
  122. return TRUE ;
  123. }
  124. BOOL CNdbTreeView::CreateTreeView(HINSTANCE hInst, HWND hParent, DWORD dwId){
  125. m_hInstance = hInst ;
  126. m_hParent = hParent ;
  127. m_dwId = dwId ;
  128. HIMAGELIST himl ;
  129. HBITMAP hbmp ;
  130. DWORD dwCount = 0 ;
  131.  
  132. m_hControl = CreateWindowEx(WS_EX_OVERLAPPEDWINDOW, WC_TREEVIEW, "Tree View", 
  133.         WS_VISIBLE | WS_CHILD | WS_BORDER | TVS_HASLINES | 
  134. TVS_HASBUTTONS | TVS_LINESATROOT | TVS_SINGLEEXPAND, 
  135.         0, 0, 0, 0, m_hParent, (HMENU)m_dwId, m_hInstance, NULL) ;
  136. if(!m_hControl)
  137. return FALSE ;
  138. if((himl = ImageList_Create(nX, nY, ILC_MASK | ILC_COLOR8, 4, 0)) == NULL) 
  139.         return FALSE ; 
  140. hbmp = LoadBitmap(m_hInstance, MAKEINTRESOURCE(IDI_OPEN)); 
  141. hbmp = (HBITMAP)LoadImage(m_hInstance, MAKEINTRESOURCE(IDB_OPEN), IMAGE_BITMAP, nX, 0, LR_DEFAULTSIZE); 
  142. m_nOpen = ImageList_AddMasked(himl, hbmp, clr); 
  143. DeleteObject(hbmp); 
  144. hbmp = (HBITMAP)LoadImage(m_hInstance, MAKEINTRESOURCE(IDB_CLOSED), IMAGE_BITMAP, 0, 0, LR_DEFAULTSIZE); 
  145. m_nClosed = ImageList_AddMasked(himl, hbmp, clr); 
  146. DeleteObject(hbmp); 
  147. hbmp = (HBITMAP)LoadImage(m_hInstance, MAKEINTRESOURCE(IDB_COMPUTER),IMAGE_BITMAP, 0, 0, LR_DEFAULTSIZE); 
  148. m_nComputer = ImageList_AddMasked(himl, hbmp, clr); 
  149. DeleteObject(hbmp); 
  150. hbmp = (HBITMAP)LoadImage(m_hInstance, MAKEINTRESOURCE(IDB_DATABASE), IMAGE_BITMAP, 0, 0, LR_DEFAULTSIZE); 
  151. m_nDatabase = ImageList_AddMasked(himl, hbmp, clr); 
  152. DeleteObject(hbmp);  
  153. if(ImageList_GetImageCount(himl) < 4) 
  154.         return FALSE ;
  155. TreeView_SetImageList(m_hControl, himl, TVSIL_NORMAL); 
  156. ShowWindow(m_hControl, SW_SHOW) ;
  157. return TRUE ;
  158. }
  159. HTREEITEM CNdbTreeView::AddItem(LPSTR szText, NDB_ITEM_TYPE enType, DWORD dwLVId){
  160.   TVITEM tvi ; 
  161.   TVINSERTSTRUCT tvins ; 
  162. HTREEITEM hti ;
  163. HTREEITEM hTemp ;
  164. int nImage = m_nClosed ;
  165.  
  166.     tvi.mask = TVIF_TEXT | TVIF_IMAGE 
  167.         | TVIF_SELECTEDIMAGE | TVIF_PARAM; 
  168.  
  169.     tvi.pszText = szText; 
  170.     tvi.cchTextMax = lstrlen(szText); 
  171.  
  172. switch(enType){
  173. case ITEM_COMPR_ROOT:
  174. nImage = m_nClosed ;
  175. if(!m_hPrevRoot)
  176. tvins.hParent = TVI_ROOT;
  177. else
  178. tvins.hInsertAfter = m_hPrevRoot ;
  179. break ;
  180. case ITEM_DB_ROOT:
  181. if(!m_hPrevRoot)
  182. tvins.hParent = TVI_ROOT;
  183. else
  184. tvins.hInsertAfter = m_hPrevRoot ;
  185. break ;
  186. case ITEM_COMPR:
  187. nImage = m_nComputer ;
  188. if(!m_hPrevComputersChild || !m_hComputersRoot)
  189. return 0 ;
  190. else
  191. tvins.hInsertAfter = m_hPrevComputersChild ;
  192. tvins.hParent = m_hComputersRoot ;
  193. break ;
  194. case ITEM_DB:
  195. nImage = m_nDatabase ;
  196. if(!m_hPrevComputersChild || !m_hComputersRoot)
  197. return 0 ;
  198. else
  199. tvins.hInsertAfter = m_hPrevDatabasesChild ;
  200. tvins.hParent = m_hDatabasesRoot ;
  201. break ;
  202. NDB_DEFAULT_UNREACHABLE ;
  203. }
  204.     tvi.iImage = nImage ;
  205.     tvi.iSelectedImage = nImage ; 
  206.     tvi.lParam = (LPARAM) dwLVId ; 
  207.     tvins.item = tvi ; 
  208.   
  209.     hTemp = TreeView_InsertItem(m_hControl, &tvins);
  210. if(!hTemp)
  211. return NULL ;
  212. switch(enType){
  213. case ITEM_COMPR_ROOT:
  214. m_hComputersRoot = hTemp ;
  215. break ;
  216. case ITEM_DB_ROOT:
  217. m_hDatabasesRoot = hTemp ;
  218. break ;
  219. case ITEM_COMPR:
  220. m_hPrevComputersChild = hTemp ;
  221. break ;
  222. case ITEM_DB:
  223. m_hPrevComputersChild = hTemp ;
  224. break ;
  225. NDB_DEFAULT_UNREACHABLE ;
  226. }
  227.    
  228.     if (ITEM_COMPR_ROOT != enType && ITEM_DB_ROOT != enType) { 
  229.         hti = TreeView_GetParent(m_hControl, hTemp); 
  230.         tvi.mask = TVIF_IMAGE | TVIF_SELECTEDIMAGE; 
  231.         tvi.hItem = hti; 
  232.         tvi.iImage = m_nClosed; 
  233.         tvi.iSelectedImage = m_nClosed; 
  234.         TreeView_SetItem(m_hControl, &tvi); 
  235.     } 
  236.     
  237. return hTemp ; 
  238. BOOL CNdbControls::Create(HINSTANCE hInst, HWND hParent){
  239. m_hInstance = hInst ;
  240. m_hParent = hParent ;
  241. m_tb.Create(m_hInstance, m_hParent, ID_TOOLBAR, IDB_TOOLBAR) ;
  242. m_sb.Create(m_hInstance, m_hParent, ID_STATUSBAR) ;
  243. m_tv.Create(m_hInstance, m_hParent, IDM_TREEVIEW, ID_TREEVIEW) ;
  244. _assert(AddView("Computers", ITEM_COMPR_ROOT)) ;
  245. _assert(AddView("Databases", ITEM_DB_ROOT)) ;
  246. return TRUE ;
  247. }
  248. BOOL CNdbControls::AddListView(NDB_ITEM_TYPE enType, DWORD dwId){
  249. int count ;
  250. CNdbListView* plv ;
  251. PNDB_LV pst ;
  252. plv = new CNdbListView ;
  253. if(!plv)
  254. return FALSE ;
  255. count = m_map_lvc.GetCount() + m_dwFirstId_lv ;
  256. switch(enType){
  257. case ITEM_COMPR_ROOT:
  258. pst = &m_stlvcRoot ;
  259. break ;
  260. case ITEM_DB_ROOT:
  261. pst = &m_stlvdRoot ;
  262. break ;
  263. case ITEM_COMPR:
  264. pst = &m_stlvc ;
  265. break ;
  266. case ITEM_DB:
  267. pst = &m_stlvd ;
  268. break ;
  269. NDB_DEFAULT_UNREACHABLE ;
  270. }
  271. plv->Create(m_hInstance, m_hParent, dwId, enType, pst, LV_HEADER_WIDTH) ;
  272. m_map_lvc[count] = plv ;
  273. return TRUE ;
  274. }
  275. BOOL CNdbControls::AddView(LPSTR szText, NDB_ITEM_TYPE enType){
  276. DWORD dwId_lv = m_dwNextId_lv ;
  277. if(AddListView(enType, dwId_lv) && m_tv.AddItem(szText, enType, dwId_lv))
  278. m_dwNextId_lv++ ;
  279. else
  280. return FALSE ;
  281. return TRUE ;
  282. };
  283. VOID CNdbControls::ToggleListViews(LPNMTREEVIEW pnmtv){
  284. CNdbListView* plv ;
  285. int count = m_map_lvc.GetCount() + m_dwFirstId_lv ;
  286.     
  287. for(int c = FIRST_ID_LV ; c < count; ++c){
  288. _assert(m_map_lvc.Lookup(c, plv)) ;
  289. if(pnmtv->itemNew.lParam == (c))
  290. plv->Show(TRUE) ;
  291. else
  292. plv->Show(FALSE) ;
  293. }
  294. }
  295. VOID CNdbControls::Resize(){
  296. RECT rc, rcTB, rcSB ;
  297. LONG tw, sw, lx, ly, lw, lh, tvw, tvh ;
  298. CNdbListView* plv ;
  299. int count ; //, id ;
  300. GetClientRect(m_hParent, &rc) ;
  301. m_tb.GetRect(&rcTB) ;
  302. m_sb.GetRect(&rcSB) ;
  303. sw = rcSB.bottom ;
  304. tw = rcTB.bottom ;
  305. m_tb.Resize(0, 0, rc.right, tw) ;
  306. tvw = rc.right / 4 ;
  307. tvh = rc.bottom - sw - tw - BORDER ;
  308. m_tv.Resize(0, tw + BORDER, tvw, tvh) ;
  309. m_sb.Resize(0, tvh, rc.left, sw) ;
  310. lx = tvw + BORDER - 2  ;
  311. ly = tw + BORDER ;
  312. lw = rc.right - tvw - BORDER + 1 ;
  313. lh = tvh ;
  314. count = m_map_lvc.GetCount() + FIRST_ID_LV ;
  315. for(int c = FIRST_ID_LV ; c < count; ++c){
  316.       _assert(m_map_lvc.Lookup(c, plv)) ;
  317.       plv->Resize(lx, ly, lw, lh) ;
  318. }
  319. return ;
  320. }