主题:PageSetupdlg打印机无法初始化问题
在使用PageSetupdlg时有如下代码:
BOOL GetPageInfo(HWND hwnd, DEVMODE *lpDevMode, DEVNAMES *lpDevNames, LPRECT lprtMargin)
{
PAGESETUPDLG psd;
SecureZeroMemory(&psd,sizeof(PAGESETUPDLG));
psd.lStructSize = sizeof(psd);
psd.hwndOwner = hwnd;
psd.Flags = PSD_INHUNDREDTHSOFMILLIMETERS|PSD_RETURNDEFAULT;
if(PageSetupDlg(&psd))
{
CopyMemory(lpDevMode,GlobalLock(psd.hDevMode),sizeof(DEVMODE));
GlobalUnlock(psd.hDevMode);
GlobalFree(psd.hDevMode);
CopyMemory(lpDevNames,GlobalLock(psd.hDevNames),sizeof(DEVNAMES));
GlobalUnlock(psd.hDevNames);
GlobalFree(psd.hDevNames);
if(lprtMargin) *lprtMargin = psd.rtMargin;
return TRUE;
}
return FALSE;
}
BOOL SetPageInfo(HWND hwnd, DEVMODE *lpDevMode, DEVNAMES *lpDevNames, LPRECT lprtMargin)
{
PAGESETUPDLG psd;
SecureZeroMemory(&psd,sizeof(PAGESETUPDLG));
psd.lStructSize = sizeof(PAGESETUPDLG);
psd.hwndOwner = hwnd;
psd.Flags = PSD_INHUNDREDTHSOFMILLIMETERS;
if(lpDevMode)
{
psd.hDevMode = GlobalAlloc(GMEM_MOVEABLE,sizeof(DEVMODE));
if(!psd.hDevMode) return FALSE;
CopyMemory(GlobalLock(psd.hDevMode),lpDevMode,sizeof(DEVMODE));
GlobalUnlock(psd.hDevMode);
}
if(lpDevNames)
{
psd.hDevNames = GlobalAlloc(GMEM_MOVEABLE,sizeof(DEVNAMES));
if(!psd.hDevNames)
{
GlobalFree(psd.hDevMode);
return FALSE;
}
CopyMemory(GlobalLock(psd.hDevNames),lpDevNames,sizeof(DEVNAMES));
GlobalUnlock(psd.hDevNames);
}
if(lprtMargin)
{
psd.Flags |= PSD_MARGINS;
psd.rtMargin = *lprtMargin;
}
if(PageSetupDlg(&psd))
{
if(psd.hDevMode)
{
if(lpDevMode)
{
CopyMemory(lpDevMode,GlobalLock(psd.hDevMode),sizeof(DEVMODE));
GlobalUnlock(psd.hDevMode);
}
GlobalFree(psd.hDevMode);
}
if(psd.hDevNames)
{
if(lpDevNames)
{
CopyMemory(lpDevNames,GlobalLock(psd.hDevNames),sizeof(DEVNAMES));
GlobalUnlock(psd.hDevNames);
}
GlobalFree(psd.hDevNames);
}
if(lprtMargin) *lprtMargin = psd.rtMargin;
return TRUE;
}
return FALSE;
}
使用SetPageInfo获得打印纸的信息后再次调用SetPageInfo后,页面对话框中纸张大小方向和页边距都是对的,就是来源和点击“打印机”后显示的打印机不是参数中设置的打印机,不知道什么原因?记事本中的页面设置却可以,不知道怎么回事?
BOOL GetPageInfo(HWND hwnd, DEVMODE *lpDevMode, DEVNAMES *lpDevNames, LPRECT lprtMargin)
{
PAGESETUPDLG psd;
SecureZeroMemory(&psd,sizeof(PAGESETUPDLG));
psd.lStructSize = sizeof(psd);
psd.hwndOwner = hwnd;
psd.Flags = PSD_INHUNDREDTHSOFMILLIMETERS|PSD_RETURNDEFAULT;
if(PageSetupDlg(&psd))
{
CopyMemory(lpDevMode,GlobalLock(psd.hDevMode),sizeof(DEVMODE));
GlobalUnlock(psd.hDevMode);
GlobalFree(psd.hDevMode);
CopyMemory(lpDevNames,GlobalLock(psd.hDevNames),sizeof(DEVNAMES));
GlobalUnlock(psd.hDevNames);
GlobalFree(psd.hDevNames);
if(lprtMargin) *lprtMargin = psd.rtMargin;
return TRUE;
}
return FALSE;
}
BOOL SetPageInfo(HWND hwnd, DEVMODE *lpDevMode, DEVNAMES *lpDevNames, LPRECT lprtMargin)
{
PAGESETUPDLG psd;
SecureZeroMemory(&psd,sizeof(PAGESETUPDLG));
psd.lStructSize = sizeof(PAGESETUPDLG);
psd.hwndOwner = hwnd;
psd.Flags = PSD_INHUNDREDTHSOFMILLIMETERS;
if(lpDevMode)
{
psd.hDevMode = GlobalAlloc(GMEM_MOVEABLE,sizeof(DEVMODE));
if(!psd.hDevMode) return FALSE;
CopyMemory(GlobalLock(psd.hDevMode),lpDevMode,sizeof(DEVMODE));
GlobalUnlock(psd.hDevMode);
}
if(lpDevNames)
{
psd.hDevNames = GlobalAlloc(GMEM_MOVEABLE,sizeof(DEVNAMES));
if(!psd.hDevNames)
{
GlobalFree(psd.hDevMode);
return FALSE;
}
CopyMemory(GlobalLock(psd.hDevNames),lpDevNames,sizeof(DEVNAMES));
GlobalUnlock(psd.hDevNames);
}
if(lprtMargin)
{
psd.Flags |= PSD_MARGINS;
psd.rtMargin = *lprtMargin;
}
if(PageSetupDlg(&psd))
{
if(psd.hDevMode)
{
if(lpDevMode)
{
CopyMemory(lpDevMode,GlobalLock(psd.hDevMode),sizeof(DEVMODE));
GlobalUnlock(psd.hDevMode);
}
GlobalFree(psd.hDevMode);
}
if(psd.hDevNames)
{
if(lpDevNames)
{
CopyMemory(lpDevNames,GlobalLock(psd.hDevNames),sizeof(DEVNAMES));
GlobalUnlock(psd.hDevNames);
}
GlobalFree(psd.hDevNames);
}
if(lprtMargin) *lprtMargin = psd.rtMargin;
return TRUE;
}
return FALSE;
}
使用SetPageInfo获得打印纸的信息后再次调用SetPageInfo后,页面对话框中纸张大小方向和页边距都是对的,就是来源和点击“打印机”后显示的打印机不是参数中设置的打印机,不知道什么原因?记事本中的页面设置却可以,不知道怎么回事?