inaktive Dialoge?
-
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 ENDVielleicht 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

-
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:
-
... 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
