Nachricht von Hauptfenster an Dialog
-
berniebutt schrieb:
Weil du mit der WinApi und wohl auch C noch wenig vertraut bist, hier einige weitere Hinweise.
1. Global definiert, z.B. char myString[20];
2. Im Hauptfenster Zuweisung auf myString mit z.B. strcpy(myString,"Hallo, du da!)"
3. Im Dialog im Case-Zweig WM_INITDIALOG SetDialogItemText(hDlg,IDD_xxx,myString) einsetzen
Das wäre für deinen Zweck schon alles! Dazu brauchst du keine weiteren Handles! Läuft so und wurde dir bereits so mitgeteilt.

ja das wusste ich auch selber schon. nur muss der anwender dann nach dem öffnen der box nochmal einen knopf drücken um den inhalt auszugeben.
was zwar nicht schlimm ist aba die bedienung des programms einfach nur komplizierter macht.also seit ihr der Meinung das das nicht funktionieren würde?
-
Also gut, in diesem speziellen Fall brauchst du global benutzerdefinierte Messages mit IDD_XXXX WM_USER+1 und natülich ebenfalls global die beiden FensterHandles hwndMain und hwndDlg. Dann schickst du gezielt aus dem Dialog eine Nachricht an das Hauptfenster eine Nachricht über wParam und oder lParam, was der Anwender gerade gemacht hat. Im Hauptfenster musst du nur einen Case-Zweig für IDD_XXXX einrichten und dort veranlassen, was du willst. Oder du schickst im Dialog die Nachricht IDD_XXXX an den Dialog selbst und veranlasst dort das gewünschte. Es geht alles!
-
berniebutt schrieb:
. Dann schickst du gezielt aus dem Dialog eine Nachricht an das Hauptfenster eine Nachricht über wParam und oder lParam, was der Anwender gerade gemacht hat.
so kommt doch auch die erste nachricht vom dialog.
aber die erste Nachricht komm doch vom Hauptfenster (drücken auf einen button),
das öffnet den dialog (und sollte ja auch gleich den inhalt wieder geben)oda muss dann die erste nachricht trozdem vom dialog kommen?
also sozusagen ein befehl das wartet der dialog auf den knopfdruck wartet?
oda so ähnlich?
-
Du möchtest doch nur einen bestimmten String, den du im Hauptnachrichtenfenster erzeugst, in dem Dialog anzeigen:
// statt DialogBox(...) nun TCHAR text[500]; // mit text arbeiten DialogBoxParam(// HINSTANCE, template, HWND und DlgProc wie DialogBox reinterpret_cast<LPARAM>(text)); .. //In der DlgProc case WM_INITDIALOG: { TCHAR* pText = reinterpret_cast<TCHAR*> lParam; //.. mit pText arbeiten break; }Globale Variablen sind in diesem Fall wie eigentlich immer total überflüssig und sollten vermieden werden.
Die Doku dazu steht hier.Edit: Kommentar verrutscht
-
Vicious Falcon schrieb:
Du möchtest doch nur einen bestimmten String, den du im Hauptnachrichtenfenster erzeugst, in dem Dialog anzeigen
ganz genau das möchte ich

und mit den befehlen muss dann kein knopf mehr im dialog getrückt werden um den inhalt anzuzeigen?
der string wir ja dann auchnoch natürlich zerteilt und in auf die jeweiligen fenster aufgeteilt, das is dann auch kein problem?
-
Nein, natürlich nicht. WM_INITDIALOG wird aufgerufen und dort kannst du alle Initialisierungen vornehmen.
Einen Tipp habe ich auch noch dazu. Du kannst jederzeit structs selber definieren:struct MyData { // irgendwelche Daten, die irgendwo benötigt werden }; ... My data d; // die Member von d setzten DialogBoxParam(.......,reinterpret_cast<LPARAM>(&d).Oder eben den C-Stil-Cast. Globale Daten sind somit überflüssig.
-
stimmt, strukturen sind da echt hilfreich

habe ich garnicht dran gedacht.nur eine kleine frage noch.
was kommt denn bei reininterpret_cast rein?

-
ich werde das später oder morgen alles versuchen und bescheid sagen obs klappt.
-
metapoint2011 schrieb:
was kommt denn bei reininterpret_cast rein?

Der reinterpret_cast ist ein C++-Cast. Anders als bei C gibt es in C++ verschiedene Casts. Der reinterpret_cast erzeugt allgemein einen Wert eines neuen Typs, der dasselbe Bitmuster wie das Argument hat.
In C gibt es einen Cast für alle Fälle:(Typ)Argument, also in dem Fall(LPARAM)text.
Es wird ausgenutzt, dass LPARAM immer so breit wie ein Zeiger ist, also unter 32 Bit Windows 4 Byte, unter Win64 8 Byte.metapoint2011 schrieb:
ich werde das später oder morgen alles versuchen und bescheid sagen obs klappt.
Mach das, aber warum sollte das nicht klappen?
:xmas1:
-
hi vicious,
das klappt perfekt. ich danke dir für deine hilfe und den andern auch.
eig wars ja ganz einfach. irgentwie versteh ich jetzt auch mehr wie man lParam
und wParam benutzt.Das ist toll.