Manca il message loop, che è necessario per i dialog modeless (è invece corretto ometterlo per i dialog modali, perché la funzione DialogBoxParam incorpora un suo message loop).
codice:
	BOOL bRet;
	MSG msg;
	while ((bRet = GetMessage(&msg, NULL, 0, 0)) != 0) 
	{ 
		if (bRet == -1)
		{
			return 1;
		}
		else if (!IsWindow(hWnd) || !IsDialogMessage(hWnd, &msg)) 
		{ 
			TranslateMessage(&msg); 
			DispatchMessage(&msg); 
		} 
	}
P.S.: e non mettere mai più un
codice:
while(true)
{
    ;
}
, che mi si stava impallando tutto!