Pergunta

Eu tenho um controle WTL costume que é um painel com uma lista e um bar personalizado de rolagem.

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()

A barra de rolagem é criado pelo painel no OnCreate ():

m_scrollBar.Create(m_hWnd, WTL::CRect(...));

Isso obras barra de rolagem bem em muitas outras janelas de diálogo. No entanto, dentro de que o painel de controle aparece barra de rolagem, mas não recebe eventos de mouse em tudo. Se eu adicionar manipulador WM_MOUSEMOVE ao painel, ele não se ligou.

O que poderia ser o problema?

Foi útil?

Solução 2

A ele. O problema era na declaração de rolagem classe bar:

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

Mudar para:

class CScrollBase : public ATL::CWindowImpl<CScrollBase>

faz o trabalho de barra de rolagem no painel.

Outras dicas

Uma boa maneira de diagnosticar problemas com mensagens do Windows é usar Spy ++ ou Winspector que permitem que você para obter uma under-the-cobre olhar para mensagens do Windows.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top