12

ClistCtrl 在报表视图中设置为单选和单列,没有标题。

我已经尝试过SetItemState(0,LVIS_SELECTED,LVIF_STATE)
SetSelectionMark(int index)但这些都不起作用。

4

6 回答 6

12

您还需要在更新项目状态后调用 SetSelectionMark。

SetItemState(prev_item, ~LVIS_SELECTED, LVIS_SELECTED);
SetItemState(new_selected_item, LVIS_SELECTED, LVIS_SELECTED);
SetSelectionMark(new_selected_item);
于 2010-12-30T18:53:55.040 回答
4

只需将属性->外观->始终显示选择设置为TRUE

于 2014-09-23T09:02:33.287 回答
4

使用 SetItemState(0, LVIS_SELECTED, LVIS_SELECTED) 突出显示,使用 SetItemState(0, ~LVIS_SELECTED, LVIS_SELECTED) 取消突出显示。

于 2009-12-03T20:47:44.103 回答
4

我认为该函数有一个未记录的SetItemState功能,您可以将-1其作为nItem参数传递以使该函数作用于所有项目。

因此,如果您只想选择一个,我可以建议:

    SetItemState(-1, 0, LVIS_SELECTED);
    SetItemState(index, LVIS_SELECTED, LVIS_SELECTED);

更新:

(在看到http://www.verycomputer.com/417_11fcb075491b88c9_1.htm#p3之后)

SetItemState函数发送LVM_SETITEMSTATE消息,并且 nItem=-1 特性记录在消息的参考文档中作为其wParam参数。

于 2016-10-13T13:39:13.110 回答
1

前提是要选择的项目的索引是w_nCurIdx,使用以下代码

m_pSPSMapList.SendMessage(LVM_SETEXTENDEDLISTVIEWSTYLE, 0, LVS_EX_GRIDLINES | LVS_EX_FULLROWSELECT);
m_pSPSMapList.SetItemState(w_nCurIdx, LVIS_SELECTED | LVIS_FOCUSED, LVIS_SELECTED | LVIS_FOCUSED);
于 2021-04-18T19:42:19.223 回答
0

如果您不会在 OnInitialDialog 中设置所选项目,您可以使用以下代码:

m_pSPSMapList->EnsureVisible(nItem, FALSE);
m_pSPSMapList->SetFocus();
m_pSPSMapList->SetItemState(nItem, LVIS_FOCUSED | LVIS_SELECTED, 
                                   LVIS_FOCUSED | LVIS_SELECTED);

return FALSE; // OnInitialDialog necessarily must return false
于 2018-02-06T14:16:41.777 回答