int CMyDlg::PrintTest()
{
CPrintDialog PrintDialog(TRUE,PD_ALLPAGES|PD_NOPAGENUMS,NULL);
if(PrintDialog.DoModal()!=IDOK) return 0; //顯示列印設定對話框(不顯示把這一行去掉)
//重新定義紙張大小
DEVMODE* lpDevMode = (DEVMODE*)PrintDialog.GetDevMode();
lpDevMode->dmPaperSize = DMPAPER_USER; //設定為自定義紙張尺寸
lpDevMode->dmFields |= DM_PAPERSIZE; //允許重新設定紙張大小
lpDevMode->dmPaperWidth = 900; // 列印紙寬度 9 厘米
lpDevMode->dmPaperLength = 1200; // 設定紙長為 12 厘米
HDC PrintDC = PrintDialog.CreatePrinterDC(); // 回傳一個列印DC句柄
ResetDC(PrintDC,lpDevMode); //使設定的引數發揮作用
CDC dc;
dc.Attach(PrintDC);
dc.ResetDC(lpDevMode);
int printWidth=dc.GetDeviceCaps(HORZRES);
int printHeight=dc.GetDeviceCaps(VERTRES);
CString kk;
kk.Format("printWidth=%d,printHeight=%d", printWidth,printHeight);
AfxMessageBox(kk);
return 1;
}
本人設計一個證書列印程式,不管更改 lpDevMode->dmPaperWidth 數值大小
以上程式顯示的結果總是一樣
不知哪里出了問題?
uj5u.com熱心網友回復:
終于找到答案了,以下結果正確int CMyDlg::PrintTest()
{
CPrintDialog dlg (FALSE,PD_RETURNDEFAULT); //構造列印對話框
if(dlg.DoModal()==IDOK)
{
CDC dc;
//定義列印紙的大小
LPDEVMODE dev = dlg.GetDevMode();
dev->dmPaperSize = DMPAPER_USER;
dev->dmPaperLength = 1900;
dev->dmPaperWidth = 1600;
dev->dmFields = DM_PAPERSIZE | DM_PAPERWIDTH | DM_PAPERLENGTH | dev->dmFields;
dev->dmFields = dev->dmFields | DMBIN_MANUAL;
dev->dmDefaultSource = DMBIN_MANUAL;
//獲得列印紙可列印區域的長和寬
dc.Attach(dlg.CreatePrinterDC());
CSize size;
size.cx = dc.GetDeviceCaps(VERTSIZE);
size.cy = dc.GetDeviceCaps(HORZSIZE);
CString str;
str.Format("長:%d毫米\n寬:%d毫米",size.cx,size.cy);
AfxMessageBox(str);
dc.DeleteDC();
}
return 1;
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/240223.html
標籤:界面
上一篇:如何獲取當前按鈕的ID
