VFP9调用LVM_ENABLEGROUPVIEW开启ListView组视图返回0问题咨询
VFP9 ListView控件分组功能启用失败的必要配置排查项
- 必须先切换到报表视图
分组功能仅在报表视图下生效,需要先将ListView的View属性设置为3(对应常量LVS_REPORT),图标、列表、小图标视图均不支持分组,未切换视图时发送启用分组的消息不会生效。 - 补充分组和项的绑定逻辑
仅发送LVM_ENABLEGROUPVIEW消息不足以显示分组,启用分组视图后,你还需要先发送LVM_INSERTGROUP消息插入至少一个分组结构,再给每个列表项指定关联的分组ID,分组才会正常渲染。 - 修正API调用的声明与参数传递
原代码中SendMessage的声明存在库名指向错误,VFP中调用时建议使用以下标准写法:#define LVM_FIRST 0x1000 #DEFINE LVM_ENABLEGROUPVIEW (LVM_FIRST + 157) #define LVM_ISGROUPVIEWENABLED (LVM_FIRST + 175) #define LVS_REPORT 3 * 先切换到报表视图 THIS.View = LVS_REPORT DECLARE INTEGER SendMessage IN user32.dll; INTEGER hWnd, INTEGER uMsg, INTEGER wParam, INTEGER lParam * 启用分组,返回值为之前的启用状态,首次调用返回0属于正常情况 lnPrevState = SendMessage(THIS.HWND, LVM_ENABLEGROUPVIEW, 1, 0) * 查询当前分组状态 lnIsEnabled = SendMessage(THIS.HWND, LVM_ISGROUPVIEWENABLED, 0, 0) - 确认通用控件v6版本实际加载状态
控件关于框显示的版本不等于运行时实际加载的comctl32.dll版本,VFP默认加载v5.x版本的通用控件,你需要给VFP9.exe或者编译后的exe添加对应manifest文件强制加载v6版本,也可以通过以下代码验证实际加载版本:DECLARE INTEGER DllGetVersion IN comctl32.dll STRING @pdvi lcVerInfo = REPLICATE(CHR(0), 20) = DllGetVersion(@lcVerInfo) lnMajorVer = CTOBIN(SUBSTR(lcVerInfo, 5, 2), "2rs") * 只有主版本号>=6时分组功能才可用 ? "通用控件主版本号:", lnMajorVer
内容的提问来源于stack exchange,提问作者nigelgomm
相关产品推荐
相关产品推荐

