CListCtrl控件失去焦点时仍保持高亮

1. 头文件中添加变量m_nSelItem

int m_nSelItem;

2. 为ListCtrl控件添加NM_KILLFOCUS(失去焦点)和NM_SETFOCUS(得到焦点)消息

手动添加代码如下:

头文件中添加声明

    afx_msg void OnNMKillfocusList(NMHDR *pNMHDR, LRESULT *pResult);
    afx_msg void OnNMSetfocusList(NMHDR *pNMHDR, LRESULT *pResult);


源文件中添加映射

    ON_NOTIFY(NM_KILLFOCUS, IDC_LISTCTRL, OnNMKillfocusList)
    ON_NOTIFY(NM_SETFOCUS, IDC_LISTCTRL, OnNMSetfocusList)

源文件中添加函数

void CPageListView::OnNMKillfocusList(NMHDR *pNMHDR, LRESULT *pResult)
{
    // TODO: 在此添加控件通知处理程序代码
    m_nSelItem = m_ListCtrl.GetSelectionMark();
    m_ListCtrl.SetItemState(m_nSelItem, LVIS_DROPHILITED, LVIS_DROPHILITED);

    *pResult = 0;
}

void CPageListView::OnNMSetfocusList(NMHDR *pNMHDR, LRESULT *pResult)
{
    // TODO: 在此添加控件通知处理程序代码
    m_ListCtrl.SetItemState(m_nSelItem, FALSE, LVIF_STATE);

    *pResult = 0;
}


注意:Always Show Selection属性一定要设为FALSE


你可能感兴趣的:(MFC)