inaktive Dialoge?



  • hab es probiert es funktioniert aber leider ni is immer noch derselbe effekt irgendwie liegt dass an meinem Quellcode weiß nur ni wo 🙂
    wenn ich auf die anderen Fenster gehe hört man nur ein bing sonst passiert nichts



  • Was hast du für Flags bei dem Dialog gesetzt? alkso in der Resourcendatei?



  • also dass is mein ressourcenquelltext

    #include <windows.h>
    #include "resource.h"
    
    IDR_MENU1 MENU
    BEGIN
        POPUP "Verbindung"
        BEGIN
            MENUITEM "&Verbinden",             ID_CONNECT
            MENUITEM "&Beenden",               ID_CLOSE
        END
    
    END
    
    IDR_DIALOG DIALOGEX 20, 20, 270, 200
    STYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION
    CAPTION "Serververbindung"
    FONT 8, "MS Sans Serif"
    BEGIN
        LTEXT "Nachricht     : ", -1, 10, 8, 45, 8
        EDITTEXT IDC_EDIT1, 45,6,61,13, ES_AUTOHSCROLL | WS_BORDER
        PUSHBUTTON "Abschicken", IDC_OK, 110, 6, 50, 14
        EDITTEXT        IDC_RECV,6,35,200,150,ES_AUTOHSCROLL |ES_MULTILINE|
    
                                                 NOT WS_TABSTOP
    
    END
    
    IDR_CONNECT DIALOGEX 20, 20, 170, 100
    STYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION
    CAPTION "connect"
    FONT 8, "MS Sans Serif"
    BEGIN
        LTEXT "Server     : ", -1, 10, 8, 45, 8
        LTEXT "Port     : ", -1, 10, 20, 45, 8
        EDITTEXT IDC_SERV, 45,6,61,13, ES_AUTOHSCROLL | WS_BORDER
        PUSHBUTTON "&Bestätigen", IDC_SUBMIT, 50, 80, 50, 14
        EDITTEXT        IDC_PORT,45,20,61,13,ES_AUTOHSCROLL | WS_BORDER
    
    END
    

    Vielleicht noch ne Information ich verwende ne dll soll ich den Quellcode für die auch posten?



  • WO hast du die neue Zeile eingefügt ?



  • wie meinst du dass?

    und nochwas:derselbe fehler tritt auch bei Messageboxen auf also wenn im 2. Dialog die Fehlermeldung aufgerufen wird sieht die zwar wie ein aktives fenster aus ich kann sie aber nicht anklicken



  • case  WM_INITDIALOG:
            {
    
                clienta.start_init(1,500,icport,cip);
    
                int err;
                char*errstr=(char*)malloc(sizeof(char)*40);
                err=clienta.client_connect();
                if((err)>0)
                {
                sprintf(errstr,"connect failed err: %d",err);
                MessageBox(hwnd1,errstr,"Err",MB_OK);
                }
                clienta.client_recv(buffer);
    
                strcpy(text,buffer);
                SetDlgItemText(hwnd1,IDC_RECV,text);
                EnableWindow( GetDlgItem( hwnd1, IDC_RECV ), TRUE ); //Sollte eigentlich gehen
                return 0;
            }
    

    Wenn das nicht geht, versuch's mal so:

    LRESULT CALLBACK abschicken (HWND hwndX, UINT message, WPARAM wParam, LPARAM lParam) //neu
    {
        static char*text=(char*)malloc(sizeof(char)*500);
        char*buffer=(char*)malloc(sizeof(char)*500);
        char*request=(char*)malloc(sizeof(char)*500);
    
        HINSTANCE hwnd1; //neu
        switch (message)                  /* handle the messages */
        {
            case WM_QUIT:
            {
                EndDialog( hwnd1, 0);
    
                return 0;
            }
            case  WM_INITDIALOG:
            {
    
                clienta.start_init(1,500,icport,cip);
    
                int err;
                char*errstr=(char*)malloc(sizeof(char)*40);
                err=clienta.client_connect();
                if((err)>0)
                {
                sprintf(errstr,"connect failed err: %d",err);
                MessageBox(hwnd1,errstr,"Err",MB_OK);
                }
                clienta.client_recv(buffer);
    
                strcpy(text,buffer);
                SetDlgItemText(hwnd1,IDC_RECV,text);
                EnableWindow( GetDlgItem( hwnd1, IDC_RECV ), TRUE ); //Sollte eigentlich gehen
                return 0;
            }
            case WM_COMMAND:
            {
                if(LOWORD(wParam)==IDC_OK)
                {
                    GetDlgItemText(hwnd1,IDC_EDIT1,request,500);
                    sprintf(request,"%s\r\n",request);
                    clienta.client_send(request);
                    sprintf(text,"%s \r\n %s",text,request);
                    SetDlgItemText(hwnd1,IDC_RECV,text);
                    clienta.client_recv(buffer);
                    sprintf(text,"%s \r\n %s",text,buffer);
                    SetDlgItemText(hwnd1,IDC_RECV,text);
                    return 0;
                }
            }
    
            default:                      /* for messages that we don't deal with */
                return DefWindowProc (hwnd1, message, wParam, lParam);
        }
        return 0;
    }
    

    EDIT: DirectX verwendet nämlich auch "HINSTANCE" für Dialogfelder 🙂


  • Mod

    klg71 schrieb:

    LRESULT CALLBACK abschicken (HWND hwnd1, UINT message, WPARAM wParam, LPARAM lParam)
    {
        static char*text=(char*)malloc(sizeof(char)*500);
        char*buffer=(char*)malloc(sizeof(char)*500);
        char*request=(char*)malloc(sizeof(char)*500);
    

    Dieser Code ist eine einzige Katastrophe.
    Werde Dir mal klar was es beudetet IN JEDER Nachricht diesen Code zu durchlaufen.
    Außerdem: Warm verwendest Du hier keine Arrays Variablen auf dem Stack.



  • es klappt irgendwie ni aber ich glaube ich hab es nicht gut genug beschrieben was mein problem ist: nämlich ist dass fenster nicht direkt inaktiv sondern sehen alle Elemente aktiv aus aber sie reagieren irgendwie nicht auf meine befehle....

    PS:Würd ja gern screenshot einfügen weiß nloß ni wie^^



  • OK hab ne Lösung gefunden weiß zwar nicht ob dir irgendjemand was bringt aber ich poste sie trotzdem mal

    Irgendwie hatte ich im 2. Dialog(cconect) ein fenster dass nicht mehr da war aber trotzdem noch nachrichten bekommen hat 😮 also hab ich nach EndDialog() noch DestroyWindow() eingebaut und es funktionierte^^

    LRESULT CALLBACK cconnect (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
    {
    
        switch (message)                  /* handle the messages */
        {
    
            case WM_CLOSE:
            {
    
                EndDialog( hwnd, 0);
                 DialogBox( hInst,MAKEINTRESOURCE(IDR_DIALOG),hwndw,(DLGPROC)abschicken);
                return 0;
            }
            case WM_COMMAND:
            {
                if(LOWORD(wParam)==IDC_SUBMIT1)
                {
    
                    char*cport=(char*)malloc(sizeof(char)*100);
    
                    GetDlgItemText(hwnd,IDC_SERV,cip,100);
                    GetDlgItemText(hwnd,IDC_PORT,cport,100);
                    sscanf(cport,"%d",&icport);
                    EndDialog( hwnd, 0); //hier der Dialog sollte eigentlich jetz zerstört werden aber er tut es nicht
                    DestroyWindow(hwnd);//weshalb ich dies eingebaut habe^^
                    DialogBox( hInst,MAKEINTRESOURCE(IDR_DIALOG),hwndw,(DLGPROC)abschicken);
    
                    return 0;
                    }
            }
    
            default:                      /* for messages that we don't deal with */
                return DefWindowProc (hwnd, message, wParam, lParam);
        }
        return 0;
    }
    

    Schöne Weihnachten und danke für eure Hilfe :xmas1: :xmas1: :xmas2:


  • Mod

    ... ich habe selten so einen Unfug gesehen.

    Vieleicht solltest Du Dich etwas mit der Windows API auseinandersetzen.
    EndDialog ist nicht dafür da den Dialog zu zerstören. Er beendet den Dialog. D.h. er wird versteckt und erstbeendet, wenn die Nachrichtenschleife beendet. Die kann aber nicht beendet werden weil Du ja schon den nächsten Dialog modal erzeugst.



  • hab mich mit der winapi auseinandergesetzt hab aber trotzdem noch ne frage dasselbe passiert auch wenn ich aus meinem Dialog ne MessageBox() aufrufen will und davor muss ich doch keine Nachrichtenschleife beenden odER?



  • hallo! auf WM_INITDIALOG solltest du wohl mit (INT_PTR)TRUE antworten...



  • hab ich versucht so

    WM_INITDIALOG:
    {
    ....
    ....
    ....
    return (INT_PTR)TRUE;
    }
    

    so bleibt das problem das gleiche



  • habe noch etwas heruasgefunden
    wenn ich.

    default:                      /* for messages that we don't deal with */
                return DefWindowProc (hwnd, message, wParam, lParam);
    

    weglasse siehr mein dialog ganz komisch aus irgendwie hat er dann keinen rahmen mehr und außeredem gibt es manche Fenster doppelt????? 😮



  • habe fehler gefunden,oder jedenfalls gehts jetzt 😃

    Ich habe jedes return 0; durch ein break; ersetzt und bei der Message Switch anweisung default:return false gesetzt jetzt geht es weiß bloß ni warum 😃

    Frohe Weihnachten



  • von speicher wieder freigeben hälst du wohl auch nichts. ein statisches
    array würde den selben zweck erfüllen, schneller sein, und automatisch freigegeben
    werden. trotzdem malloc's du überall ein paar 100 bytes. das is nicht schön 😞



  • ok werde es ändern 😃


Anmelden zum Antworten