【问题标题】:How to disable the CListCtrl select option如何禁用 CListCtrl 选择选项
【发布时间】:2013-05-10 23:24:48
【问题描述】:

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

【问题讨论】:

  • CListCtrl 是一个用于管理 Windows Common Controls ListView 控件的类。与所有 Windows 通用控件一样,您可能必须提供通知处理程序来执行您想要(或不想要)完成的任何操作或缺少这些操作。买一本关于 MFC 的书,或者try this

标签: c++ mfc clistctrl


【解决方案1】:

如果您想阻止用户选择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 并更改列出从CListCtrlCMyListCtrl 的控制成员变量。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-03-18
    • 1970-01-01
    • 2022-01-15
    • 1970-01-01
    • 2016-10-06
    • 1970-01-01
    • 2012-05-10
    • 1970-01-01
    相关资源
    最近更新 更多