○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++