Zwei Fragen: Windowstyles und Tabstops ...



  • Danke funzt soweit, aber jetzt habe ich noch eine Frage:

    Wie kriege ich raus, welches Fenster gerade aktiv ist? Denn ich habe mehrere Fenster in meinem Programm (welche als HWND-Array deklariert sind), wo das mit den Tabstops möglich sein soll, wenn ich aber es so umständlich mache wie

    while(GetMessage(&messages, NULL, 0, 0))
        {
           for (int i=0;i<10;i++)
           {
            if (IsDialogMessage(MyWin[i], &messages) == 0)
            {
                TranslateMessage(&messages);
                DispatchMessage(&messages);
            }
           }
        }
    

    dann klappt das nicht wirklich 😞 ... gibt es eine Funktion, mit der ich das aktuelle Fenster ermitteln kann (die z.B. einen Pointer auf das aktive Fenster zurückliefert) ???

    Gruss,
    code_pilot ´ 🙄

    [ Dieser Beitrag wurde am 18.12.2002 um 08:59 Uhr von code_pilot editiert. ]



  • Du brauchst bei IsDialogMessage nur den DIALOG-Handle angeben auf dem die Steuerlemente sind, nicht die einzelnen Steuerelemente.



  • Ja is schon klar, aber ich habe mehrere Fenster mit Steuerelementen, auf auf allen von ihnen soll das möglich sein, das ist mein Problem!!! 😕



  • Ja is schon klar, aber ich habe mehrere Fenster mit Steuerelementen,

    Diese mehreren Fenster sind dann also Parents von mehreren Controls. Deshalb müssen diese Fenster das ExStyle WS_EX_CONTROLPARENT zugewiesen bekommen. Alle diese ControlParents haben das gleiche Parent-Window, zum Beispiel Dein Frame-Window. Und auf dieses gemeinsame Parent rufst Du IsDialogMessage auf.



  • die forschleife muss wenn nur um das IsDialogMessage und dann musst du vielleicht mit einer bool variable arbeiten



  • Original erstellt von -King-:
    **
    Alle diese ControlParents haben das gleiche Parent-Window, zum Beispiel Dein Frame-Window. Und auf dieses gemeinsame Parent rufst Du IsDialogMessage auf.**

    Öhhhm kannst du mir mal ein beispiel geben wie ich diese definieren muss??? Ich dachte erst, ich muss das bei allen Steuerelementen auf den Fenstern tun... Also ich habe hier folgenden Code:

    Win[0] = CreateWindowEx(0,szClassName, "testwin", WS_SYSMENU , 100, 100, 300, 110, HWND_DESKTOP, NULL, hInstance, NULL);
        Win[1] =    CreateWindowEx(0,szClassName, "Testwin 2", WS_SYSMENU | WS_EX_CONTROLPARENT , 200, 200, 300, 110,  HWND_DESKTOP, NULL, hInstance, NULL);
        text =   CreateWindow("static", "hello world",WS_CHILD | WS_VISIBLE, 5, 5, 280, 20, WS_BORDER | WS_TABSTOP , 5, 22, 280, 20, Win[1], (HMENU) 2, hInstance, NULL);
        button[0] =     CreateWindow("button", "&Ok",WS_CHILD | WS_VISIBLE | WS_TABSTOP, 20, 50, 60, 20, Win[1], (HMENU) 3, hInstance, NULL);
        button[1] =     CreateWindow("button", "&Cancel",WS_CHILD | WS_VISIBLE | WS_TABSTOP, 120, 50, 60, 20, Win[1], (HMENU) 3, hInstance, NULL);
    
        ShowWindow(Win[1], nFunsterStil);
        ShowWindow(Win[0], nFunsterStil);
        while(GetMessage(&messages, NULL, 0, 0))
        {
            if (IsDialogMessage(Win[0], &messages) == 0)
            {
                TranslateMessage(&messages);
                DispatchMessage(&messages);
            }
        }
    

    Was mache ich da falsch bzw. was muss ich tun damit es geht?? 😕

    [ Dieser Beitrag wurde am 18.12.2002 um 15:10 Uhr von code_pilot editiert. ]



  • weil beide win[]s HWND_DESKTOP als Parent haben geht das glaub ich ned was king meinte



  • Original erstellt von <weil>:
    weil beide win[]s HWND_DESKTOP als Parent haben geht das glaub ich ned was king meinte

    Ich habe auch schon probiert, Win[1] bei Win[0] als Child zu übergeben, aber das ging auch nicht 😞 😞 😞

    code_pilot



  • dann mach es mit der schleife! wirst du ja wohl hinkriegen



  • Original erstellt von <win[1]>:
    dann mach es mit der schleife! wirst du ja wohl hinkriegen

    ARGHHHH DAS MIT DER SCHLEIFE F U N Z T E NICHT 😡 !!!!!!!!



  • TranslateMessage(&messages);
    und
    DispatchMessage(&messages);

    dürfen nur ausgeführt werden, wenn IsDialogMessage bei allen Fenstern aus deinem HWND Array false zurückgibt.



  • Original erstellt von <win[2]>:
    **TranslateMessage(&messages);
    und
    DispatchMessage(&messages);

    dürfen nur ausgeführt werden, wenn IsDialogMessage bei allen Fenstern aus deinem HWND Array false zurückgibt.**

    Ja, und bei mir stürzt dann das Programm ab.

    Teilnehmer: Excellenter Tipp! :o

    code_pilot



  • und wie zeigt sich der absturtz?!



  • Hallo,
    du brauchst nur EINE Message-Loop für EIN Fenster. Die Nachrichten, die an die anderen Fenster gesendet werden, gehen durch die gleiche WindowProc (wenn die Klasse der Fenster die gleiche ist).


Anmelden zum Antworten