○SDK 印刷処理
@起動時にPageSetUpInit(hDlg);を呼び出して初期化
APageSetUp();およびPrinter(hDlg);にてページ設定と印刷ができます。
PageSetUp();を呼び出して設定します
Printer(hDlg);により印刷します
PAGESETUPDLG PSDlg;
void PageSetUpInit(HWND hWnd){
PSDlg.hDevMode =NULL;
PSDlg.hDevNames =NULL;
PSDlg.lStructSize = sizeof (PAGESETUPDLG);
PSDlg.hwndOwner = hWnd;
PSDlg.Flags=PSD_RETURNDEFAULT | PSD_INHUNDREDTHSOFMILLIMETERS;//ダイアログを表示せずに実行させてデフォルトを読み込ませる
PageSetupDlg(&PSDlg);
PSDlg.Flags = PSD_INHUNDREDTHSOFMILLIMETERS;
}
void PageSetUp(){
PageSetupDlg(&PSDlg);
}
void Printer(HWND hWnd){
PRINTDLG PDlg;
DOCINFO Dinfo;
memset(&PDlg, 0, sizeof(PRINTDLG));
PDlg.lStructSize = sizeof(PRINTDLG);
PDlg.hwndOwner = hWnd;
PDlg.hDevMode = PSDlg.hDevMode;
PDlg.hDevNames = PSDlg.hDevNames;
PDlg.Flags = PD_USEDEVMODECOPIESANDCOLLATE | PD_RETURNDC | PD_NOSELECTION | PD_HIDEPRINTTOFILE ;
/////////////////印刷部数をプリンタに任せる | hDCを取得 | 選択範囲を無効 |ファイルへ出力を無効
memset(&Dinfo, 0, sizeof(DOCINFO));
Dinfo.cbSize = sizeof(DOCINFO);
Dinfo.lpszDocName = "印刷";
if (PrintDlg(&PDlg)==TRUE) {
//印刷開始
StartDoc(PDlg.hDC, &Dinfo);//印刷開始
//1ページ目---------------------------------------------------------
StartPage(PDlg.hDC);//ページの開始
TextOut(PDlg.hDC,10,10,"1ページ目", strlen("1ページ目"));
EndPage(PDlg.hDC);//ページの終了
//2ページ目---------------------------------------------------------
StartPage(PDlg.hDC);//ページの開始
TextOut(PDlg.hDC,10,10,"2ページ目", strlen("2ページ目"));
EndPage(PDlg.hDC);//ページの終了
//3ページ目---------------------------------------------------------
StartPage(PDlg.hDC);//ページの開始
//用紙のサイズ(ピクセル数)を求める
int Height=GetDeviceCaps(PDlg.hDC,PHYSICALHEIGHT);
int Width=GetDeviceCaps(PDlg.hDC,PHYSICALWIDTH);
//プリンタの1インチあたりのピクセル数を求める
int PrX_i = GetDeviceCaps(PDlg.hDC, LOGPIXELSX);
int PrY_i = GetDeviceCaps(PDlg.hDC, LOGPIXELSY);
//センチをインチに変換
//インチ = センチ * 0.3937
//マージンを求める
int Mtop = (int)((((double)PSDlg.rtMargin.top/(double)1000)* 0.3937)*PrY_i);
int Mbottom = (int)((((double)PSDlg.rtMargin.bottom/(double)1000)* 0.3937)*PrY_i);
int Mright = (int)((((double)PSDlg.rtMargin.right/(double)1000)* 0.3937)*PrX_i);
int Mleft = (int)((((double)PSDlg.rtMargin.left/(double)1000)* 0.3937)*PrX_i);
MoveToEx(PDlg.hDC,Mleft,Mtop,NULL);LineTo(PDlg.hDC,Width-Mright ,Height-Mbottom);//線を引きます
MoveToEx(PDlg.hDC,Mleft,Height-Mbottom,NULL);LineTo(PDlg.hDC,Width-Mright ,Mtop);//線を引きます
//--------------------------------------------------------------------
EndDoc(PDlg.hDC);//印刷終了
DeleteDC(PDlg.hDC);
}
}
▲トップページ
>
Windows と C++