MessageLoop falsch?



  • Hi@all also ich hab folgendes problem. Mein Programm erstellt dynamisch viele moduslose Dialoge deren HWNDs speicher ich in einem vector ab. Meine Message Loop sieht so aus:

    while(GetMessage(&msg, NULL, 0, 0))
    	{
    		for(unsigned int i=0;i<g_ModelessDialogs.size();i++)
    			if(!IsDialogMessage(g_ModelessDialogs[i], &msg))
    			{
    				TranslateMessage(&msg);
    				DispatchMessage(&msg);
    				break;
    			}
    	}
    

    Wenn jetzt 2 oder mehrere dialoge existerien kommen die Window Messages 4fach an also wenn ich auf eine editbox geh und A drück stehen dort vier As.

    Jetzt wollte ich euch fragen ob ihr vielleicht einen fehler erkennen könnt.

    mfg tobZel



  • so tuts:

    while(GetMessage(&msg, NULL, 0, 0))
    	{
    		for(unsigned int i=0;i<g_ModelessDialogs.size();i++)
    			if(IsDialogMessage(g_ModelessDialogs[i], &msg))
    			{
    				IsDialog = 1;
    				break;
    			}
    		if(!IsDialog)
    		{
    			TranslateMessage(&msg);
    			DispatchMessage(&msg);
    			IsDialog = 0;
    		}
    	}
    

    würde mich freuen wenn mir jemand sagt warum 😮



  • Ist das die MessageLoop des Haupfesnters?
    Bekommt nicht normalerweise jeder Dialog seine eigene MessageCallback?



  • vlad_tepesch schrieb:

    Ist das die MessageLoop des Haupfesnters?
    Bekommt nicht normalerweise jeder Dialog seine eigene MessageCallback?

    Jedes Programm hat nur eine MessageLoop. Du meinst wahrscheinlich Window Prozeduren. Aber die haben damit nix am hut


  • Mod

    tobZel schrieb:

    würde mich freuen wenn mir jemand sagt warum 😮

    Schau Dir mal Deinen ersten Code an. Du fragst einen Array von HWNDs ab ob die mit IsDialogMessage was anfangen wollen.
    Sagt jedes HWND nein führst Du jedesmal TranslateMessage/DisptachMessage aus. Also wenn Dein Array 4 Elemente hat, dann eben viermal.

    Du hast Deinen Code jetzt reduziert und nutzt ein Flag. Erst wenn alle nein sagen nutzt Du TranslateMessage/DisptachMessage. So ist es richtig.



  • hab mir halt gedacht wegen dem break hört er dann auf 😮


  • Mod

    tobZel schrieb:

    hab mir halt gedacht wegen dem break hört er dann auf 😮

    Stimmt eigentlich. Habe ich übersehen. Viermal hätte nicht passieren sollen. Bist Du sicher, dass es dieser Code war, der in allen Controls ein A ausgelifert hat?

    Aber Dein Code wäre dennoch falsch, denn er hört ja sofort auf anderen Dialogen die Nachricht anzubieten, wenn der erste die Nachricht nicht will.



  • Martin Richter schrieb:

    Stimmt eigentlich. Habe ich übersehen. Viermal hätte nicht passieren sollen. Bist Du sicher, dass es dieser Code war, der in allen Controls ein A ausgelifert hat?

    Ja war er. Aber das witzige ist ja wenn ich 10 fenster offen hab kommen pro druck auf A 4 As wenn ich 2 offen hab auch und bei einem fenster funktionierts wunderbar, also nur ein A pro druck auf die taste.

    Martin Richter schrieb:

    Aber Dein Code wäre dennoch falsch, denn er hört ja sofort auf anderen Dialogen die Nachricht anzubieten, wenn der erste die Nachricht nicht will.

    Dass seh ich ein 🙂 Aber dann dürfte ein oder mehrere Fenster doch eher gar keine Nachricht bekommen?


  • Mod

    Doch! Ausgeliefert wurde ja immer, aber evtl. hat in einem Dialog die TAB-Taste nicht gearbeitet, denn IsDialogMessage wurde dann ja immer nur für das erste Fenster ausgeführt.


Anmelden zum Antworten