2015-07-29 2 views
1

Je souhaite sous-classer un CButton pour gérer le message ON_WM_LBUTTONDOWN.Comment notifier la boîte de dialogue parente d'un message à un bouton

DownButton.cpp:

#include "stdafx.h" 
#include "DownButton.h" 

//CDownButton 

IMPLEMENT_DYNAMIC(CDownButton, CButton) 

CDownButton::CDownButton() 
{ 
} 

CDownButton::~CDownButton() 
{ 
} 


BEGIN_MESSAGE_MAP(CDownButton, CButton) 
    ON_WM_LBUTTONDOWN() 
END_MESSAGE_MAP() 



// CDownButton message handlers 

void CDownButton::OnLButtonDown(UINT nFlags, CPoint point) 
{ 
} 

DownButton.h

#pragma once 


// CDownButton 

class CDownButton : public CButton 
{ 
    DECLARE_DYNAMIC(CDownButton) 

public: 
    CDownButton(); 
    virtual ~CDownButton(); 

protected: 
    DECLARE_MESSAGE_MAP() 
public: 
    afx_msg void OnLButtonDown(UINT nFlags, CPoint point); 
}; 

Mais comment la boîte de dialogue contenant ce bouton peut être informé de ce qui se passe? Il semble que le seul message qu'il peut recevoir est ON_BN_CLICKED.

+0

Je ne l'ai pas utilisé MFC pendant des années, mais je pense que la fenêtre parent pourrait recevoir directement des notifications pour l'événement dans son childs –

Répondre

1

Vous devez renvoyer le message au parent dans votre OnLButtonDown - l'événement:

void CDownButton::OnLButtonDown(UINT nFlags, CPoint point) 
{ 
    // do what you want to do ... 

    GetParent()->SendMessage(WM_COMMAND, GetDlgCtrlID() | WM_LBUTTONDOWN << 16, (LONG) GetSafeHwnd()); 
} 
+0

Je comprends que je devrais ajouter 'ON_COMMAND (ID_BUTTON, & Dialog :: function)' dans le 'BEGIN_MESSAGE_MAP' de la boîte de dialogue, mais comment WM_LBUTTONDOWN serait-il utilisé? – Smash