GWL_USERDATA bei Dialogen?
-
Hi
Ich schreib grade ne Klasse zum initialisiern von DX und wollte die einstellungen die ich dafür brauche wollte ich aus nem Dialog holen den ich in ner methode erstelle. Wenns keine Dialog wär sondern nen normales Wnd könnte ich doch mitSetWindowLongPtr(m_hInitDlg, GWL_USERDATA, reinterpret_cast<LONG_PTR>(this));und dann in der DlgProc:
CMeineKlasse* pThis = reinterpret_cast<CMeineKlasse*>(GetWindowLongPtr(hWndDlg, GWL_USERDATA));arbeiten so dass ich danach mit pThis-> auf private elemente zugreifen kann.
Aber der pointer ist nach diesem aufruf immer noch 0!?den Dialog erstell ich mit
if(!(m_hInitDlg = CreateDialog(hInstance, MAKEINTRESOURCE(IDD_D3DINFORMATION), NULL, m_InitDlgProc))) return false;und m_InitDlgProc ist als friend funktion deklariert. ich weiß nicht recht was ich da noch machen kann?
Hoffe ihr könnt mir helfen!!
-
*push* ;_;
-
Yahiko schrieb:
Aber der pointer ist nach diesem aufruf immer noch 0!?
Bevor der Aufruf von CreateDialog () zurückkehrt, ruft das Betriebssystem 2,3,4 mal die "DlgProc" auf (mit WM_CREATE, WM_INITDIALOG, ...). Solange ist der Pointer ungültig.
Erst wenn CreateDialog () zurückkehrt und SetWindowLongPtr () erfolgreich aufgerufen wurde ist der Pointer gültig.
-
Man kann dafür CreateDialogParam verwenden. Dann bekommt man in WM_INITDIALOG brav den entsprechenden Zeiger gelifert und kann in per SetWindowLong setzen.
-
Wow cool danke!
