gpt4 book ai didi

c++ - 以编程方式选择 clistctrl

转载 作者:行者123 更新时间:2023-11-30 05:24:23 24 4
gpt4 key购买 nike

我有一个显示多个系统的多个数据的 clistctrl。不同系统只能选择 1 个项目。

最初,clistctrl 会加载从不同系统的控件中选择的第一个项目。

但是当我在更改模型中的数据并设置选择后通过单击网格上的项目来更改选择时,它不会显示来 self 的数据结构的选择。相反,它只显示选中的单击行。注意::我的数据结构具有正确的值并且设置选择正在正确执行。我在选择之前取消选择。选择取消选择方法:

    void SelectRow(int index)
{
SetFocus();
EnsureVisible(index, FALSE);
SetItemState(index, LVIS_SELECTED, LVIS_SELECTED);
}
void DeselectRow(int index)
{
SetItemState(index, ~LVIS_SELECTED, LVIS_SELECTED);
}

点击时的 Afx 消息:

void MDialog::OnSelectedItemChanged(NMHDR* pNMHDR, LRESULT*pResult)
{
UpdateData(FALSE);
NM_LISTVIEW* pNMListView = (NM_LISTVIEW*)pNMHDR;
switch (pNMListView->hdr.code)
{
case LVN_ITEMCHANGED:
{
(pNMListView->uNewState & LVIS_SELECTED)
if (!m_lockSelection && (pNMListView->uChanged & LVIF_STATE))
{
m_lockSelection = true;
FINALLY([=] {
m_lockSelection = false;
});
m_allPositionsView.ViewModel().Update(ntype::selection, pNMListView->iItem);
}
}
break;
}
UpdateData(TRUE);
}

我选择的最终通知事件:

void MDialog::OnRefinedProgramViewModelNotify(const MyProject::abc::ntype& notifyId)
{
for (int i = 0; i < int(m_allPositionsView.ViewModel().Model().Count()); ++i)
{
if (m_allPositionsView.ViewModel().Model().At(i).IsSelectedPosition())
{
m_allPositionsView.SelectRow(i);
}
}
}

程序正在正确执行选择方法。

        m_allPositionsView.SelectRow(i);

但在 View 中我只能看到选中的单击项。但还有其他项目我希望保持选中状态。

为什么它不能以编程方式进行我正在做的选择?

最佳答案

要取消选择 index 行,请使用以下代码:

      UINT nState = GetItemState(index, LVIS_SELECTED);
nState &= ~LVIS_SELECTED;
SetItemState(index, nState, LVIS_SELECTED);

要选择 index 行,请使用:

      SetItemState(index, LVIS_SELECTED, LVIS_SELECTED);

关于c++ - 以编程方式选择 clistctrl,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38683352/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com