Kopierzähler: hInstance = ( ( LPCREATESTRUCT ) lParam ) -> hInstance !!! versteh ich nicht ganz!??!
-
hallo, ich experimentiere gerade etwas mit Buttons, SB, EB, RB ... usw. rum. und jedenfalls bin ich nun auf
hInstance = ( ( LPCREATESTRUCT ) lParam ) -> hInstancegestoßen, was mir aber net ganz einleuchtet. könnte mir hier an dieser stelle vllt. jemand mal etwas nachhilfe geben? wie genau des mit dem Kopierzähle geht.
Danke, Gruß Tobi!
-
Jedes gestartete Programm bekommt vom Betriebssystem (Windows) ein Instanz-Handle. Wenn Du nun (Child-)Fenster erzeugen willst, brauchst Du dieses Instanzhandle für den Aufruf von CreateWindow(Ex)(...).
Bei der Botschaft WM_CREATE wird per lParam ein Zeiger auf CREATESTRUCT mitgeliefert.
int _stdcall WndProc(HWND hwnd, unsigned int message, unsigned int wParam, long lParam) { HINSTANCE hInstance; switch(message) { case WM_CREATE: hInstance = ((LPCREATESTRUCT)lParam)->hInstance; oder hInstance = GetWindowLong(hwnd, GWL_HINSTANCE); CreateWindow("button", ... hInstance, 0); return 0; } return DefWindowProc(hwnd, message, wParam, lParam); }oder
HINSTANCE hInstGlobal; ... WinMain(HINSTANCE hInstance, ...) { hInstGlobal = hInstance; }
-
zuwas würde e3s führen, wenn ich diese deklaration von hInstance einfach wg lassen wuerde?
-
CreateWindow(..., 0, 0);funktioniert auch.
-
hmm also is es ueberflüssig? auch bei mehreren Windows? also ein parent mit 20button... da braeuchte man es au net?
-
Also wenn Du das:
T0bi schrieb:
zuwas würde e3s führen, wenn ich diese deklaration von hInstance einfach wg lassen wuerde?
auf das:
keksekekse schrieb:
HINSTANCE hInstGlobal; ... WinMain(HINSTANCE hInstance, ...) { hInstGlobal = hInstance; }beziehst...dann geht es nicht, da die Syntax der Funktion WinMain vorgeschrieben ist.
keksekekse schrieb:
CreateWindow(..., 0, 0);funktioniert auch.
Da der Instanz-Handle der aktuellen Instanz angenommen wird.
T0bi schrieb:
hmm also is es ueberflüssig? auch bei mehreren Windows? also ein parent mit 20button... da braeuchte man es au net?
Ja, in diesem Fall schon, da es ja bei allen Fenstern um die gleiche Instanz handelt. Wenn Du zum Beispiel ein Control in einer anderen Anwendung erstellen willst, musst Du dann im HINSTANCE-Parameter den entsprechenden Handle angeben.