鱼C论坛

 找回密码
 立即注册
查看: 437|回复: 3

[已解决]CListCtrl--LVS_EX_FULLROWSELECT

[复制链接]
发表于 2023-4-29 20:20:38 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 lm68140318 于 2023-4-29 20:22 编辑
  1. SetWindowLong(hWnd4, GWL_STYLE, Styles | LVS_REPORT| LVS_EX_GRIDLINES | LVS_EX_ONECLICKACTIVATE | LVS_SHOWSELALWAYS| LVS_EX_FULLROWSELECT);
  2. mylist4.SetItemState(1, LVIS_SELECTED | LVIS_FOCUSED, LVIS_SELECTED | LVIS_FOCUSED);
复制代码



我的问题:LVS_EX_FULLROWSELECT 已经设置,可是选中时不是显示一行  ??




                               
登录/注册后可看大图
最佳答案
2023-4-29 20:34:53
根据您的问题,看起来您想使用LVS_EX_FULLROWSELECT样式来实现整行选择功能,但似乎没有达到预期的效果。请注意,您在 SetWindowLong 函数中设置了一些样式,但 LVS_EX_FULLROWSELECT 不应该在这里设置。LVS_EX_FULLROWSELECT是一个扩展样式,应该使用 CListCtrl 的 SetExtendedStyle 方法进行设置。

请尝试使用以下代码:

  1. CListCtrl mylist4;
  2. // ... 假设您已经初始化了mylist4

  3. // 设置基本样式
  4. DWORD Styles = mylist4.GetStyle();
  5. SetWindowLong(mylist4.m_hWnd, GWL_STYLE, Styles | LVS_REPORT | LVS_EX_GRIDLINES | LVS_EX_ONECLICKACTIVATE | LVS_SHOWSELALWAYS);

  6. // 设置扩展样式
  7. DWORD ExStyles = mylist4.GetExtendedStyle();
  8. mylist4.SetExtendedStyle(ExStyles | LVS_EX_FULLROWSELECT);

  9. // 选中第一行
  10. mylist4.SetItemState(1, LVIS_SELECTED | LVIS_FOCUSED, LVIS_SELECTED | LVIS_FOCUSED);
复制代码


这样,您的列表控件应该能够实现整行选择的功能。注意,我已经将您的 SetWindowLong 调用修改为使用 CListCtrl 对象的 m_hWnd 成员,而不是直接使用 hWnd4。这是因为您需要操作实际的列表控件窗口。同时,不要忘记包含必要的头文件和库文件,以便正确编译和链接您的代码。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2023-4-29 20:34:53 | 显示全部楼层    本楼为最佳答案   
根据您的问题,看起来您想使用LVS_EX_FULLROWSELECT样式来实现整行选择功能,但似乎没有达到预期的效果。请注意,您在 SetWindowLong 函数中设置了一些样式,但 LVS_EX_FULLROWSELECT 不应该在这里设置。LVS_EX_FULLROWSELECT是一个扩展样式,应该使用 CListCtrl 的 SetExtendedStyle 方法进行设置。

请尝试使用以下代码:

  1. CListCtrl mylist4;
  2. // ... 假设您已经初始化了mylist4

  3. // 设置基本样式
  4. DWORD Styles = mylist4.GetStyle();
  5. SetWindowLong(mylist4.m_hWnd, GWL_STYLE, Styles | LVS_REPORT | LVS_EX_GRIDLINES | LVS_EX_ONECLICKACTIVATE | LVS_SHOWSELALWAYS);

  6. // 设置扩展样式
  7. DWORD ExStyles = mylist4.GetExtendedStyle();
  8. mylist4.SetExtendedStyle(ExStyles | LVS_EX_FULLROWSELECT);

  9. // 选中第一行
  10. mylist4.SetItemState(1, LVIS_SELECTED | LVIS_FOCUSED, LVIS_SELECTED | LVIS_FOCUSED);
复制代码


这样,您的列表控件应该能够实现整行选择的功能。注意,我已经将您的 SetWindowLong 调用修改为使用 CListCtrl 对象的 m_hWnd 成员,而不是直接使用 hWnd4。这是因为您需要操作实际的列表控件窗口。同时,不要忘记包含必要的头文件和库文件,以便正确编译和链接您的代码。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-4-29 21:08:12 | 显示全部楼层


根据您提供的代码,我假设您正在使用Win32 API和MFC的ListView控件。您想要选择整行,但是您的代码似乎无法实现这一点。

有几个可能的原因导致这种情况发生,这里提供一些可能的解决方案:

1. 确保ListView控件的风格设置正确。您已经设置了LVS_EX_FULLROWSELECT,但是需要确保控件本身的样式设置为LVS_REPORT。

2. 确保使用的图像列表中的图像宽度等于或大于ListView控件的列宽。否则,将无法选择整个行。

3. 如果您正在使用虚拟模式,请确保响应LVN_GETDISPINFO通知的消息处理程序正确地设置了项文本。

4. 如果您已经选择了一行,但是它没有高亮显示或显示为选定状态,那么您可以尝试使用ListView_SetSelectionMark函数将选择标记设置为所选行的索引。

5. 最后,您可以尝试在mylist4.SetItemState调用中删除LVIS_FOCUSED标志,因为它可能会干扰整行选择。

希望这些建议能够帮助您解决问题。如果问题仍然存在,请提供更多详细信息,例如ListView控件的创建方式以及其他相关代码。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-4-29 21:45:45 | 显示全部楼层
陶远航 发表于 2023-4-29 21:08
根据您提供的代码,我假设您正在使用Win32 API和MFC的ListView控件。您想要选择整行,但是您的代码似乎 ...

一天100积分秘籍
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-5-1 02:29

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表