Ci sono diverse soluzioni, che si differenziano principalmente per quanto riguarda eleganza/design/semplicità.Originariamente inviato da MRj92
ho una finestra (la principale), e un dialog modale che richiede username,password e un numero. Il dialog elabora se la passord è giusta e poi dovrebbe passare l'username alla main window. Ma come effettuare questo passaggio?
Per passare lo username puoi quindi:
A) Usare una variabile globale. Tanto hai detto che è una dialog "modale", pertanto puoi avere solo una dialog di login per volta e la funzione DialogBox() è "bloccante", termina solo a seguito di una EndDialog nella dialog-procedure.
Questa è la soluzione più "sporca" ma anche la più immediata.
B) Invece di usare DialogBox() si può usare DialogBoxParam() che ha un parametro in più di tipo LPARAM per passare un valore "custom" qualunque. Si può passare ad esempio un puntatore ad una struttura. Il valore LPARAM dwInitParam viene passato solamente al ricevimento del messaggio WM_INITDIALOG e in genere la cosa migliore per "tenerlo vivo" è: 1) usare SetWindowLongPtr/GetWindowLongPtr per avere il valore nell'offset DWLP_USER oppure 2) usare SetProp/GetProp per avere il valore in una property con nome associata alla finestra.
Leggere attentamente la documentazione delle funzioni menzionate (quest'ultima frase sembra quella che si legge sui medicinali).
C) Inviare alla finestra padre (della dialog box) un messaggio custom. Questa sarebbe una comunicazione asincrona, quindi è ovviamente da valutare. I messaggi custom partono da WM_USER in poi.
Altre soluzioni sarebbero dei "mix", ad esempio impostare una property sulla finestra padre che contiene un puntatore alla stringa con lo username. Non è il massimo..... (oddio che robe mi vengono in mente in pieno Agosto....)
Personalmente, tutte quelle volte che ho dovuto restituire più informazioni di tipo eterogeneo da una dialog-box modale, ho usato il metodo B) definendo una apposita struttura.

).
Rispondi quotando