Ich möchte wissen, wenn der Benutzer in einer CListBox geklickt hat, aber außerhalb eines beliebigen Elements. Ich hatte gehofft, eine Benachrichtigung in dem enthaltenden Dialog zu erhalten, damit ich den Punkt verarbeiten kann, um festzustellen, ob es in einem Artikel über mylistbox.ItemFromPoint(flags,outside)
ist. Klicks innerhalb der Listbox scheinen jedoch nicht zu solchen Ereignissen zu führen. Welches Ereignis sollte ich im übergeordneten Dialog suchen, und was muss eingerichtet werden, um es zu aktivieren? Es ist mir wirklich egal, ob es ein Klick oder nur ein Mausklick ist.Mausklick in Nicht-Objektbereich von CListBox
Mein Zweck ist es, alle Elemente abzuwählen, wenn der Benutzer außerhalb eines Elements klickt, mit mylistbox.SetCurSel(-1)
.
Nachtrag: Dies ist der vollständige Code für die Klasse implementiert, wie durch @mercurydime vorgeschlagen.
(Header)
#ifndef INCLUDE_CMYLISTBOX_H
#define INCLUDE_CMYLISTBOX_H
class CMyListBox : public CListBox
{
public:
CMyListBox();
void allow_deselect(bool allow = true);
protected:
bool m_allow_deselect;
afx_msg void OnLButtonDown(UINT flags, CPoint point);
DECLARE_MESSAGE_MAP()
};
#endif // INCLUDE_CMYLISTBOX_H
(Körper)
#include "stdafx.h"
#include "CMyListBox.h"
CMyListBox::CMyListBox()
: CListBox(), m_allow_deselect(false)
{
}
void CMyListBox::allow_deselect(bool allow)
{
m_allow_deselect = allow;
}
BEGIN_MESSAGE_MAP(CMyListBox, CListBox)
ON_WM_LBUTTONDOWN()
END_MESSAGE_MAP()
void CMyListBox::OnLButtonDown(UINT flags, CPoint point)
{
if(m_allow_deselect)
{
BOOL outside(TRUE);
ItemFromPoint(point, outside);
if(outside)
SetCurSel(-1);
}
CListBox::OnLButtonDown(flags, point);
}
Okay, ich akzeptiere diesen Ansatz. Ich hatte gehofft, es vom Elternteil zu machen, ohne das Steuerelement zu unterklassifizieren, aber da ich bereits Cstatatic und CComboBox unterklassiere, warum nicht? Dies wird mich später auch andere Verbesserungen machen lassen. +1 für den Vorschlag. – MPW
Ich habe den vollständigen Code für die implementierte Klasse zu meiner ursprünglichen Frage hinzugefügt. Danke noch einmal. – MPW