2013-05-16 6 views
3

Я не знаю, как отключить опцию выбора CListCtrl. Я хочу переопределить метод класса CListCtrl или обработать любую команду окна? Благодарю.Как отключить опцию выбора CListCtrl

+0

[CListCtrl] (http://msdn.microsoft.com/en-us/library/hfshke78 (v = vs.100) .aspx) - это класс, используемый для управления элементом управления ListView Windows Common Controls 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

спасибо @Roger Rowland – jack