维护到一个古老的gm工具的时候 需要这个功能 在网上找到一份很好用的代码 贴到这里 再次感谢那位同僚

  1. #pragma once
  2. //#include "OrangeMessage.h"
  3.  
  4. // COrangeEdit
  5.  
  6. class COrangeEdit : public CEdit
  7. {
  8. DECLARE_DYNAMIC(COrangeEdit)
  9.  
  10. public:
  11. COrangeEdit();
  12. virtual ~COrangeEdit();
  13.  
  14. protected:
  15. DECLARE_MESSAGE_MAP()
  16. virtual void PreSubclassWindow();
  17. public:
  18. afx_msg void OnKillFocus(CWnd* pNewWnd);
  19. };
  1. // OrangeEdit.cpp : 实现文件
  2. //
  3.  
  4. #include "stdafx.h"
  5. //#include "ListDemo.h"
  6. #include "OrangeEdit.h"
  7. #include "WindowManager.h"
  8.  
  9. // COrangeEdit
  10.  
  11. IMPLEMENT_DYNAMIC(COrangeEdit, CEdit)
  12.  
  13. COrangeEdit::COrangeEdit()
  14. {
  15.  
  16. }
  17.  
  18. COrangeEdit::~COrangeEdit()
  19. {
  20. }
  21.  
  22. BEGIN_MESSAGE_MAP(COrangeEdit, CEdit)
  23. ON_WM_KILLFOCUS()
  24. END_MESSAGE_MAP()
  25.  
  26. // COrangeEdit 消息处理程序
  27.  
  28. void COrangeEdit::PreSubclassWindow()
  29. {
  30. // TODO: 在此添加专用代码和/或调用基类
  31. CEdit::PreSubclassWindow();
  32. }
  33.  
  34. void COrangeEdit::OnKillFocus(CWnd* pNewWnd)
  35. {
  36. CEdit::OnKillFocus(pNewWnd);
  37.  
  38. // TODO: 在此处添加消息处理程序代码
  39. CWnd* pParent = this->GetParent();
  40.  
  41. ::SendMessage(pParent->GetSafeHwnd(),ORANGE_LVN_ENDEDIT,,);
  42. }
  1. #pragma once
  2. #include "orangeedit.h"
  3. //#include "OrangeMessage.h"
  4. // COrangeListCtrl
  5.  
  6. class COrangeListCtrl : public CListCtrl
  7. {
  8. DECLARE_DYNAMIC(COrangeListCtrl)
  9.  
  10. public:
  11. COrangeListCtrl();
  12. virtual ~COrangeListCtrl();
  13.  
  14. protected:
  15. DECLARE_MESSAGE_MAP()
  16. public:
  17. virtual void DrawItem(LPDRAWITEMSTRUCT lpDrawItemStruct);
  18. afx_msg void OnLButtonDown(UINT nFlags, CPoint point);
  19. protected:
  20. virtual void PreSubclassWindow();
  21. afx_msg LRESULT OnEndEdit(WPARAM wParam,LPARAM lParam);
  22. void MeasureItem(LPMEASUREITEMSTRUCT lpMeasureItemStruct);
  23. afx_msg void OnMeasureItem(int nIDCtl, LPMEASUREITEMSTRUCT lpMeasureItemStruct);
  24. private:
  25. int m_nItem;//主项
  26. int m_nSubItem;//子项
  27. COrangeEdit m_Edit_ctlItem;
  28.  
  29. CFont m_FontItem;
  30. int m_nRowHeight;
  31. public:
  32. void SetRowHeigt(int nHeight);
  33. };
  1. // OrangeListCtrl.cpp : 实现文件
  2. //
  3.  
  4. #include "stdafx.h"
  5. #include "WindowManager.h"
  6. #include "OrangeListCtrl.h"
  7.  
  8. // COrangeListCtrl
  9.  
  10. IMPLEMENT_DYNAMIC(COrangeListCtrl, CListCtrl)
  11.  
  12. COrangeListCtrl::COrangeListCtrl()
  13. {
  14. m_nRowHeight=;
  15. }
  16.  
  17. COrangeListCtrl::~COrangeListCtrl()
  18. {
  19. }
  20.  
  21. BEGIN_MESSAGE_MAP(COrangeListCtrl, CListCtrl)
  22. ON_WM_LBUTTONDOWN()
  23. ON_MESSAGE(ORANGE_LVN_ENDEDIT, OnEndEdit)
  24. ON_WM_MEASUREITEM()
  25. ON_WM_MEASUREITEM_REFLECT()
  26. END_MESSAGE_MAP()
  27.  
  28. // COrangeListCtrl 消息处理程序
  29.  
  30. void COrangeListCtrl::DrawItem(LPDRAWITEMSTRUCT lpDrawItemStruct)
  31. {
  32.  
  33. // TODO: 添加您的代码以绘制指定项
  34. CDC* pDC = CDC::FromHandle(lpDrawItemStruct->hDC);
  35.  
  36. LVITEM lvi = {};
  37. lvi.mask = LVIF_STATE;
  38. lvi.stateMask = LVIS_FOCUSED | LVIS_SELECTED ;
  39. lvi.iItem = lpDrawItemStruct->itemID;
  40. BOOL bGet = GetItem(&lvi);
  41.  
  42. BOOL bHighlight =((lvi.state & LVIS_DROPHILITED)||((lvi.state & LVIS_SELECTED) && ((GetFocus() == this)|| (GetStyle() & LVS_SHOWSELALWAYS))));
  43.  
  44. CRect rcBack = lpDrawItemStruct->rcItem;
  45.  
  46. if( bHighlight ) //高亮显示
  47. {
  48. pDC->SetTextColor(::GetSysColor(COLOR_HIGHLIGHTTEXT));
  49. pDC->SetBkColor(::GetSysColor(COLOR_HIGHLIGHT));
  50. pDC->FillRect(rcBack, &CBrush(::GetSysColor(COLOR_HIGHLIGHT)));
  51. }
  52. else
  53. {
  54.  
  55. pDC->SetTextColor(::GetSysColor(COLOR_WINDOWTEXT));
  56. pDC->FillRect(rcBack, &CBrush(::GetSysColor(COLOR_WINDOW)));
  57.  
  58. }
  59. //绘制文本
  60. CString strText=L"";
  61. CRect rcItem;
  62. if (lpDrawItemStruct->itemAction & ODA_DRAWENTIRE)
  63. {
  64. for (int i = ; i < GetHeaderCtrl()-> GetItemCount();i++)
  65. {
  66. if ( !GetSubItemRect(lpDrawItemStruct->itemID, i, LVIR_LABEL, rcItem ))
  67. continue;
  68. strText = GetItemText( lpDrawItemStruct->itemID, i );
  69.  
  70. pDC->DrawText(strText,strText.GetLength(), &rcItem, DT_LEFT|DT_VCENTER|DT_SINGLELINE|DT_BOTTOM);
  71. }
  72. }
  73.  
  74. }
  75.  
  76. void COrangeListCtrl::OnLButtonDown(UINT nFlags, CPoint point)
  77. {
  78. // TODO: 在此添加消息处理程序代码和/或调用默认值
  79. CListCtrl::OnLButtonDown(nFlags, point);
  80. CRect rcCtrl;
  81. LVHITTESTINFO lvhti;
  82. lvhti.pt = point;
  83. m_nItem =SubItemHitTest(&lvhti);
  84. if (m_nItem == -) return;
  85. m_nSubItem = lvhti.iSubItem;
  86. GetSubItemRect(m_nItem,m_nSubItem,LVIR_LABEL,rcCtrl);
  87. if (m_Edit_ctlItem.m_hWnd == NULL)
  88. {
  89. m_Edit_ctlItem.Create(ES_AUTOHSCROLL|WS_CHILD|ES_LEFT|ES_WANTRETURN|WS_BORDER,CRect(,,,),this,);
  90. m_Edit_ctlItem.ShowWindow(SW_HIDE);
  91.  
  92. m_FontItem.CreateStockObject(DEFAULT_GUI_FONT);
  93. m_Edit_ctlItem.SetFont(&m_FontItem);
  94. m_FontItem.DeleteObject();
  95.  
  96. }
  97. CString strItem=GetItemText(m_nItem,m_nSubItem);
  98. m_Edit_ctlItem.MoveWindow(&rcCtrl);
  99. m_Edit_ctlItem.ShowWindow(SW_SHOW);
  100. m_Edit_ctlItem.SetWindowText(strItem);
  101. m_Edit_ctlItem.SetFocus();
  102. m_Edit_ctlItem.SetSel(-);
  103. }
  104. void COrangeListCtrl::PreSubclassWindow()
  105. {
  106. // TODO: 在此添加专用代码和/或调用基类
  107. ModifyStyle(,LVS_OWNERDRAWFIXED);
  108. CListCtrl::PreSubclassWindow();
  109.  
  110. }
  111.  
  112. LRESULT COrangeListCtrl::OnEndEdit(WPARAM wParam,LPARAM lParam)
  113.  
  114. {
  115.  
  116. CString strText;
  117. m_Edit_ctlItem.GetWindowText(strText);
  118. SetItemText(m_nItem,m_nSubItem,strText);
  119. m_Edit_ctlItem.ShowWindow(SW_HIDE);
  120.  
  121. return ;
  122.  
  123. }
  124.  
  125. void COrangeListCtrl::MeasureItem(LPMEASUREITEMSTRUCT lpMeasureItemStruct)
  126. {
  127. if (m_nRowHeight>)
  128. {
  129. lpMeasureItemStruct->itemHeight = m_nRowHeight;
  130. }
  131. }
  132. void COrangeListCtrl::SetRowHeigt(int nHeight)
  133. {
  134. m_nRowHeight = nHeight;
  135.  
  136. CRect rcWin;
  137. GetWindowRect(&rcWin);
  138. WINDOWPOS wp;
  139. wp.hwnd = m_hWnd;
  140. wp.cx = rcWin.Width();
  141. wp.cy = rcWin.Height();
  142. wp.flags = SWP_NOACTIVATE | SWP_NOMOVE | SWP_NOOWNERZORDER | SWP_NOZORDER;
  143. SendMessage(WM_WINDOWPOSCHANGED, , (LPARAM)&wp);
  144. }
  145.  
  146. void COrangeListCtrl::OnMeasureItem(int nIDCtl, LPMEASUREITEMSTRUCT lpMeasureItemStruct)
  147. {
  148. // TODO: 在此添加消息处理程序代码和/或调用默认值
  149.  
  150. CListCtrl::OnMeasureItem(nIDCtl, lpMeasureItemStruct);
  151. }

