Kontextmenübefehl wird nicht ausgeführt, wieso?



  • Okay, ich hatte dann doch noch ne Idee und habe nun folgendes:

    void CBasisListCtrl::OnHglagerBerechnen() 
    {
    	AfxGetMainWnd()->SendMessage(WM_COMMAND, ID_HGLAGER_BERECHNEN);
    }
    

    Das in der PreTranslateMessage ist auskommentiert und trotzdem wird der Befehl ausgeführt. Jetzt sogar nach Aufuf und vor Ausführung die OnUpdate... 🙂
    Allerdings finde ich nicht, wie ich die OnUpdate auslösen kann.

    void CBasisListCtrl::OnUpdateHglagerBerechnen(CCmdUI* pCmdUI) 
    {
    	// TODO: Code für die Befehlsbehandlungsroutine zum Aktualisieren der Benutzeroberfläche hier einfügen
    
    }
    


  • mit den wizzards arbeite ich eigentlich nie 😉 von hand ist es meistens eh schneller als vom code-generator von MS.

    das einbinden ist eigentlich kein problem:

    // *.h
    
    afx_msg void OnLvnBeginlabeledit(NMHDR *pNMHDR, LRESULT *pResult);
    
    BEGIN_MESSAGE_MAP(CDeinListCtrl, CListCtrl)
    	ON_NOTIFY_REFLECT(LVN_BEGINLABELEDIT, OnLvnBeginlabeledit)
    END_MESSAGE_MAP()
    
    void CDeinListCtrl::OnLvnBeginlabeledit(NMHDR *pNMHDR, LRESULT *pResult)
    {
    	NMLVDISPINFO *pDispInfo = reinterpret_cast<NMLVDISPINFO*>(pNMHDR);
    
    	// ...
    
    	*pResult = 0;
    }
    

    mehr habe ich zumindest nicht gemacht 😉

    EDIT:
    Sorry, doppelpost



  • Okay, das habe ich mittlerweile hinbekommen (mit Wizard, ich habe mich sehr dran gewöhnt) - hatte da nen Brett vorm Kopf.
    Hast du noch eine Idee zu meiner nachgeschobenen Frage? 🙂



  • ne sorry. ich muss auch zugeben das ich nichtmal weis wozu OnUpdate...() gut ist und wie es aufgerufen wird 😉

    was macht denn die funktion und was willst du damit erreichen ?



  • Das ist die Funktion, in der ich einen Menüpunkt ausgrauen kann, falls er nicht aufgerufen werden soll.
    Im konkreten Fall sieht das so aus:

    void CLagerView::OnUpdateBearbeitenBerechnen(CCmdUI* pCmdUI)
    {
        pCmdUI->Enable((!m_fBerechnet) && (IstZeileMarkiert()));
    }
    

    Der Menüpunkt darf nur enabled sein, wenn eine Zeile markiert ist und diese noch nicht berechnet wurde.



  • du könntest diesen schritt ja umgehen indem du direkt vor 'TrackPopupMenu()' die entsprechenden menüeinträge deaktivierst 😉



  • Hmm, das kann ich Montag mal versuchen. Danke. 🙂



  • bei mir funktioniert es so wunderbar, dann sicherlich auch bei dir 😉

    finde das so aber auch sauberer programmiert 😉 *nicht klugscheissen wollen* 🙄



  • Red Skall schrieb:

    finde das so aber auch sauberer programmiert 😉 *nicht klugscheissen wollen* 🙄

    Sauberer als was?
    Als mit PreTranslateMessage? Auf jeden Fall, das war ja auch nur eine vorübergehende Lösung, weil ich so gleich getestet hatte, ob die Nachricht überhaupt funktioniert. 😉



  • nene, sauber als OnUpdate...() meine ich. denn du rufst das menü auf und deaktivierst in dieser funktion menüeinträge.

    besser ist finde ich das menu zu erzeugen, dann alles deaktivieren was man deaktiviert haben möchte und es dann anzuzeigen.

    ist geschmackssache würde ich sagen 😉



  • Naja, das OnUpdate... ist der normale Weg in einer SDI für das Hauptmenü, die Toolbar(s) und funktionierte bisher auch für die Kontextmenüs (wahrscheinlich, weil es das normale Bearbeiten-Menü war).

    Ist also eigentlich auch ne saubere Lösung, nur wie es scheint an dieser Stelle falsch. 😉



  • Red Skall schrieb:

    du könntest diesen schritt ja umgehen indem du direkt vor 'TrackPopupMenu()' die entsprechenden menüeinträge deaktivierst 😉

    Es hat leider nicht geklappt, da das Listcontrol nicht genug über den View weiß.
    Ich regele das jetzt mit Prüfungen in der Bearbeitungsfunktion und passenden Meldungen an den Benutzer.
    Das sollte auch gehen. 🙂


Anmelden zum Antworten