Win32: Nicht globale Variable an Bearbeitungschleifen uebergeben

23/01/2009 - 20:08 von Thomas Steinbach | Report spam
Hallo NG,

ich habe in meinem kleinen C Proggi (Win32/WinApi)
eine Strucktur in der ich am Anfang (winmain)
einige Werte aus einer ini-Datei speichere, um
diese dann im Programm zu verwenden.

Jetzt waere es mir am liebsten, wenn ich
diese Struktur auch aus meinen
nachrichtenverarbeitenden Schleifen der
DialogProcs nutzen koennte.

also z.B.:

INT_PTR CALLBACK DlgProc(HWND, UINT, WPARAM, LPARAM);
{
switch (uMsg)
case 1:
HelloWorld(pMyStruct);
...
usw.

return (INT_PTR)TRUE;
}

Allerdings habe ich das Problem das ich nach
einem WinMain und dem erzeugen/belegen der
Struktur variable innerhalb WinMain, diese
Sturktur nicht an meine Dialogprozeduren
weitergeben kann bzw. weiss ich nicht wie
ich das machen muss. Mir bleibt momentan
nur der Weg ueber eine globale Strukturvariable.
Das wuerde ich gerne vermeiden.

Die Variable innerhalb einer DialogProc immer wieder
neu zu erstellen, halte ich fuer zu aufwendig, dennn
dann wuerde ja bei _jeder_ Nachricht auch die
ini-Datei gelesen werden muessen, etc.
Auch wuerden eventuelle Wertaenderungen im laufenden
Programm verloren gehen oder man muesste dann die
ini-Datei auch immer gleich speichern... :-(
Das koennte sich als extrem zeitaufwenig erweisen
und u.U. den Rechner ausbremsen... nicht?

Wie geht man bei so einem Fall vor oder geht sowas
einfach nicht?

Thomas
 

Lesen sie die antworten

#1 Alexander Bartolich
24/01/2009 - 03:12 | Warnen spam
Thomas Steinbach schrieb:
[...]
Allerdings habe ich das Problem das ich nach
einem WinMain und dem erzeugen/belegen der
Struktur variable innerhalb WinMain, diese
Sturktur nicht an meine Dialogprozeduren
weitergeben kann bzw. weiss ich nicht wie
ich das machen muss. Mir bleibt momentan
nur der Weg ueber eine globale Strukturvariable.
Das wuerde ich gerne vermeiden.



CreateDialogParam reicht dwInitParam als lParam an WM_INITDIALOG durch.
Dort mit SetWindowLong an Offset DWL_USER oder GWL_USERDATA speichern.
Spàter mit GetWindowLong auslesen.

seq 0 1 99 | xargs -I. echo 'Romani Ite Domum!'

Ähnliche fragen