c++ - 如何禁用 CListCtrl 选择选项

标签 c++ mfc clistctrl

我不知道如何禁用 CListCtrl 选择选项。我想覆盖 CListCtrl 类方法或处理任何窗口命令?谢谢。

最佳答案

如果你想阻止用户在 CListCtrl 中选择一个项目,你需要从 CListCtrl 派生你自己的类并为 添加一个消息处理程序LVN_ITEMCHANGING 通知。

因此,示例类 CMyListCtrl 将有一个头文件:

MyListCtrl.h

#pragma once

class CMyListCtrl : public CListCtrl
{
    DECLARE_DYNAMIC(CMyListCtrl)

protected:
    DECLARE_MESSAGE_MAP()

public:
    // LVN_ITEMCHANGING notification handler
    afx_msg void OnLvnItemchanging(NMHDR *pNMHDR, LRESULT *pResult);
};

然后是 MyListCtrl.cpp:

#include "MyListCtrl.h"

IMPLEMENT_DYNAMIC(CMyListCtrl, CListCtrl)

BEGIN_MESSAGE_MAP(CMyListCtrl, CListCtrl)
    ON_NOTIFY_REFLECT(LVN_ITEMCHANGING, &CMyListCtrl::OnLvnItemchanging)
END_MESSAGE_MAP()

void CMyListCtrl::OnLvnItemchanging(NMHDR *pNMHDR, LRESULT *pResult)
{
    // LVN_ITEMCHANGING notification handler
    LPNMLISTVIEW pNMLV = reinterpret_cast<LPNMLISTVIEW>(pNMHDR);

    // is the user selecting an item?
    if ((pNMLV->uChanged & LVIF_STATE) && (pNMLV->uNewState & LVNI_SELECTED))
    {
        // yes - never allow a selected item
        *pResult = 1;
    }
    else
    {
        // no - allow any other change
        *pResult = 0;
    }
}

所以你可以,例如,添加一个普通的 CListCtrl 到一个对话框,然后为它创建一个成员变量(默认情况下它将是 CListCtrl)然后编辑你的对话框的头文件为#include "MyListCtrl.h,并将列表控件成员变量从CListCtrl更改为CMyListCtrl

关于c++ - 如何禁用 CListCtrl 选择选项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16581153/

相关文章:

windows-7 - 如何修改 CEdit 控件的上下文菜单?

c++ - 如何调整 CListCtrl 列的宽度以适应每列中最长的字符串?

c++ - qsort 在排序 2D 点时没有给出正确的结果

c++ - 如何在 ASM 中创建循环?

c++ - 将CComboBox添加到CMFCStatusBar Pane 的问题

mfc - CMFCListCtrl 强制选择的项目有红色

c++ - 关于选择 MFC CListCtrl 项

c++ - 无法理解c语言宏中的inc/dec运算符行为

c++ - 对具有相同参数签名的 operator[] 方法返回的 double 和 double 的引用

c++ - 椭圆的透明边界框