如何修改打印机的默认纸张类型? 程序的打印是按 “宽孔打印纸”(纸张类型为:15X11 inch)设计的,可是打印机默认的纸张是A4,每次打印前都得先调整纸张类型,否则就错,打印机是LQ1600KIII模拟为CR3200+,如何将默认纸张类型改为“宽孔打印纸”,使得不用先调整纸张,直接可以正确打印? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 直接修改CPrintInfo::m_rectDraw的大小为你希望的纸张的大小试试。 pInfo->m_pPD->m_pd.lStructSize=(DWORD)sizeof(PRINTDLG); BOOL bRet=AfxGetApp()->GetPrinterDeviceDefaults(&(pInfo->m_pPD->m_pd)); DEVMODE FAR *pDevMode=(DEVMODE FAR *)::GlobalLock(pInfo->m_pPD->m_pd.hDevMode); if(pDoc->b_printbar) { pDevMode->dmPaperSize = …… } ::GlobalUnlock(pInfo->m_pPD->m_pd.hDevMode); DEVMODE* pDevMode; DEVNAMES* lpDevNames; LPTSTR lpszDeviceName; /////////////////////////////////////////////////////////////////// if(pApp->GetPrinterDeviceDefaults(&dlg.m_pd) == 0) { ::AfxMessageBox("错误!当前没有连接打印机!",MB_OK); return; } pDevMode = (DEVMODE*)GlobalLock(dlg.m_pd.hDevMode); lpDevNames = (LPDEVNAMES)GlobalLock(dlg.m_pd.hDevNames); lpszDeviceName = (LPTSTR )lpDevNames + lpDevNames->wDeviceOffset; if (::OpenPrinter((char *) pDevMode->dmDeviceName, &hPrinter, NULL) == FALSE) return; Len = DocumentProperties(NULL, NULL, lpszDeviceName, pDevMode, NULL, 0); pDevMode->dmPaperSize = DMPAPER_A4; lstrcpy((char *)pDevMode->dmFormName,"A4 210 *297 mm"); //这里 Len = DocumentProperties(NULL, hPrinter, lpszDeviceName, NULL, pDevMode, DM_IN_BUFFER); GlobalUnlock(dlg.m_pd.hDevMode); GlobalUnlock(dlg.m_pd.hDevNames); { PRINTDLG pd; pd.lStructSize=(DWORD)sizeof(PRINTDLG); BOOL bRet=AfxGetApp()->GetPrinterDeviceDefaults(&pd); if(bRet) { // protect memory handle with ::GlobalLock and ::GlobalUnlock DEVMODE FAR *pDevMode=(DEVMODE FAR *)::GlobalLock(pd.hDevMode); pDevMode->dmPaperSize = DMPAPER_A4; ::GlobalUnlock(pd.hDevMode); }} 不解???????,不是改为A4,是改默认纸张为“宽行打印纸(15X11 inch)”它对应的纸张类型代码我不知:( 我找一下有17*11的,没有15*11的,DMPAPER_11X17 为啥运行调试都没问题,就不出结果呢。。。郁闷 寻找五子棋棋子的图片和掩码 怎样才能拦截所有程序的send函数? 如何用vc++/c#实现图形线段的偏移 现在VC的主要发展方向是什么? @@@@@为什么我的客户端socket阻塞发送数据以后就不能接收OnReceive消息了? 我找不到Socksvr.lib这个库 char(13)是什么意思?char("a")呢? 用VC如何写一个xml文件的声明 求助,基于形状的图像检索 执行CRecordset::AddNew()之后增加的记录是在记录库的哪个位置,有说法吗?? 对同一个socket操作需要在线程间同步吗?
BOOL bRet=AfxGetApp()->GetPrinterDeviceDefaults(&(pInfo->m_pPD->m_pd));
DEVMODE FAR *pDevMode=(DEVMODE FAR *)::GlobalLock(pInfo->m_pPD->m_pd.hDevMode);
if(pDoc->b_printbar)
{
pDevMode->dmPaperSize = ……
}
::GlobalUnlock(pInfo->m_pPD->m_pd.hDevMode);
DEVNAMES* lpDevNames;
LPTSTR lpszDeviceName;
///////////////////////////////////////////////////////////////////
if(pApp->GetPrinterDeviceDefaults(&dlg.m_pd) == 0)
{
::AfxMessageBox("错误!当前没有连接打印机!",MB_OK);
return;
}
pDevMode = (DEVMODE*)GlobalLock(dlg.m_pd.hDevMode);
lpDevNames = (LPDEVNAMES)GlobalLock(dlg.m_pd.hDevNames);
lpszDeviceName = (LPTSTR )lpDevNames + lpDevNames->wDeviceOffset; if (::OpenPrinter((char *) pDevMode->dmDeviceName, &hPrinter, NULL) == FALSE)
return;
Len = DocumentProperties(NULL, NULL, lpszDeviceName, pDevMode, NULL, 0);
pDevMode->dmPaperSize = DMPAPER_A4;
lstrcpy((char *)pDevMode->dmFormName,"A4 210 *297 mm"); //这里 Len = DocumentProperties(NULL, hPrinter, lpszDeviceName, NULL, pDevMode, DM_IN_BUFFER);
GlobalUnlock(dlg.m_pd.hDevMode);
GlobalUnlock(dlg.m_pd.hDevNames);
{
PRINTDLG pd;
pd.lStructSize=(DWORD)sizeof(PRINTDLG);
BOOL bRet=AfxGetApp()->GetPrinterDeviceDefaults(&pd);
if(bRet)
{
// protect memory handle with ::GlobalLock and ::GlobalUnlock
DEVMODE FAR *pDevMode=(DEVMODE FAR *)::GlobalLock(pd.hDevMode);
pDevMode->dmPaperSize = DMPAPER_A4;
::GlobalUnlock(pd.hDevMode);
}
}