Проблема с CPageSetupDialog и Cancel
Нажимаю на кнопку появляется диалог - СPageSetupDialog. В диалоге меняю к примеру размер бумажного листа с А4 на С5 и нажимаю на кнопку Ok. Опять вызываю этот же диалог и вижу, что текущий размер бумаги поменялся. Далее в диалоге опять беру меняю тип бумаги с С5 на A4 и на этот раз нажимаю уже кнопку Cancel. В результате нажатия на кнопку Cancel текущий размер бумаги всё равно меняеться!
Кто нибудь знает как эту фигню побороть :-) ?
Вот код который использовал:
INT_PTR nRetCode;
PRINTDLG PrintDlg;
if(AfxGetApp()->GetPrinterDeviceDefaults(&PrintDlg))
{
CPageSetupDialog psd(PSD_MARGINS|PSD_DEFAULTMINMARGINS|
PSD_INTHOUSANDTHSOFINCHES,this);
psd.m_psd.hDevMode =PrintDlg.hDevMode;
psd.m_psd.hDevNames=PrintDlg.hDevNames;
nRetCode=psd.DoModal();
if(nRetCode==IDOK)
AfxGetApp()->SelectPrinter(psd.m_psd.hDevNames,
psd.m_psd.hDevMode);
}
Можешь попробовать использовать напрямик функцию PageSetupDlg (которую кстати CPageSetupDialog и использует). Вот пример:
PAGESETUPDLG psd;
HWND hwnd;
PRINTDLG PrintDlg;
AfxGetApp()->GetPrinterDeviceDefaults(&PrintDlg);
ZeroMemory(&psd, sizeof(psd));
psd.lStructSize = sizeof(psd);
psd.hwndOwner = GetSafeHwnd();
psd.hDevMode = PrintDlg.hDevMode;
psd.hDevNames = PrintDlg.hDevNames;
psd.Flags = PSD_INTHOUSANDTHSOFINCHES | PSD_MARGINS | PSD_DEFAULTMINMARGINS;
if (PageSetupDlg(&psd)==TRUE)
AfxGetApp()->SelectPrinter(psd.hDevNames,psd.hDevMode);