Frage

Ich habe eine benutzerdefinierte WTL Steuerung, die ein Panel mit einer Liste und einer benutzerdefinierte Bildlaufleiste.

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 Bildlaufleiste funktioniert in vielen anderen Dialogfenstern in Ordnung. Allerdings steuern innerhalb dieser Platte die Bildlaufleiste angezeigt wird, erhält aber keine Mausereignisse überhaupt. Wenn ich WM_MOUSEMOVE Handler zum Panel hinzufügen, wird es aufgerufen.

Was könnte das Problem sein?

War es hilfreich?

Lösung 2

es gefunden. Das Problem war in der Bildlaufleiste Klassendeklaration:

class CScrollBase : public ATL::CWindowImpl<CScrollBase, WTL::CStatic>

Der Wechsel zu:

class CScrollBase : public ATL::CWindowImpl<CScrollBase>

macht die Bildlaufleiste Arbeit auf dem Panel.

Andere Tipps

Eine gute Möglichkeit, Probleme mit Windows-Messaging zu diagnostizieren ist Spy ++ zu verwenden oder Winspector die Ihnen erlauben, ein unter-Abdeckungen Blick auf Windows Messaging zu erhalten.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top