Por uma janela filho pode não receber eventos de mouse?
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?
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.