Buonasera,
ho un problema probabilmente banale, ma non ne vengo a capo.
In sostanza ho un puntatore ad una classe che vorrei passare come lParam con il metodo DialogBoxParam, il codice è il seguente:
codice:
LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
int wmId, wmEvent;
PAINTSTRUCT ps;
HDC hdc;
Ricerca* r = reinterpret_cast<Ricerca*>(GetWindowLongPtr(hWnd,GWLP_USERDATA));
switch (message)
{
............
case IDM_TROVA:
DialogBoxParam(hInst, MAKEINTRESOURCE(IDD_TROVA), hWnd, Trova, (LPARAM) r);
break;
..............
Ora, al momento di di recuperare il puntatore dentro la DialogProcedure Trova procedo in questo modo
codice:
INT_PTR CALLBACK Trova(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
{
UNREFERENCED_PARAMETER(lParam);
int wmId, wmEvent;
Ricerca* r = reinterpret_cast<Ricerca*>lParam;
Ora se faccio r-> in effetti riesco ad accedere ad ogni variabile e metodo della classe, ma non appena scrivo qualcosa questo genera errore. Dal debug ho dedotto che quello che r dentro la DialogProcedure punta cose a caso in memoria (per per esempio mi dice r->i=... nonostante i sia un valore correttamente inizializzato e più volte acceduto prima della chiamata alla DialogBox).
Con ogni probabilità sono io che non ho capito che si usa la DialogBoxParam, ma per quello che ho trovato su MSDN sono rimasto al punto di partenza...
Da notare che se non uso DialogBoxParam ma accedo in modo brutale al puntatore r
codice:
Ricerca* r = reinterpret_cast<Ricerca*>(GetWindowLongPtr(GetParent(hDlg),GWLP_USERDATA));
Tutto funziona correttamente, ma questa soluzione non è quello che cerco.
Grazie a chiunque saprà darmi una mano.