MessageBox öffnet 2mal



  • Hallo!
    Bin neu hier, habe vor ca. einem viertel Jahr angefangen mit c++ und will jetzt mein erstes WinAPI Programm programmieren.

    Soweit ist das auch schon fertig, nur habe ich noch ein Problem: Ich habe eine Listbox. In dem WM_COMMAND wird abgefragt, ob der Benutzer was anderes ausgewählt hat, wenn ja, wird was ausgeführt. Unter bestimmten umständen öffnet sich noch eine Message Box, die abfragt, ob wirklich geändert werden soll. Diese Umstände grade gegeben sind öffnet sich auch die Message Box, man klickt ja oder nein. Es funktioniert alles wunderbar, nur kommt direkt danach noch eine Message Box, die selbe, klicken bringt nichts mehr. Wieso kommt die?

    Was ich schon durch testen rausgefunden habe: Das GANZE wird NUR wenn die MessageBox ausgeführt wird (selbst wenn ich die if noch wegnehme, die Message Box also immer geöffnet wird) 2mal ausgeführt. Die erste Message Box wurde beim 2ten Durchgang geöffnet.

    Ich dachte, dass die Message Box ausgeführt werden muss, damit das Programm weiterläuft?! Scheint beim 2tem Fall ja auch so zu sein.

    Wenn das noch nicht reicht, kann ich noch den entsprechende Stele aus dem Quelltext zeigen, aber da dürfte kein Fehler drin sein 😕 bin den schon hundertmal durchgegangen, ein Freund auch.

    Hoffe jemand kann mir helfen, bin am verzweifeln... 😞

    enape



  • Lass mal deine WM_COMMAND-Behandlung sehen.

    MfG SideWinder



  • Ok, hier der Teil mit der ListBox:

    case WM_COMMAND:
          {      
             if (lParam == (LPARAM)hListBoxProj)
               {//alte Selektion
                static int Sel;
                // Neue Selektion
                OpenProjNum = SendMessage(hListBoxProj, LB_GETCURSEL, 0, 0);
                if (Sel != OpenProjNum && OpenProjNum != LB_ERR)
                  {int Answer;
    
                   // Zum testen, hat nichts mit dem Programm zu tun. test wird immer angezeigt
                   test++;
                   char Print[20];
                   wsprintf (Print, "tester: %i", test);
                   InvalidateRect(hWnd, NULL, true); // Zum Aktualisieren von test-Anzeige
    
                   if (action == 4 || action == 5 || action == 6)
                     Answer = MessageBox(hWnd,
                                         "Timer läuft bereits, trotzdem Projekt wechseln?",
                                         Print,
                                         MB_YESNO | MB_DEFBUTTON1,);
                   else
                     Answer = IDYES;
    
                   if (Answer == IDYES)
                     {Sel = OpenProjNum;
                      SendMessage(hWnd, UPDATE_PROJ, 0, 0);}
                   else
                     {OpenProjNum = Sel;
                      SendMessage(hListBoxProj, LB_SETCURSEL, (WPARAM)Sel, 0);}
                  }
                 break;
                }
    ...
    ...
    ...
    


  • Du solltest den Notification-Code noch handlen
    und nicht nur auf das korrekte Handle prüfen 😉



  • Ehm, kannst du mir sagen was ich machen soll? 🙄

    ← Newbie



  • MSDN schrieb:

    An application sends the LBN_SELCHANGE notification message when the selection in a list box is about to change. The parent window of the list box receives this notification message through the WM_COMMAND message.

    Quelle: http://msdn.microsoft.com/library/default.asp?url=/library/en-us/shellcc/platform/commctls/listboxes/listboxreference/listboxmessages/lbn_selchange.asp

    case WM_COMMAND:
    
    if (lParam == (LPARAM)hListBoxProj)
    {
       // Jo, die Nachricht kommt von der Listbox, was will die Listbox ?
       if (HIWORD(wParam)==LBN_SELCHANGE)
       {
           // Die Selektion in der ListBox hat sich geändert.
           // Hier jetzt was lustiges tun ;D
       }
    }
    

    Noch beachten dabei:

    MSDN schrieb:

    This notification message applies only to a list box that has the LBS_NOTIFY style.



  • Perfekt, nach soetwas habe ich immer gesucht 😉
    Ich habe bei MSDN noch nicht ganz gescheckt, wie ich das finde 😃

    Vielen Dank!


Anmelden zum Antworten