CMenu::GetSubMenu(0))->TrackPopupMenu Hängt



  • Hallo,

    ich habe mehrere CMenu und zu jedem ein SubMenu. Die Menus habe ich in der Resource erstellt und lade diese mit:

    menu1.LoadMenu(IDR_MENU1);
    menu2.LoadMenu(IDR_MENU2);
    

    menu1.GetSubMenu(0))->TrackPopupMenu kehrt nicht mehr zurück, die Applikation hängt.
    menu1.GetSubMenu(0))->TrackPopupMenu funktioniert einwandfrei.
    Und zwar immer reproduzierbar.

    Die Applikation hängt wegen einen anderen Thread. Trotzdem kann ich mir nicht erklären, warum TrackPopupMenu einmal einwandfrei funktioniert und einmal hängen bleibt 😕 😕 😕

    Kann mir jemand helfen? Irgendeine Ahnung? Vermutung?


  • Mod

    menu1.GetSubMenu(0))->TrackPopupMenu kehrt nicht mehr zurück, die Applikation hängt.
    menu1.GetSubMenu(0))->TrackPopupMenu funktioniert einwandfrei.

    😕 Wo ist der Unterschied?

    Meinst Du menu2?

    Dann schau Dir mal genau die Ressourcen an. Die sind wahrscheinlich unterschiedlich!

    Ohne dass Du fehler testest wirst Du nichts herausbekommen!
    1. Was returniert LoadMenu?
    2. Was returniert menu2.GetSubMenu(0)?



  • natürlich.... menu1.GetSubMenu und menu2.GetSubMenu

    Nochmal zum Hintergrund, normalerweise geht das ja.

    Meine Applikation schaltet einen modalen Dialog auf. Der Dialog erzeugt einen Thread, der irgendwas in der Applikation macht. Tritt ein Fehler dabei auf, dann kommt unter dem modalen Dialog eine Messagebox (die man aber nicht sieht) und die ganze Applikation hängt, weil ich die Messagebox nicht bestätigen kann.

    Wenn ich nun in den Dialog Thread reindebugge, dann returnd die Funktion ::TrackPopupMenu beim Menu1 ganz normal.
    Beim Menu2 bleibt die Funktion hängen. Das ist schon Crazy. Sicherlich sind die Ressourcen unterschiedlich für Menu1 und Menu2. Aber mehr auch nicht. Der Menuaufruf selbst ist absolut identisch. 😕

    Die Menüs rufe ich über Buttons auf, d.h. da gibt es auch keine konstante Zeitfaktoren, die mit reinspielen.
    Button1 -> Menu1 -> geht (immer)
    Button2 -> Menu2 -> hängt(immer)


  • Mod

    1. Du darfst natlrich in keinem Fall TrackPopupMenu mit einem Fenster Handle durchführen, dass in einem anderen Thread erzeugt wurde. Das muss hängen, wenn der andere Thread keine Messageloop ausführt.
    2. Wenn die Messagebox nicht erscheint verwendest Du einen falschen Stil. Hier ist MB_SYSTEMMODAL angesagt!


Anmelden zum Antworten