ListCtrlCl.cpp 14 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658
  1. // ListCtrlCl.cpp : 实现文件
  2. //
  3. #include "stdafx.h"
  4. #include "ListCtrlCl.h"
  5. #include ".\listctrlcl.h"
  6. #define IDC_EDITB 4000
  7. #define IDC_BTN 5000
  8. #define IDC_COMB 6000
  9. struct stColor
  10. {
  11. int nRow;
  12. int nCol;
  13. COLORREF rgb;
  14. };
  15. // CListCtrlCl
  16. IMPLEMENT_DYNAMIC(CListCtrlCl, CListCtrl)
  17. CListCtrlCl::CListCtrlCl()
  18. : m_nRowHeight(0)
  19. , m_fontHeight(12)
  20. , m_fontWith(0)
  21. {
  22. m_color = RGB(0,0,0);
  23. InitializeCriticalSection(&m_SECTION);
  24. m_nRow=-1;
  25. m_nCol=-1;
  26. m_nRowOld=-1;
  27. m_nColOld=-1;
  28. m_nRowMin = 0;
  29. m_nRowMax = 99999;
  30. m_nColMin = 0;
  31. m_nColMax = 99999;
  32. memset( m_nItemType,0,100*4 );
  33. }
  34. CListCtrlCl::~CListCtrlCl()
  35. {
  36. for (POSITION pos = m_ptrListCol.GetHeadPosition();pos!=NULL;)
  37. {
  38. stColor *pColor = (stColor*)m_ptrListCol.GetNext(pos);
  39. delete pColor;
  40. pColor = NULL;
  41. }
  42. m_ptrListCol.RemoveAll();
  43. for (POSITION pos = m_ptrListItem.GetHeadPosition();pos!=NULL;)
  44. {
  45. stColor *pColor = (stColor*)m_ptrListItem.GetNext(pos);
  46. delete pColor;
  47. pColor = NULL;
  48. }
  49. m_ptrListItem.RemoveAll();
  50. for (POSITION pos = m_colTextColor.GetHeadPosition();pos!=NULL;)
  51. {
  52. stColor *pColor = (stColor*)m_colTextColor.GetNext(pos);
  53. delete pColor;
  54. pColor = NULL;
  55. }
  56. m_colTextColor.RemoveAll();
  57. for (POSITION pos = m_ItemTextColor.GetHeadPosition();pos!=NULL;)
  58. {
  59. stColor *pColor = (stColor*)m_ItemTextColor.GetNext(pos);
  60. delete pColor;
  61. pColor = NULL;
  62. }
  63. m_ItemTextColor.RemoveAll();
  64. DeleteCriticalSection( &m_SECTION );
  65. }
  66. BEGIN_MESSAGE_MAP(CListCtrlCl, CListCtrl)
  67. ON_WM_MEASUREITEM()
  68. ON_WM_MEASUREITEM_REFLECT()
  69. ON_NOTIFY_REFLECT(LVN_DELETEALLITEMS, OnLvnDeleteallitems)
  70. ON_WM_LBUTTONDOWN()
  71. ON_WM_KILLFOCUS()
  72. END_MESSAGE_MAP()
  73. // CListCtrlCl 消息处理程序
  74. void CListCtrlCl::PreSubclassWindow()
  75. {
  76. // TODO: 在此添加专用代码和/或调用基类
  77. ModifyStyle(0,LVS_OWNERDRAWFIXED);
  78. CListCtrl::PreSubclassWindow();
  79. CHeaderCtrl *pHeader = GetHeaderCtrl();
  80. m_Header.SubclassWindow(pHeader->GetSafeHwnd());
  81. }
  82. void CListCtrlCl::DrawItem(LPDRAWITEMSTRUCT lpDrawItemStruct)
  83. {
  84. // TODO: 添加您的代码以绘制指定项
  85. //EnterCriticalSection( &m_SECTION );
  86. TCHAR lpBuffer[256];
  87. LV_ITEM lvi;
  88. lvi.mask = LVIF_TEXT | LVIF_PARAM ;
  89. lvi.iItem = lpDrawItemStruct->itemID ;
  90. lvi.iSubItem = 0;
  91. lvi.pszText = lpBuffer ;
  92. lvi.cchTextMax = sizeof(lpBuffer);
  93. VERIFY(GetItem(&lvi));
  94. LV_COLUMN lvc, lvcprev ;
  95. ::ZeroMemory(&lvc, sizeof(lvc));
  96. ::ZeroMemory(&lvcprev, sizeof(lvcprev));
  97. lvc.mask = LVCF_WIDTH | LVCF_FMT;
  98. lvcprev.mask = LVCF_WIDTH | LVCF_FMT;
  99. CDC* pDC;
  100. pDC = CDC::FromHandle(lpDrawItemStruct->hDC);
  101. CRect rtClient;
  102. GetClientRect(&rtClient);
  103. for ( int nCol=0; GetColumn(nCol, &lvc); nCol++)
  104. {
  105. if ( nCol > 0 )
  106. {
  107. // Get Previous Column Width in order to move the next display item
  108. GetColumn(nCol-1, &lvcprev) ;
  109. lpDrawItemStruct->rcItem.left += lvcprev.cx ;
  110. lpDrawItemStruct->rcItem.right += lpDrawItemStruct->rcItem.left;
  111. }
  112. CRect rcItem;
  113. if (!GetSubItemRect(lpDrawItemStruct->itemID,nCol,LVIR_LABEL,rcItem))
  114. continue;
  115. ::ZeroMemory(&lvi, sizeof(lvi));
  116. lvi.iItem = lpDrawItemStruct->itemID;
  117. lvi.mask = LVIF_TEXT | LVIF_PARAM;
  118. lvi.iSubItem = nCol;
  119. lvi.pszText = lpBuffer;
  120. lvi.cchTextMax = sizeof(lpBuffer);
  121. VERIFY(GetItem(&lvi));
  122. CRect rcTemp;
  123. rcTemp = rcItem;
  124. if (nCol==0)
  125. {
  126. rcTemp.left -=2;
  127. }
  128. if ( lpDrawItemStruct->itemState & ODS_SELECTED )
  129. {
  130. pDC->FillSolidRect(&rcTemp, GetSysColor(COLOR_HIGHLIGHT)) ;
  131. pDC->SetTextColor(GetSysColor(COLOR_HIGHLIGHTTEXT)) ;
  132. }
  133. else
  134. {
  135. COLORREF color;
  136. color = GetBkColor();
  137. pDC->FillSolidRect(rcTemp,color);
  138. if (FindColColor(nCol,color))
  139. {
  140. pDC->FillSolidRect(rcTemp,color);
  141. }
  142. if (FindItemColor(nCol,lpDrawItemStruct->itemID,color))
  143. {
  144. pDC->FillSolidRect(rcTemp,color);
  145. }
  146. //pDC->SetTextColor(m_color);
  147. }
  148. pDC->SelectObject(GetStockObject(DEFAULT_GUI_FONT));
  149. UINT uFormat = DT_CENTER ;
  150. if (m_Header.m_Format[nCol]=='0')
  151. {
  152. uFormat = DT_LEFT;
  153. }
  154. else if (m_Header.m_Format[nCol]=='1')
  155. {
  156. uFormat = DT_CENTER;
  157. }
  158. else if (m_Header.m_Format[nCol]=='2')
  159. {
  160. uFormat = DT_RIGHT;
  161. }
  162. TEXTMETRIC metric;
  163. pDC->GetTextMetrics(&metric);
  164. int ofst;
  165. ofst = rcItem.Height() - metric.tmHeight;
  166. rcItem.OffsetRect(0,ofst/2);
  167. pDC->SetTextColor(m_color);
  168. COLORREF color;
  169. if (FindColTextColor(nCol,color))
  170. {
  171. pDC->SetTextColor(color);
  172. }
  173. if (FindItemTextColor(nCol,lpDrawItemStruct->itemID,color))
  174. {
  175. pDC->SetTextColor(color);
  176. }
  177. CFont nFont ,* nOldFont;
  178. nFont.CreateFont(m_fontHeight,m_fontWith,0,0,0,FALSE,FALSE,0,0,0,0,0,0,_TEXT("宋体"));//创建字体
  179. nOldFont = pDC->SelectObject(&nFont);
  180. DrawText(lpDrawItemStruct->hDC, lpBuffer, strlen(lpBuffer),
  181. &rcItem, uFormat) ;
  182. pDC->SelectStockObject(SYSTEM_FONT) ;
  183. }
  184. //LeaveCriticalSection( &m_SECTION );
  185. }
  186. void CListCtrlCl::OnMeasureItem(int nIDCtl, LPMEASUREITEMSTRUCT lpMeasureItemStruct)
  187. {
  188. // TODO: 在此添加消息处理程序代码和/或调用默认值
  189. CListCtrl::OnMeasureItem(nIDCtl, lpMeasureItemStruct);
  190. }
  191. void CListCtrlCl::MeasureItem(LPMEASUREITEMSTRUCT lpMeasureItemStruct)
  192. {
  193. if (m_nRowHeight>0)
  194. {
  195. lpMeasureItemStruct->itemHeight = m_nRowHeight;
  196. }
  197. }
  198. int CListCtrlCl::InsertColumn(int nCol, LPCTSTR lpszColumnHeading, int nFormat /* = LVCFMT_LEFT */, int nWidth /* = -1 */, int nSubItem /* = -1 */)
  199. {
  200. m_Header.m_HChar.Add(lpszColumnHeading);
  201. if (nFormat==LVCFMT_LEFT)
  202. {
  203. m_Header.m_Format = m_Header.m_Format + "0";
  204. }
  205. else if (nFormat==LVCFMT_CENTER)
  206. {
  207. m_Header.m_Format = m_Header.m_Format + "1";
  208. }
  209. else if (nFormat==LVCFMT_RIGHT)
  210. {
  211. m_Header.m_Format = m_Header.m_Format + "2";
  212. }
  213. else
  214. {
  215. m_Header.m_Format = m_Header.m_Format + "1";
  216. }
  217. return CListCtrl::InsertColumn(nCol,lpszColumnHeading,nFormat,nWidth,nSubItem);
  218. }
  219. // Gradient - 渐变系数,立体背景用,不用渐变设为0
  220. void CListCtrlCl::SetHeaderBKColor(int R, int G, int B, int Gradient) //设置表头背景色
  221. {
  222. m_Header.m_R = R;
  223. m_Header.m_G = G;
  224. m_Header.m_B = B;
  225. m_Header.m_Gradient = Gradient;
  226. }
  227. // 设置表头高度
  228. void CListCtrlCl::SetHeaderHeight(float Height) //设置表头高度
  229. {
  230. m_Header.m_Height = Height;
  231. }
  232. bool CListCtrlCl::FindColColor(int col,COLORREF &color) //查找列颜色
  233. {
  234. //EnterCriticalSection( &m_SECTION );
  235. int flag = 0;
  236. for (POSITION pos = m_ptrListCol.GetHeadPosition();pos!=NULL;)
  237. {
  238. stColor *pColor = (stColor*)m_ptrListCol.GetNext(pos);
  239. if (pColor->nCol==col)
  240. {
  241. flag = 1;
  242. color = pColor->rgb;
  243. break;
  244. }
  245. }
  246. //LeaveCriticalSection( &m_SECTION );
  247. if (1==flag)
  248. {
  249. return true;
  250. }
  251. return false;
  252. }
  253. bool CListCtrlCl::FindItemColor(int col,int row,COLORREF &color) //查找颜色
  254. {
  255. //EnterCriticalSection( &m_SECTION );
  256. int flag = 0;
  257. for (POSITION pos = m_ptrListItem.GetHeadPosition();pos!=NULL;)
  258. {
  259. stColor *pColor = (stColor*)m_ptrListItem.GetNext(pos);
  260. if (pColor->nCol==col&&pColor->nRow==row)
  261. {
  262. flag = 1;
  263. color = pColor->rgb;
  264. break;
  265. }
  266. }
  267. //LeaveCriticalSection( &m_SECTION );
  268. if (1==flag)
  269. {
  270. return true;
  271. }
  272. return false;
  273. }
  274. void CListCtrlCl::SetColColor(int col,COLORREF color) //设置列颜色
  275. {
  276. stColor *pColor = new stColor;
  277. pColor->nCol = col;
  278. pColor->rgb = color;
  279. m_ptrListCol.AddTail(pColor);
  280. }
  281. void CListCtrlCl::SetItemColor(int col,int row,COLORREF color) //设置格子颜色
  282. {
  283. for (POSITION pos = m_ptrListItem.GetHeadPosition();pos!=NULL;)
  284. {
  285. POSITION pos1 = pos;
  286. stColor *pColor = (stColor*)m_ptrListItem.GetNext(pos);
  287. if (pColor->nCol==col&&pColor->nRow==row)
  288. {
  289. delete pColor;
  290. pColor = NULL;
  291. m_ptrListItem.RemoveAt( pos1 );
  292. break;
  293. }
  294. }
  295. stColor *pColor = new stColor;
  296. pColor->nCol = col;
  297. pColor->nRow = row;
  298. pColor->rgb = color;
  299. m_ptrListItem.AddTail(pColor);
  300. }
  301. void CListCtrlCl::SetRowHeigt(int nHeight) //高置行高
  302. {
  303. m_nRowHeight = nHeight;
  304. CRect rcWin;
  305. GetWindowRect(&rcWin);
  306. WINDOWPOS wp;
  307. wp.hwnd = m_hWnd;
  308. wp.cx = rcWin.Width();
  309. wp.cy = rcWin.Height();
  310. wp.flags = SWP_NOACTIVATE | SWP_NOMOVE | SWP_NOOWNERZORDER | SWP_NOZORDER;
  311. SendMessage(WM_WINDOWPOSCHANGED, 0, (LPARAM)&wp);
  312. }
  313. void CListCtrlCl::SetHeaderFontHW(int nHeight,int nWith) //设置头部字体宽和高
  314. {
  315. m_Header.m_fontHeight = nHeight;
  316. m_Header.m_fontWith = nWith;
  317. }
  318. void CListCtrlCl::SetHeaderTextColor(COLORREF color) //设置头部字体颜色
  319. {
  320. m_Header.m_color = color;
  321. }
  322. BOOL CListCtrlCl::SetTextColor(COLORREF cr) //设置字体颜色
  323. {
  324. m_color = cr;
  325. return TRUE;
  326. }
  327. void CListCtrlCl::SetFontHW(int nHeight,int nWith) //设置字体高和宽
  328. {
  329. m_fontHeight = nHeight;
  330. m_fontWith = nWith;
  331. }
  332. void CListCtrlCl::SetColTextColor(int col,COLORREF color)
  333. {
  334. stColor *pColor = new stColor;
  335. pColor->nCol = col;
  336. pColor->rgb = color;
  337. m_colTextColor.AddTail(pColor);
  338. }
  339. bool CListCtrlCl::FindColTextColor(int col,COLORREF &color)
  340. {
  341. //EnterCriticalSection( &m_SECTION );
  342. int flag = 0;
  343. for (POSITION pos = m_colTextColor.GetHeadPosition();pos!=NULL;)
  344. {
  345. stColor *pColor = (stColor*)m_colTextColor.GetNext(pos);
  346. if (pColor->nCol==col)
  347. {
  348. flag = 1;
  349. color = pColor->rgb;
  350. break;
  351. }
  352. }
  353. //LeaveCriticalSection( &m_SECTION );
  354. if (1==flag)
  355. {
  356. return true;
  357. }
  358. return false;
  359. }
  360. bool CListCtrlCl::FindItemTextColor(int col,int row,COLORREF &color)
  361. {
  362. //EnterCriticalSection( &m_SECTION );
  363. int flag = 0;
  364. for (POSITION pos = m_ItemTextColor.GetHeadPosition();pos!=NULL;)
  365. {
  366. stColor *pColor = (stColor*)m_ItemTextColor.GetNext(pos);
  367. if (pColor->nCol==col&&pColor->nRow==row)
  368. {
  369. flag = 1;
  370. color = pColor->rgb;
  371. break;
  372. }
  373. }
  374. //LeaveCriticalSection( &m_SECTION );
  375. if (1==flag)
  376. {
  377. return true;
  378. }
  379. return false;
  380. }
  381. void CListCtrlCl::SetItemTextColor(int col,int row,COLORREF color)
  382. {
  383. stColor *pColor = new stColor;
  384. pColor->nCol = col;
  385. pColor->nRow = row;
  386. pColor->rgb = color;
  387. m_ItemTextColor.AddTail(pColor);
  388. }
  389. void CListCtrlCl::OnLvnDeleteallitems(NMHDR *pNMHDR, LRESULT *pResult)
  390. {
  391. LPNMLISTVIEW pNMLV = reinterpret_cast<LPNMLISTVIEW>(pNMHDR);
  392. // TODO: 在此添加控件通知处理程序代码
  393. //EnterCriticalSection( &m_SECTION );
  394. for (POSITION pos = m_ptrListCol.GetHeadPosition();pos!=NULL;)
  395. {
  396. stColor *pColor = (stColor*)m_ptrListCol.GetNext(pos);
  397. delete pColor;
  398. pColor = NULL;
  399. }
  400. m_ptrListCol.RemoveAll();
  401. for (POSITION pos = m_ptrListItem.GetHeadPosition();pos!=NULL;)
  402. {
  403. stColor *pColor = (stColor*)m_ptrListItem.GetNext(pos);
  404. delete pColor;
  405. pColor = NULL;
  406. }
  407. m_ptrListItem.RemoveAll();
  408. for (POSITION pos = m_colTextColor.GetHeadPosition();pos!=NULL;)
  409. {
  410. stColor *pColor = (stColor*)m_colTextColor.GetNext(pos);
  411. delete pColor;
  412. pColor = NULL;
  413. }
  414. m_colTextColor.RemoveAll();
  415. for (POSITION pos = m_ItemTextColor.GetHeadPosition();pos!=NULL;)
  416. {
  417. stColor *pColor = (stColor*)m_ItemTextColor.GetNext(pos);
  418. delete pColor;
  419. pColor = NULL;
  420. }
  421. m_ItemTextColor.RemoveAll();
  422. //LeaveCriticalSection( &m_SECTION );
  423. *pResult = 0;
  424. }
  425. void CListCtrlCl::Edit()
  426. {
  427. EndEdit();
  428. CRect rect;
  429. if(GetSubItemRect(m_nRow,m_nCol,LVIR_LABEL,rect)==FALSE)
  430. return;
  431. int sty=WS_CHILD|WS_CLIPSIBLINGS|WS_EX_TOOLWINDOW|WS_BORDER;
  432. //int sty=WS_CHILD|WS_EX_TOOLWINDOW; //设置编辑框样式
  433. //设置编辑框样式
  434. if(m_edit.Create(sty,rect,this,IDC_EDITB)==FALSE)
  435. return;
  436. CString txt=GetItemText(m_nRow,m_nCol);
  437. m_edit.SetWindowText(txt);//设置编辑框的内容
  438. m_edit.SetFocus();
  439. m_edit.SetSel(0,-1);
  440. m_edit.ShowWindow(SW_SHOW);//显示编辑框
  441. Sleep(100);
  442. }
  443. void CListCtrlCl::EndEdit()
  444. {
  445. if( m_edit )//if(m_nRowOld!=-1&&m_nColOld!=-1)//判断是否为初始时
  446. {
  447. CString str;
  448. m_edit.GetWindowText(str);
  449. SetItemText(m_nRowOld,m_nColOld,str);//设置为编辑后的文件内容
  450. m_edit.DestroyWindow();
  451. }
  452. }
  453. void CListCtrlCl::Btn()
  454. {
  455. EndBtn();
  456. CRect rect;
  457. if(GetSubItemRect(m_nRow,m_nCol,LVIR_LABEL,rect)==FALSE)
  458. return;
  459. int sty=WS_CHILD|WS_VISIBLE|BS_PUSHBUTTON;
  460. //int sty=WS_CHILD|WS_EX_TOOLWINDOW; //设置编辑框样式
  461. //设置编辑框样式
  462. rect.left = rect.right-20;
  463. CString txt=GetItemText(m_nRow,m_nCol);
  464. if(m_Btn.Create("...",sty,rect,this,IDC_BTN)==FALSE)
  465. return;
  466. m_Btn.ShowWindow(SW_SHOW);//显示编辑框
  467. //Sleep(100);
  468. }
  469. void CListCtrlCl::EndBtn()
  470. {
  471. if( m_Btn )
  472. m_Btn.DestroyWindow();
  473. }
  474. void CListCtrlCl::Comb()
  475. {
  476. EndComb();
  477. CRect rect;
  478. if(GetSubItemRect(m_nRow,m_nCol,LVIR_LABEL,rect)==FALSE)
  479. return;
  480. int sty=WS_CHILD | WS_VISIBLE | WS_VSCROLL | CBS_DROPDOWNLIST;
  481. //int sty=WS_CHILD|WS_EX_TOOLWINDOW; //设置编辑框样式
  482. //设置编辑框样式
  483. //rect.left = rect.right-20;
  484. if(m_Comb.Create(sty,rect,this,IDC_COMB)==FALSE)
  485. return;
  486. m_Comb.SetWindowPos(NULL, rect.left, rect.top, rect.Width(), 500, SWP_NOZORDER);
  487. m_Comb.ShowWindow(SW_SHOW);//显示编辑框
  488. CString txt=GetItemText(m_nRow,m_nCol);
  489. int nSetCur=0;
  490. CString str;
  491. for( int i=0;i<m_saCombData[m_nCol].GetCount();i++ )
  492. {
  493. str = m_saCombData[m_nCol].GetAt( i );
  494. m_Comb.InsertString( i,str );
  495. if( txt==str )
  496. nSetCur=i;
  497. }
  498. m_Comb.SetCurSel(nSetCur);
  499. //Sleep(100);
  500. }
  501. void CListCtrlCl::EndComb()
  502. {
  503. if( m_Comb )
  504. {
  505. CString str;
  506. m_Comb.GetLBText( m_Comb.GetCurSel(),str );
  507. SetItemText(m_nRowOld,m_nColOld,str);
  508. m_Comb.DestroyWindow();
  509. }
  510. }
  511. void CListCtrlCl::EndAll()
  512. {
  513. EndBtn();
  514. EndEdit();
  515. EndComb();
  516. }
  517. void CListCtrlCl::SetItemType( int iCol,int iType )
  518. {
  519. m_nItemType[iCol] = iType;
  520. }
  521. void CListCtrlCl::SetRange( int iRowMin,int iRowMax,int iColMin,int iColMax )
  522. {
  523. m_nRowMin = iRowMin;
  524. m_nRowMax = iRowMax;
  525. m_nColMin = iColMin;
  526. m_nColMax = iColMax;
  527. }
  528. void CListCtrlCl::OnLButtonDown(UINT nFlags, CPoint point)
  529. {
  530. LVHITTESTINFO testinfo;
  531. testinfo.pt.x=point.x;
  532. testinfo.pt.y=point.y;
  533. testinfo.flags=LVHT_ONITEMLABEL;//强调点击必是标题
  534. if(SubItemHitTest(&testinfo)<0)
  535. return;
  536. m_nRow=testinfo.iItem;//得到行号
  537. m_nCol=testinfo.iSubItem;//得到列号
  538. if( m_nRow<m_nRowMin || m_nRow>m_nRowMax || m_nCol<m_nColMin || m_nCol>m_nColMax )
  539. return;
  540. if(m_nRow==m_nRowOld&&m_nCol==m_nColOld)//判断是否是前一点击的行列
  541. return;
  542. else
  543. {
  544. EndAll();
  545. switch( m_nItemType[m_nCol] )
  546. {
  547. case 1:
  548. Edit();
  549. break;
  550. case 2:
  551. Btn();
  552. break;
  553. case 3:
  554. Comb();
  555. break;
  556. }
  557. m_nRowOld=m_nRow;
  558. m_nColOld=m_nCol;
  559. }
  560. CListCtrl::OnLButtonDown(nFlags, point);
  561. }
  562. BOOL CListCtrlCl::OnCommand(WPARAM wParam, LPARAM lParam)
  563. {
  564. char ss[20];
  565. switch( HIWORD(wParam) )
  566. {
  567. case BN_CLICKED:
  568. {
  569. //test only!!
  570. //sprintf( ss,"%d",LOWORD(wParam) );
  571. //MessageBox(ss);
  572. //根据不同的 ID 做不同的处理...
  573. switch( LOWORD(wParam) )
  574. {
  575. case IDC_BTN:
  576. ::SendMessage( this->GetParent()->GetSafeHwnd(),WM_MY_BTN,0,0 );
  577. break;
  578. }
  579. }
  580. break;
  581. }
  582. return CListCtrl::OnCommand(wParam, lParam);
  583. }
  584. void CListCtrlCl::OnKillFocus(CWnd* pNewWnd)
  585. {
  586. CListCtrl::OnKillFocus(pNewWnd);
  587. // TODO: 在此处添加消息处理程序代码
  588. //EndAll();
  589. }