lm68140318 发表于 2023-4-29 20:20:38

CListCtrl--LVS_EX_FULLROWSELECT

本帖最后由 lm68140318 于 2023-4-29 20:22 编辑

SetWindowLong(hWnd4, GWL_STYLE, Styles | LVS_REPORT| LVS_EX_GRIDLINES | LVS_EX_ONECLICKACTIVATE | LVS_SHOWSELALWAYS| LVS_EX_FULLROWSELECT);
mylist4.SetItemState(1, LVIS_SELECTED | LVIS_FOCUSED, LVIS_SELECTED | LVIS_FOCUSED);


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



https://i.postimg.cc/TP80CKdT/err.png

isdkz 发表于 2023-4-29 20:34:53

根据您的问题,看起来您想使用LVS_EX_FULLROWSELECT样式来实现整行选择功能,但似乎没有达到预期的效果。请注意,您在 SetWindowLong 函数中设置了一些样式,但 LVS_EX_FULLROWSELECT 不应该在这里设置。LVS_EX_FULLROWSELECT是一个扩展样式,应该使用 CListCtrl 的 SetExtendedStyle 方法进行设置。

请尝试使用以下代码:

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

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

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

// 选中第一行
mylist4.SetItemState(1, LVIS_SELECTED | LVIS_FOCUSED, LVIS_SELECTED | LVIS_FOCUSED);


这样,您的列表控件应该能够实现整行选择的功能。注意,我已经将您的 SetWindowLong 调用修改为使用 CListCtrl 对象的 m_hWnd 成员,而不是直接使用 hWnd4。这是因为您需要操作实际的列表控件窗口。同时,不要忘记包含必要的头文件和库文件,以便正确编译和链接您的代码。

陶远航 发表于 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控件的创建方式以及其他相关代码。

歌者文明清理员 发表于 2023-4-29 21:45:45

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

一天100积分秘籍
页: [1]
查看完整版本: CListCtrl--LVS_EX_FULLROWSELECT