首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何设置listcontrol项突出显示?

如何设置listcontrol项突出显示?
EN

Stack Overflow用户
提问于 2015-02-07 16:48:41
回答 2查看 1.4K关注 0票数 0

默认情况下,我想突出显示listview项。我的意思是默认情况下,第一项应该突出显示。

实际上,我做了一个示例,但它不起作用:(这是我用来向列表插入项目并设置第一行突出显示的代码片段。

代码语言:javascript
运行
复制
BOOL OnInitDialog()
{
    CDialog::OnInitDialog();

    LVCOLUMN pColumn;
    pColumn.mask = LVCF_FMT | LVCF_WIDTH | LVCF_TEXT | LVCF_SUBITEM;
    pColumn.fmt = LVCFMT_LEFT;
    pColumn.pszText = L"Product Name";
    pColumn.cx = 150;
    pColumn.iSubItem = 1;

    m_ListCtrl.InsertColumn(2, &pColumn);


    ::ZeroMemory(&pColumn, sizeof(LVCOLUMN));
    pColumn.mask = LVCF_FMT | LVCF_WIDTH | LVCF_TEXT | LVCF_SUBITEM;
    pColumn.fmt = LVCFMT_LEFT;
    pColumn.pszText = L"Country";
    pColumn.cx = 150;
    pColumn.iSubItem = 2;

    m_ListCtrl.InsertColumn(3, &pColumn);

    LVITEM lvItem;

    lvItem.mask = LVIF_TEXT;
    lvItem.iItem = 0;
    lvItem.iSubItem = 0;
    lvItem.pszText = L"Himami";
    m_ListCtrl.InsertItem(&lvItem);

    lvItem.mask = LVIF_TEXT;
    lvItem.iItem = 1;
    lvItem.iSubItem = 0;
    lvItem.pszText = L"Shampoo";
    m_ListCtrl.InsertItem(&lvItem);

    //Trying highlight first item in the list.
    m_ListCtrl.SetItemState(0, LVIS_SELECTED ,LVIS_SELECTED);

    m_ListCtrl.SetExtendedStyle(LVS_EX_CHECKBOXES | LVS_EX_FULLROWSELECT);

    return TRUE;
}

void CListControlFocusDlg::OnListViewItemchanged(NMHDR *pNMHDR, LRESULT      *pResult)
{
     NM_LISTVIEW* pNMListView = (NM_LISTVIEW*)pNMHDR;

    if ((pNMListView->uChanged & LVIF_STATE) && (pNMListView->uNewState & LVNI_SELECTED))
    {
        m_ListCtrl.SetCheck(m_ListCtrl.GetSelectionMark(), TRUE);
        m_ListCtrl.SetSelectionMark(0);
    }
}

使用SetItemState后,列表控件如下所示:列表项不突出显示。

但我希望该项目突出显示,如下图所示。

在实现Tab键顺序后,我可以突出显示列表中的第一项。

但我无法取消选中第一个项目,除非我按下向下箭头,否则列表的第一个项目将出现矩形选择,现在我可以通过按空格键选中或取消选中突出显示的项目。按下arrow.when后,列表看起来就像bar.This。

谁能让我知道如何通过按空格键而不按向下箭头选择矩形来选中或取消选中第一项。

EN

回答 2

Stack Overflow用户

发布于 2015-02-08 07:38:54

cancel按钮看起来具有焦点。Windows的默认行为是将焦点设置到Tab键顺序中的第一项。我建议您使用资源编辑器来设置Tab键顺序。最简单的方法是设置对话框中项目的制表位顺序,并使列表控制第一个项目。编辑Tab键顺序的标准击键是按Ctrl+D键。

票数 1
EN

Stack Overflow用户

发布于 2015-02-11 15:36:17

使用LVN_ITEMCHANGED通知

代码语言:javascript
运行
复制
void OnItemchangedList2(NMHDR* pNMHDR, LRESULT* pResult) 
{
    NM_LISTVIEW* pNMListView = (NM_LISTVIEW*)pNMHDR;

    if ((pNMListView->uChanged & LVIF_STATE) && (pNMListView->uNewState & LVNI_SELECTED))
    {
        m_ListCtrl.SetCheck(m_ListCtrl.GetSelectionMark(), TRUE);
    }
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28380237

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档