listview 样式 LVS_REPORT 与 LVS_EDITLABELS 编辑单元格时,当前行第一列内容不显示
今天想做一个可编辑单元格的 listview,样式是 LVS_REPORT 与 LVS_EDITLABELS
网上搜索了一些相关资料,照葫芦画瓢写了一个,可测试的时候发现,当从第2列开始编辑的时候,第1列的内容就显示不出来。
网上搜索了一下,有一个网友和我遇到的问题一样: https://stackoverflow.com/questions/8658128/subclassing-list-view-to-edit-only-its-subitems?rq=1
下面是他贴出来的代码:
WNDPROC wpOrigEditProc; RECT rcSubItem;LRESULT CALLBACK WndProcEditList(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam) {switch (uMsg) {case WM_WINDOWPOSCHANGING:{WINDOWPOS *pos = (WINDOWPOS*) lParam;pos->x = rcSubItem.left; // 定位 listview 编辑框的位置pos->cx = rcSubItem.right;}break;default:return CallWindowProc(wpOrigEditProc, hWnd, uMsg, wParam, lParam);}return 1; } LRESULT CALLBACK WndProcList(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam) {static HWND hEdit;static RECT rc;static LVITEM lvI;static unsigned char bEditing = 0;switch (uMsg) {case WM_NOTIFY:switch (((NMHDR*) lParam)->code) {case NM_CLICK:lvI.iItem = ((NMITEMACTIVATE*) lParam)->iItem;lvI.iSubItem = ((NMITEMACTIVATE*) lParam)->iSubItem;break;case NM_DBLCLK:SendMessage(hWnd, LVM_EDITLABEL, lvI.iItem, 0);break;case LVN_BEGINLABELEDIT:{char text[32];bEditing = 1;hEdit = (HWND) SendMessage(hWnd, LVM_GETEDITCONTROL, 0, 0);rcSubItem.top = lvI.iSubItem;rcSubItem.left = LVIR_LABEL;SendMessage(hWnd, LVM_GETSUBITEMRECT, lvI.iItem, (long) &rcSubItem);rcSubItem.right = SendMessage(hWnd, LVM_GETCOLUMNWIDTH, lvI.iSubItem, 0);wpOrigEditProc = (WNDPROC) SetWindowLong(hEdit, GWL_WNDPROC, (long) WndProcEditList);lvI.pszText = text;lvI.cchTextMax = 32;SendMessage(hWnd, LVM_GETITEMTEXT, lvI.iItem, (long) &lvI);SetWindowText(hEdit, lvI.pszText);}break;case LVN_ENDLABELEDIT:bEditing = 0;SetWindowLong(hEdit, GWL_WNDPROC, (long) wpOrigEditProc);if (!lvI.iSubItem) return 1;lvI.pszText = ((NMLVDISPINFO*) lParam)->item.pszText;if (!lvI.pszText) return 1;SendMessage(hWnd, LVM_SETITEMTEXT, lvI.iItem, (long) &lvI);break;default:return CallWindowProc((WNDPROC) GetClassLong(hWnd, GCL_WNDPROC), hWnd, uMsg, wParam, lParam);}break;case WM_PAINT:if (bEditing) {RECT rcItem;if (lvI.iSubItem > 0) {rcItem.left = LVIR_LABEL;if (SendMessage(hWnd, LVM_GETITEMRECT, lvI.iItem, (long) &rcItem))ValidateRect(hWnd, &rcItem);}}default:return CallWindowProc((WNDPROC) GetClassLong(hWnd, GCL_WNDPROC), hWnd, uMsg, wParam, lParam);}return 0; }LRESULT CALLBACK WndProcMain(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam) {static HWND hList;static RECT rc;switch (uMsg) {case WM_NOTIFY:switch (((NMHDR*) lParam)->code) {case NM_CLICK:case NM_DBLCLK:case LVN_BEGINLABELEDIT:case LVN_ENDLABELEDIT:return CallWindowProc(WndProcList, ((NMHDR*) lParam)->hwndFrom, uMsg, wParam, lParam);}break;case WM_CREATE:{LVCOLUMN lvc;LVITEM lvI;unsigned int i;float vertex;char text[32];hList = CreateWindow(WC_LISTVIEW, 0, WS_CHILD | WS_VISIBLE | LVS_REPORT | LVS_EDITLABELS, rc.left, rc.top, rc.right, rc.bottom, hWnd, 0, hInstance, 0);SendMessage(hList, LVM_SETEXTENDEDLISTVIEWSTYLE, 0, LVS_EX_FULLROWSELECT | LVS_EX_GRIDLINES);SetWindowLong(hList, GWL_WNDPROC, (long) WndProcList);lvc.mask = LVCF_WIDTH;lvc.cx = 30;SendMessage(hList, LVM_INSERTCOLUMN, 0, (LPARAM) &lvc);lvc.mask = LVCF_TEXT;lvc.pszText = "Vertex";SendMessage(hList, LVM_INSERTCOLUMN, 1, (LPARAM) &lvc);SendMessage(hList, LVM_SETCOLUMNWIDTH, 1, LVSCW_AUTOSIZE_USEHEADER);lvI.mask = LVIF_TEXT;lvI.pszText = text;for (i = 0; i < 10; i++) {vertex = (float) i;lvI.iItem = i;lvI.iSubItem = 0; sprintf(text, "%d", i);SendMessage(hList, LVM_INSERTITEM, 0, (LPARAM) &lvI);lvI.iSubItem = 1; sprintf(text, "%f, %f, %f", vertex - 1, vertex, vertex + 1);SendMessage(hList, LVM_SETITEM, 0, (LPARAM) &lvI);}}break;case WM_SIZE:GetClientRect(hWnd, &rc);MoveWindow(hList, rc.left, rc.top, rc.right, rc.bottom, 1);SendMessage(hList, LVM_SETCOLUMNWIDTH, 1, LVSCW_AUTOSIZE_USEHEADER);break;case WM_DESTROY:PostQuitMessage(0);break;default:return DefWindowProc(hWnd, uMsg, wParam, lParam);}return 0; }
至于为什么当编辑第2,3,... 列时,当前行的第1列的内容不显示的原因,我还是没找到。
不过我找到了一个解决办法: 就是给 listview 添加一个空白列, 宽度设置为 0
lvc.mask = LVCF_TEXT | LVCF_WIDTH | LVCF_FMT;
lvc.pszText = "";
lvc.cx = 0; //宽度设置为 0
lvc.fmt = LVCFMT_CENTER;
这也是不是办法的办法了,反正我没有更好的解决方案。
名品推荐:歌菲妮 韩锦 米熙
转载于:https://www.cnblogs.com/personnel/p/9407556.html
listview 样式 LVS_REPORT 与 LVS_EDITLABELS 编辑单元格时,当前行第一列内容不显示相关推荐
- LVC函数重要参数 EDT_CLL_CB:退出可编辑单元格时回调
6. I_GRID_SETTINGS 参数属性 该参数用于设置Grid相关参数(打印.单元格回调): 类型为:LVC_S_GLAY,该结构包括: 01) COLL_TOP_P:最小化 TOP_OF_P ...
- java html合并单元格内容居中显示_合并Al:H1单元格区域,使合并的内容居中显示。...
合并Al:H1单元格区域,使合并的内容居中显示. 更多相关问题 峰面积积分法有何特点? 电子邮件的发送和接收实际上是由ISP的()担任的. VFP的一个数据表文件最多允许有()条记录. 卡特尔认为,可 ...
- FineUI大版本升级,外置ExtJS库、去AXD化、表格合计行、表格可编辑单元格的增删改、顶部菜单框架
FineUI v3.3.0 更新的内容非常多,所以一下子从 v3.2.6 连跳 3 个小版本,直接来到了 v3.3.0.详细的更新记录请参考这里:http://fineui.com/version 主 ...
- FineUI大版本升级,外置ExtJS库、去AXD化、表格合计行、表格可编辑单元格的增删改、顶部菜单框架...
FineUI v3.3.0 更新的内容非常多,所以一下子从 v3.2.6 连跳 3 个小版本,直接来到了 v3.3.0.详细的更新记录请参考这里:http://fineui.com/version 主 ...
- FineUI大版本升级,外置ExtJS库、去AXD化、表格合计行、表格可编辑单元格的增删改、顶......
2019独角兽企业重金招聘Python工程师标准>>> FineUI v3.3.0 更新的内容非常多,所以一下子从 v3.2.6 连跳 3 个小版本,直接来到了 v3.3.0.详细的 ...
- Swift - 可编辑表格样例(可直接编辑单元格中内容、移动删除单元格)
(本文代码已升级至Swift3) 本文演示如何制作一个可以编辑单元格内容的表格(UITableView). 1,效果图 (1)默认状态下,表格不可编辑,当点击单元格的时候会弹出提示框显示选中的内容. ...
- WPS无法关闭excel表格,提示:关闭窗口前请先退出编辑单元格内容或格式
WPS无法关闭excel表格,提示关闭窗口前请先退出编辑单元格内容或格式的解决办法: 第一种:按Esc键退出编辑. 第二种:ctrl+alt+delete快捷键打开"任务管理器", ...
- Flex DataGrid双击编辑单元格
flex中的 DataGrid是支持单击编辑单元格内容的,不过这确实不够方便,单击是选中数据的,怎么能变成修改呢!在网上查了看,利用一个 DataGrid组件,可以实现双击修改 此组件源码为: Dou ...
- 如何设置编辑QTableView单元格时的字体颜色
目录 问题: 方案: 原理: 效果: 代码示例见我的资源 问题: 某项目中遇到了一个问题:当我编辑QTableview的单元格时,单元格的字体与背景变得颜色相近,以至看不清楚. 方案: 本来的想法是用 ...
最新文章
- 基于概率论的生成式建模新模式
- Nature子刊:精胺介导稻瘟病菌侵染水稻叶片的新机制!
- 《SQL Server 2012 T-SQL基础》读书笔记 - 1.背景
- R语言爬取imdb电影海报
- 解决查询时报的cannot be cast to com.credithc.enjoy.manager.OrderResp错误
- 高度固定,行数不固定的文字垂直居中问题
- 计算机安全监控系统,关于计算机安全监控系统的关键技术
- COMP9313 2018s2 Project 3
- Java 结构体之 JavaStruct 使用教程三 JavaStruct 数组进阶
- java unicode32_【JAVA SE基础篇】32.String类入门
- Sentinel初始化监控_分布式系统集群限流_线程数隔离_削峰填谷_流量控制_速率控制_服务熔断_服务降级---微服务升级_SpringCloud Alibaba工作笔记0031
- loadrunner ftp linux,loadrunner ftp协议使用详细步骤
- 微服务:更愉快还是更嘈杂?
- 阻止picker.js插件弹出键盘
- Web UI设计基础
- 【猥琐流】制作一个隐藏在黑页下的大马并且添加后门
- vs code发布1.37,全部换新的图标,这跟java是有仇吧,.java图标无法接受
- 关于Facebook的28件小事
- 慎用php的array_search函数
- Qt调试器出现:the selected debugger may be inappropriate for the inferior的解决方案
热门文章
- 关于机器人方面的sci论文_如何给论文润色?从这两个方面入手
- 本地计算机无法启动,winxp系统下本地计算机无法启动Windows Time服务怎么办
- 不断线一键安装lnmp包
- 日志服务Python消费组实战(三):实时跨域监测多日志库数据
- “性能监视器”监视系统性能的基本设置
- 在Windows 2000下优化Oracle9i性能
- 散列技术之链地址法(基于无序链表)
- Apache Wicket 7.2.0发布
- pgAdminIII使用图解
- 上传文件到服务器端后进一步推送到sftp服务器