mfc 可编辑 list control的更多相关文章

  1. 「Windows MFC 」「Edit Control」 控件

    「Windows MFC 」「Edit Control」 控件

  2. MFC中编辑框Edit Control添加“变量”后

  3. MFC:编辑区 Edit 的属性及使用

    Edit Control 编辑控件是 MFC 中使用较多的控件之一 1. Edit 的属性 Acccept Files -> True 控件接受拖放文件 Multiline -> True ...

  4. MFC 可编辑文本框,MFC控件关联变量总结

    Edit Control控件,默认状态下,按回车会调用OnOK()关闭窗体.解决此bug可以,类视图中单击CMFCApplication3Dlg,下方重写OnOK(),注释掉其中的代码即可. Edit ...

  5. mfc控件——list control的使用

    [前话] 编译原理的第一个实验——词法分析器验收时,老师要求最后的结果用GUI的形式表现出来.想想确实,黑白的控制台应用程序界面在用户操作时的确不如GUI 友好.GUI界面也算是大势所趋.我现在掌握三 ...

  6. MFC可编辑ListBox控件CEditableListBox

    左击选中单元格,右击进入编辑状态. MFC自定义控件的添加方法C#自定义控件编译后就自动出现在工具箱里.MFC的自定义控件需要先拖个基类到对话框上,然后添加一个控件变量.再修改源代码中的控件名为扩展控 ...

  7. MFC可编辑的ListCtrl

    近期由于项目的要求,需要一个可以编辑的列表控件,由于MFC提供的列表控件只支持第一行可编辑,无法满足项目需求,故只能自己动手重写一个列表控件.重写列表控件的思想为:当点击列表的某行某列时,在此处创建一 ...

  8. MFC控件Slider Control的使用

    写MFC界面程序时,今天恰好用到Slider控件,做一个小小的记录. 步骤 1.在工具栏中添加Slider Control控件: 2.在控件上右键->添加变量(Add Variable...), ...

  9. MFC图形编辑界面工具

    一.背景 喔,五天的实训终于结束了,学校安排的这次实训课名称叫高级程序设计实训,但在我看来,主要是学习了Visual C++ .NET所提供的MFC(Microsoft Foundation Clas ...

随机推荐

  1. TI BLE CC2541的SPI主模式

    SPI就是用4条线来串行传输数据, 2541只能用模拟的方式用GPIO来做. //*********************************************************** ...

  2. Calendar的问题

    1. include file is not work now. remove <!-- #include file="Calendar.js" -->, add &l ...

  3. webservice引用spring的bean

    <jaxws:endpoint address="/test/webservice" implementor="#testBean" /> 这行代码 ...

  4. iOS抓包Charles 操作

    今天就来看一下Mac上如何进行抓包,之前有一篇文章介绍了使用Fidder进行抓包 http://blog.csdn.net/jiangwei0910410003/article/details/198 ...

  5. session 加入redis的实现代码方式

    session,中文经常翻译为会话,其本来的含义是 指有始有终的一系列动作/消息,比如打电话时从拿起电话拨号到挂断电话这中间的一系列过程可以称之为一个session.有时候我们可以看到这样的话&quo ...

  6. meta标签部分总结

    <meta>标签用于提供页面的元信息,比如针对搜索引擎和更新频度的描述和关键词.由于看到很多网页<head>里面<meta>标签的内容很多,对这些标签含义了解不太清 ...

  7. YTU 2990: 链表的基本运算(线性表)

    2990: 链表的基本运算(线性表) 时间限制: 1 Sec  内存限制: 128 MB 提交: 1  解决: 1 题目描述 编写一个程序,实现链表的各种基本运算(假设顺序表的元素类型为char),主 ...

  8. JAVA基础知识之网络编程——-基于NIO的非阻塞Socket通信

    阻塞IO与非阻塞IO 通常情况下的Socket都是阻塞式的, 程序的输入输出都会让当前线程进入阻塞状态, 因此服务器需要为每一个客户端都创建一个线程. 从JAVA1.4开始引入了NIO API, NI ...

  9. firefox 最新版地址栏后没有生成二维码的工具

    下载火狐离线安装包50.0.2版本,安装后找不到这个图标了,搜索下载附加组件管理器cpmanager-1.2.13.xpi,提示没有签名无法安装,最后下载了一个较高版本的cpmanager-1.5.5 ...

  10. spark记录

    Filtering multiple values in multiple columns: In the case where you're pulling data from a database ...