Modales und modusloses Dialogfeld
-
Einen schönen Tag Zusammen,
ich habe eine Frage: Ich möchte aus einem modalen Dialog heraus durch Druck auf einen CommandButton einen nicht modalen (moduslosen) Dialog aufrufen.
Meine erste Frage ist: Geht das aus der modalen Dialogfunktion heraus und wenn ja, wie? Ein bisschen Code wäre schön. Danke schon mal für die Antworten.Gruß
Oliver
-
Solang dein modaler Dialog halt offen ist, wirst du wohl nicht an den anderen Dialog herankommen (da der modale Dialog deine Anwendung ja blokiert)!
So würde ich zumindestens vermutenWas genau ist dein Problem?
-
ja sicher, aber ich will ja meinen moduslosen Dialog aus dem modalen Dialog heraus aufrufen, sprich die Dialogfunktion des modalen Dialoges ruft einen moduslosen Dialog auf. Ich wüßte daher gerne, ob und wie das geht ???
Gruß
Oliver
-
Wo ist da jetzt genau dein Problem? Ist doch nichts schwieriges dran?
-
Schön, wenns also nicht schwierig ist, dann zeig doch bitte einfach mal wie es geht. Das Problem ist beispielsweise schon die Übergabe der Parameter. Ich befinde mich ja in der Dialogprozedur des modalen Dialoges. Wie muss ich denn jetzt den moduslosen Dialog, den ich als zuvor als Resource erstellt habe aufrufen?
Hier die Fehlermeldung:
zuordnung.c
d:\sourcen\konto\zuordnung.c(133) : warning C4133: 'function' : Inkompatible Typen - von 'struct HWND__ *' zu 'struct HINSTANCE__ *'
d:\sourcen\konto\zuordnung.c(133) : error C2065: 'hWnd' : nichtdeklarierter Bezeichner
d:\sourcen\konto\zuordnung.c(133) : warning C4047: 'function' : Anzahl der Dereferenzierungen bei 'struct HWND__ *' und 'int ' unterschiedlich
d:\sourcen\konto\zuordnung.c(133) : warning C4024: 'CreateDialogParamA' : Unterschiedliche Typen fuer formalen und uebergebenen Parameter 3
d:\sourcen\konto\zuordnung.c(162) : fatal error C1004: Unerwartetes Dateiende gefunden
Generieren von Code...
Fehler beim Ausführen von cl.exe.
Also hier mal der Quellcode: ( siehe Ausrufezeichen !!!!)// 3. Zuordnung Kontosatz zu Konto BOOL CALLBACK DlgProc4 (HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam) { // Lokale Variablen deklarieren static int count = 0; static int i = 1; int st = 0; char InsertString[1000]; static char buffer[BUFFERGROESSE]; struct zuordnungdaten zuordnung; char zeichenkette[200]; char nummer[20]; HWND hWndDlg = 0; // Globaler Fehlercode/Returncode int retcode = 0; int retcodeDB = 0; int nindex = 0; switch(message) { case WM_INITDIALOG: retcodeDB = connectDB(); count = FillArray(hDlg); // Füllen der KontoNummern und Kontonamen in Combobox for (i = 1; i <= count; i++) { strcpy((char *) zeichenkette,(const char *) tabelle[i].kontoklasse); strcat((char *) zeichenkette,(const char *) tabelle[i].kontogruppe); strcat((char *) zeichenkette,(const char *) tabelle[i].kontonummer); strcat((char *) zeichenkette,(const char *) " "); strcat((char *) zeichenkette,(const char *) tabelle[i].kontoname); return TRUE; case WM_COMMAND: { switch (LOWORD(wParam)) // OK / Abbrechen { case IDC_BUTTON1: { GetDlgItemText(hDlg,IDC_EDIT1,buffer,100); strcpy((char *) zuordnung.schluesseltext, (const char *) buffer); GetDlgItemText(hDlg,IDC_COMBO1,buffer,100); strcpy((char *) zuordnung.kontonr, (const char *) buffer); GetDlgItemText(hDlg,IDC_COMBO2,buffer,100); strcpy((char *) zuordnung.prioritaet, (const char *) buffer); } case IDC_BUTTON7: // Loeschen { GetDlgItemText(hDlg,IDC_EDIT1,buffer,100); strcpy((char *) zuordnung.schluesseltext, (const char *) buffer); GetDlgItemText(hDlg,IDC_COMBO1,buffer,100); strcpy((char *) zuordnung.kontonr, (const char *) buffer); GetDlgItemText(hDlg,IDC_COMBO2,buffer,100); strcpy((char *) zuordnung.prioritaet, (const char *) buffer); // Sicherheitsabfrage : Wirklich löschen? if ( retcode = MessageBox(hDlg,"Soll diese Zuordnung wirklich gelöscht werden?","Sicherheitsabfrage",MB_OKCANCEL) == IDOK) // Schlüsseldaten vorhanden => Löschen { // Handle anfordern retcodeDB = alloc_handleDB(); // Jetzt kann man dieses Handle nutzen für den Direktzugriff count = sprintf((char *) InsertString,(const char *) "DELETE FROM kontoverteilung where(schluesseltext='%s' and kontonr='%s' and prioritaet = '%s')",zuordnung.schluesseltext,zuordnung.kontonr,zuordnung.prioritaet); retcodeDB = exec_directDB((char *) InsertString); if (retcodeDB != 0) MessageBox(hDlg,"Löschen nicht OK", "Datenbankzugriff",MB_OK); // Handle lösen retcodeDB = free_handleDB(); return 0; } case IDC_BUTTON8: // Aendern { GetDlgItemText(hDlg,IDC_EDIT1,buffer,100); strcpy((char *) zuordnung.schluesseltext, (const char *) buffer); GetDlgItemText(hDlg,IDC_COMBO1,buffer,100); strcpy((char *) zuordnung.kontonr, (const char *) buffer); GetDlgItemText(hDlg,IDC_COMBO2,buffer,100); strcpy((char *) zuordnung.prioritaet, (const char *) buffer); // Handle anfordern retcodeDB = alloc_handleDB(); // Jetzt kann man dieses Handle nutzen für den Direktzugriff count = sprintf((char *) InsertString,(const char *) "UPDATE kontoverteilung set schluesseltext='%s', kontonr = '%s', prioritaet = '%s')",zuordnung.schluesseltext,zuordnung.kontonr,zuordnung.prioritaet); retcodeDB = exec_directDB((char *) InsertString); if (retcodeDB != 0) MessageBox(hDlg,"Ändern nicht OK", "Datenbankzugriff",MB_OK); // Handle lösen retcodeDB = free_handleDB(); return 0; } /* !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! */ case IDC_BUTTON9: // Anzeigen /* !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! */ { hWndDlg = CreateDialog(hDlg, MAKEINTRESOURCE(IDD_DIALOG5), hDlg, (DLGPROC) DlgProc5); ShowWindow(hWndDlg, SW_SHOW); return 0; } case IDOK: { retcodeDB = disconnectDB(); if(retcodeDB != 0) MessageBox(hDlg, "Schließen der Datenbank hat nicht geklappt!", "Datenbankzugriff", 0); EndDialog(hDlg,0); return TRUE; } // Cancel case IDCANCEL: { retcode = free_handleDB(); retcodeDB = disconnectDB(); if(retcodeDB != 0) MessageBox(hDlg, "Schließen der Datenbank hat nicht geklappt!", "Datenbankzugriff", 0); EndDialog(hDlg,0); return TRUE; } } // Switch LOWORD } // Switch Message } return FALSE; }
-
Speicher doch das Handle des nicht-modalen Fensters doch in einer globalen Variable und dann machst du einfach mit dem Handle was du willst.
-
Der Aufruf von CreateDialog() KANN so garnicht funktionieren! Schau dir mal den ersten Parameter näher an. Und den ersten, den du von der WinMain mitgegeben bekommst.