Message reflection



  • Ich habe von CButton eine Klasse CButtonEx abgeleitet.

    Mit "Message reflection" handle ich den OnClicked-Event in der CButtonEx selber. (das funktioniert soweit)

    Jedoch möchte ich, dass zusätzlich auch noch der Message-Hanlder vom Parent-Dialog (CDialog) aufgerufen wird. (das funktioniert nicht, hatte aber noch funktioniert als ich "Message reflection" deaktiviert hatte)

    Was ist die Lösung? 😕



  • noch ein wenig Code dazu:

    CButtonEx-Klasse (Message reflection aktiv):

    BEGIN_MESSAGE_MAP(CButtonEx, CButton)
    	//{{AFX_MSG_MAP(CButtonEx)
    	ON_CONTROL_REFLECT(BN_CLICKED, OnClicked)
    	//}}AFX_MSG_MAP
    END_MESSAGE_MAP()
    
    /////////////////////////////////////////////////////////////////////////////
    // CButtonEx message handlers
    
    void CButtonEx::OnClicked() 
    {
    	MessageBox("TEXT1");
    }
    

    und noch die Message-Map vom Dialog, auf dem sich der CButtonEx befindet:

    BEGIN_MESSAGE_MAP(CTemp11Dlg, CDialog)
    	//{{AFX_MSG_MAP(CTemp11Dlg)
    	ON_WM_SYSCOMMAND()
    	ON_WM_PAINT()
    	ON_WM_QUERYDRAGICON()
    	ON_BN_CLICKED(IDC_BUTTON1, OnButton1)
    	//}}AFX_MSG_MAP
    END_MESSAGE_MAP()
    
    void CTemp11Dlg::OnButton1() 
    {
    	// TODO: Add your control notification handler code here
    	MessageBox("TEXT2");
    }
    

    Wenn ich auf den Button klicke, ist das Resultat:
    TEXT1 Message-box kommt
    TEXT2 Message-box kommt nicht

    ich hätte aber gerne, dass beide kommen



  • void CButtonEx::OnClicked() 
    { 
        GetParent()->SendMessage(...);
        MessageBox("TEXT1"); 
    }
    


  • Danke, hat funkioniert!!

    Die Lösung ist:
    GetParent()->SendMessage(WM_COMMAND,
    MAKEWPARAM(GetDlgCtrlID(), BN_CLICKED),
    (LPARAM)GetParent()->m_hWnd);

    ->beide Msg-Boxen kommen



  • Nur noch zur Ergänzung:
    Wenn Deine Funktion anstatt void einen BOOL zurückgibt, kannst über TRUE oder FALSE steuern, ob die Nachricht beim Parent-Dialog ankommt. Paul DiLascia hat darüber mal was im MSJ geschrieben.

    http://www.microsoft.com/msj/1198/c/c1198.aspx

    Gruß T. 🙂


Anmelden zum Antworten