Weil durch dieses Flag nur der Print Setup Dialog aufgerufen wird und kein DC erzeugt wird!
Es steht doch auch entsprechend in der Doku:
http://msdn2.microsoft.com/en-us/library/32762a1z(VS.80).aspx
Note that when you call the constructor with bPrintSetupOnly set to FALSE, the PD_RETURNDC flag is automatically used. After calling DoModal, GetDefaults, or GetPrinterDC, a printer DC will be returned in m_pd.hDC. This DC must be freed with a call to DeleteDC by the caller of CPrintDialog.
In anderen Worten. Möchtest Du dennoch einen DC, dann setze auch das Flag PD_RETURNDC.
CPrintDialog dlgPrint(TRUE, PD_NOSELECTION|PD_RETURNDC, this);