【问题标题】:How do I select an entire row in a CListCtrlEx如何在 CListCtrlEx 中选择整行
【发布时间】:2021-08-11 08:19:38
【问题描述】:

应该怎么做才能在CListCtrlEx 中填充数据后自动选择其中的一行。 目的是在显示CListCtrlEx 时选择默认行。例如,如果显示的数据是城市列表,则显示其中一个城市(可能是之前选择的城市),下次显示控件时默认选中。

【问题讨论】:

    标签: c++ user-interface mfc dialog clistctrl


    【解决方案1】:

    假设m_MyList 是对话框的一部分,我们将以下行添加到OnInitDialog() 并希望选择第一行:

    m_MyList.SendMessage(LVM_SETEXTENDEDLISTVIEWSTYLE, 0, LVS_EX_GRIDLINES | LVS_EX_FULLROWSELECT);
    m_MyList.SetItemState(0, LVIS_SELECTED | LVIS_FOCUSED, LVIS_SELECTED | LVIS_FOCUSED);
    m_MyList.SetFocus();
    return FALSE;  // return TRUE  unless you set the focus to a control
    

    别忘了更改默认值

    return TRUE;
    

    return FALSE;
    

    【讨论】:

    • 打电话SetFocus的原因是什么?选择行不需要。如果您出于某种原因确实想设置焦点,请使用how to set focus in a dialog box。另外,ListView_SetItemState no-op 是怎么回事?
    • @IInspectable 我使用CDialog::GotoDlgCtrl
    • @IInspectable,应该是 ListView_SetItemState(m_Mylist, nItem, LVIS_SELECTED, LVIS_SELECTED); 参见:this link - 是的。没必要,我删了。
    • @ser ModifyStyleEx 更新扩展窗口样式。要设置extended list-view style,您必须发送LVM_SETEXTENDEDLISTVIEWSTYLE 消息。也就是说,我不知道 OP 试图完成的什么。要让列表视图的选择标记始终可见,您通常会使用 LVS_SHOWSELALWAYS list-view style
    • 对不起,我的意思是你可以使用m_MyList.SetExtendStyle(m_MyList.GetExtendStyle() | LVS_EX_GRIDLINES | LVS_EX_FULLROWSELECT);
    猜你喜欢
    • 1970-01-01
    • 2020-02-18
    • 1970-01-01
    • 2020-05-06
    • 1970-01-01
    • 2012-04-22
    • 1970-01-01
    • 1970-01-01
    • 2014-11-27
    相关资源
    最近更新 更多