




免费预览已结束,剩余1页可下载查看
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
编辑子项的CListCtrl类作者:Nobita关键词:可编辑子项 CListCtrl摘 要:本文对CListCtrl控件进行了一个扩展,使它即可以编辑主项(Item),又可以编辑子项(SubItem),并尽量符合CListCtrl的操作习惯。 一、说明大家都知道在MFC中通过给CListCtrl设置LVS_EDITLABELS属性,并且在程序中响应控件的LVN_ENDLABELEDIT消息可以修改列表控件每一行的第一项,也就是主项(Item)。代码如下:void CEditListCtrlSampleDlg:OnEndlabeleditList1(NMHDR* pNMHDR, LRESULT* pResult) LV_DISPINFO* pDispInfo = (LV_DISPINFO*)pNMHDR;/ TODO: Add your control notification handler code here*pResult = TRUE; /TRUE值表示可以修改主项,FALSE值表示不修改主项但是让人郁闷的是,微软留了一手,CListCtrl不支持直接修改子项(SubItem)。无奈之下只好自力更生,对CListCtrl进行扩展。_nmcd.dwDrawStage = CDDS_PREPAINT)*pResult = CDRF_NOTIFYITEMDRAW;else if (pNMLVCustomDraw-nmcd.dwDrawStage = CDDS_ITEMPREPAINT)/ This is the notification message for an item. Well request/ notifications before each subitems prepaint stage.*pResult = CDRF_NOTIFYSUBITEMDRAW;else if (pNMLVCustomDraw-nmcd.dwDrawStage = (CDDS_ITEMPREPAINT | CDDS_SUBITEM)/当前要绘制的主项标识符和子项标识符int iItem = (int)pNMLVCustomDraw-nmcd.dwItemSpec;int iSubItem = pNMLVCustomDraw-iSubItem;CDC* pDC = CDC:FromHandle(pNMLVCustomDraw-nmcd.hdc);CString strItemText = GetItemText(iItem, iSubItem);CRect rcItem, rcText;GetSubItemRect(iItem, iSubItem, LVIR_LABEL, rcItem);rcText = rcItem;CSize size = pDC-GetTextExtent(strItemText);if(strItemText = _T()size.cx = 41; /设置文本高亮矩形rcText.left += 4;rcText.right = rcText.left + size.cx + 6;if(rcText.right rcItem.right)rcText.right = rcItem.right;COLORREF crOldTextColor = pDC-GetTextColor();/绘制项焦点/高亮效果if(m_bFocus)if(m_iItem = iItem) & (m_iSubItem = iSubItem)if(m_bHighLight)pDC-SetTextColor(:GetSysColor(COLOR_HIGHLIGHTTEXT);pDC-FillSolidRect(&rcText, :GetSysColor(COLOR_HIGHLIGHT);pDC-DrawFocusRect(&rcText);/绘制项文本rcItem.left += 6;pDC-DrawText(strItemText, &rcItem, DT_LEFT | DT_VCENTER | DT_SINGLELINE | DT_END_ELLIPSIS | DT_NOCLIP);pDC-SetTextColor(crOldTextColor);*pResult = CDRF_SKIPDEFAULT;/ Weve painted everything.单击一次文本高亮,再单击一次文本开始编辑在WM_LBUTTONDOWN消息处理中实现:void CEditListCtrl:OnLButtonDown(UINT nFlags, CPoint point) m_bFocus = TRUE;LVHITTESTINFO lvhit;lvhit.pt = point;int item = SubItemHitTest(&lvhit);/if (over a item/subitem)if (item != -1 & (lvhit.flags & LVHT_ONITEM)CListCtrl:OnLButtonDown(nFlags, point);if(m_bHighLight & m_iItem = lvhit.iItem & m_iSubItem = lvhit.iSubItem) /第二次单击EditLabel(m_iItem);return;else /第一次单击m_iItem = lvhit.iItem;m_iSubItem = lvhit.iSubItem;m_bHighLight = TRUE;elseif(m_edtItemEdit.m_hWnd = NULL) /未出现文本编辑框时m_bHighLight = FALSE;CListCtrl:OnLButtonDown(nFlags, point);Invalidate(); /强制重绘控件关键的一步,对项文本进行编辑。在以上代码中当执行到EditLabel时将会产生一个编辑框,这时需要将它进行子类化处理,以控制它出现的位置。void CEditListCtrl:OnBeginlabeledit(NMHDR* pNMHDR, LRESULT* pResult) LV_DISPINFO* pDispInfo = (LV_DISPINFO*)pNMHDR;if (m_iSubItem = 0) ASSERT(m_iItem = pDispInfo-item.iItem);CRect rcSubItem;GetSubItemRect( pDispInfo-item.iItem, m_iSubItem, LVIR_BOUNDS, rcSubItem);/get edit control and subclassHWND hWnd= (HWND)SendMessage(LVM_GETEDITCONTROL);ASSERT(hWnd != NULL);VERIFY(m_edtItemEdit.SubclassWindow(hWnd);/move edit control text 4 pixel to the right of org label,/as Windows does it.编辑框定位m_edtItemEdit.m_iXPos = rcSubItem.left + 4;m_edtItemEdit.SetWindowText(GetItemText(pDispInfo-item.iItem, m_iSubItem);*pResult = 0;void CEditListCtrl:OnEndlabeledit(NMHDR* pNMHDR, LRESULT* pResult) LV_DISPINFO* pDispInfo = (LV_DISPINFO*)pNMHDR;LV_ITEM*plvItem = &pDispInfo-item;if (m_iSubItem = 0)if (plvItem-pszText != NULL )SetItemText(plvItem-iItem,m_iSubItem, plvItem-pszText);VERIFY(m_edtItemEdit.UnsubclassWindow()!=NULL);*pResult = 0;/编辑文本时对控件父窗口操作(如单击其
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 泥板画创作员岗位操作技能考核试卷及答案
- 电池测试工成本控制考核试卷及答案
- 连锁超市库存管理系统设计报告
- 陶瓷连锁店顾客反馈分析报告
- 8.6.2直线与平面的垂直 教学设计-2024-2025学年高一下学期数学人教A版(2019)必修第二册
- 噪声与社区环境改善分析报告
- 人教版九年级上册第一单元课题3《走进化学实验室》说课稿(3份打包)
- 认证体系更新趋势报告
- 7.3乙醇和乙酸 教学设计 2023-2024学年高一下学期化学人教版(2019)必修第二册
- 商品分类标准化成本效益分析报告
- join-in-六上-Unit3-Festivals-Part1市公开课一等奖省赛课微课金奖课
- AS9100D-(2016)-标准培训课件
- 设备维保的预防性保养与维护策略
- 【经典阅读】四年级阅读训练-人物描写分析(知识梳理+例文解析)(有答案)
- DIN-EN-10228-3德国探伤标准
- 2022版义务教育艺术(音乐)课标试题及答案
- 采购需求调查报告
- 5E-MAG6700全自动工业分析仪使用说明书A016916
- 森林调查-小班调查(森林资源经营管理)
- 2022年新兴县事业单位考试真题及答案
- dn2000顶管施工组织设计
评论
0/150
提交评论