Ich habe ein benutzerdefiniertes WTL-Steuerelement, das ein Panel mit einer Liste und einer benutzerdefinierten Bildlaufleiste ist.Warum erhält ein untergeordnetes Fenster möglicherweise keine Mausereignisse?
class Panel
: public ATL::CWindowImpl<Panel>, public WTL::CDoubleBufferImpl<Panel> {
public:
DECLARE_WND_CLASS("Panel")
BEGIN_MSG_MAP_EX(Panel)
MSG_WM_CREATE(OnCreate)
MSG_WM_DESTROY(OnDestroy)
MSG_WM_SIZE(OnSize)
CHAIN_MSG_MAP(CDoubleBufferImpl<Panel>)
REFLECT_NOTIFICATIONS()
END_MSG_MAP()
Die Bildlaufleiste wird von der Platte in OnCreate() erstellt:
m_scrollBar.Create(m_hWnd, WTL::CRect(...));
Das Bar scrollen funktioniert in vielen anderen Dialogfenstern in Ordnung. In diesem Panel-Steuerelement wird jedoch die Bildlaufleiste angezeigt, aber es werden überhaupt keine Mausereignisse empfangen. Wenn ich den Handler WM_MOUSEMOVE
zum Panel hinzufüge, wird er aufgerufen.
Was könnte das Problem sein?
Könnte das Elternsteuerelement alle Windows-Nachrichten für diese Region verschlingen? – RobS
Nein. Die Liste empfängt die Mausereignisse. Die Rollbalken-Klasse war das Problem. Siehe meine Antwort unten. –