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.
ci avevo pensato anch'io però non mi piace tanto... come hai detto tu è la più "sporca".

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 ).
non ci ho capito molto... soprattutto dal "tenerlo vivo" in poi...

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.
mi ispira assai!! potresti approfondire un po'?

.... (oddio che robe mi vengono in mente in pieno Agosto....)
Eh si! il caldo da alla testa!



abbi pazienza perchè sono un po' duro a capire le cose!

grazie ancora una volta per la disponibilità