今天想做一个可编辑单元格的 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 编辑单元格时,当前行第一列内容不显示相关推荐

  1. LVC函数重要参数 EDT_CLL_CB:退出可编辑单元格时回调

    6. I_GRID_SETTINGS 参数属性 该参数用于设置Grid相关参数(打印.单元格回调): 类型为:LVC_S_GLAY,该结构包括: 01) COLL_TOP_P:最小化 TOP_OF_P ...

  2. java html合并单元格内容居中显示_合并Al:H1单元格区域,使合并的内容居中显示。...

    合并Al:H1单元格区域,使合并的内容居中显示. 更多相关问题 峰面积积分法有何特点? 电子邮件的发送和接收实际上是由ISP的()担任的. VFP的一个数据表文件最多允许有()条记录. 卡特尔认为,可 ...

  3. FineUI大版本升级,外置ExtJS库、去AXD化、表格合计行、表格可编辑单元格的增删改、顶部菜单框架

    FineUI v3.3.0 更新的内容非常多,所以一下子从 v3.2.6 连跳 3 个小版本,直接来到了 v3.3.0.详细的更新记录请参考这里:http://fineui.com/version 主 ...

  4. FineUI大版本升级,外置ExtJS库、去AXD化、表格合计行、表格可编辑单元格的增删改、顶部菜单框架...

    FineUI v3.3.0 更新的内容非常多,所以一下子从 v3.2.6 连跳 3 个小版本,直接来到了 v3.3.0.详细的更新记录请参考这里:http://fineui.com/version 主 ...

  5. FineUI大版本升级,外置ExtJS库、去AXD化、表格合计行、表格可编辑单元格的增删改、顶......

    2019独角兽企业重金招聘Python工程师标准>>> FineUI v3.3.0 更新的内容非常多,所以一下子从 v3.2.6 连跳 3 个小版本,直接来到了 v3.3.0.详细的 ...

  6. Swift - 可编辑表格样例(可直接编辑单元格中内容、移动删除单元格)

    (本文代码已升级至Swift3) 本文演示如何制作一个可以编辑单元格内容的表格(UITableView). 1,效果图 (1)默认状态下,表格不可编辑,当点击单元格的时候会弹出提示框显示选中的内容. ...

  7. WPS无法关闭excel表格,提示:关闭窗口前请先退出编辑单元格内容或格式

    WPS无法关闭excel表格,提示关闭窗口前请先退出编辑单元格内容或格式的解决办法: 第一种:按Esc键退出编辑. 第二种:ctrl+alt+delete快捷键打开"任务管理器", ...

  8. Flex DataGrid双击编辑单元格

    flex中的 DataGrid是支持单击编辑单元格内容的,不过这确实不够方便,单击是选中数据的,怎么能变成修改呢!在网上查了看,利用一个 DataGrid组件,可以实现双击修改 此组件源码为: Dou ...

  9. 如何设置编辑QTableView单元格时的字体颜色

    目录 问题: 方案: 原理: 效果: 代码示例见我的资源 问题: 某项目中遇到了一个问题:当我编辑QTableview的单元格时,单元格的字体与背景变得颜色相近,以至看不清楚. 方案: 本来的想法是用 ...

最新文章

  1. 基于概率论的生成式建模新模式
  2. Nature子刊:精胺介导稻瘟病菌侵染水稻叶片的新机制!
  3. 《SQL Server 2012 T-SQL基础》读书笔记 - 1.背景
  4. R语言爬取imdb电影海报
  5. 解决查询时报的cannot be cast to com.credithc.enjoy.manager.OrderResp错误
  6. 高度固定,行数不固定的文字垂直居中问题
  7. 计算机安全监控系统,关于计算机安全监控系统的关键技术
  8. COMP9313 2018s2 Project 3
  9. Java 结构体之 JavaStruct 使用教程三 JavaStruct 数组进阶
  10. java unicode32_【JAVA SE基础篇】32.String类入门
  11. Sentinel初始化监控_分布式系统集群限流_线程数隔离_削峰填谷_流量控制_速率控制_服务熔断_服务降级---微服务升级_SpringCloud Alibaba工作笔记0031
  12. loadrunner ftp linux,loadrunner ftp协议使用详细步骤
  13. 微服务:更愉快还是更嘈杂?
  14. 阻止picker.js插件弹出键盘
  15. Web UI设计基础
  16. 【猥琐流】制作一个隐藏在黑页下的大马并且添加后门
  17. vs code发布1.37,全部换新的图标,这跟java是有仇吧,.java图标无法接受
  18. 关于Facebook的28件小事
  19. 慎用php的array_search函数
  20. Qt调试器出现:the selected debugger may be inappropriate for the inferior的解决方案

热门文章

  1. 关于机器人方面的sci论文_如何给论文润色?从这两个方面入手
  2. 本地计算机无法启动,winxp系统下本地计算机无法启动Windows Time服务怎么办
  3. 不断线一键安装lnmp包
  4. 日志服务Python消费组实战(三):实时跨域监测多日志库数据
  5. “性能监视器”监视系统性能的基本设置
  6. 在Windows 2000下优化Oracle9i性能
  7. 散列技术之链地址法(基于无序链表)
  8. Apache Wicket 7.2.0发布
  9. pgAdminIII使用图解
  10. 上传文件到服务器端后进一步推送到sftp服务器