2013-05-16 145 views
3

我不知道如何禁用CListCtrl選擇選項。我想覆蓋CListCtrl類方法或處理任何窗口命令?謝謝。如何禁用CListCtrl選擇選項

+0

[CListCtrl](http://msdn.microsoft.com/en-us/library/hfshke78(v = vs.100).aspx)是用於管理Windows公共控件ListView控件的類。像所有的Windows公共控件一樣,您可能必須提供通知處理程序來執行您想要(或不想)完成的任何操作或缺少的操作。獲取一本關於MFC的書或者[試試這個](http://bit.ly/10A1ihY)。 – WhozCraig

回答

7

如果要停止用戶選擇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

+0

謝謝@羅格羅蘭 – jack