PAGESETUPDLG

PAGESETUPDLG構造体で、ページ設定を変更できる。

PAGESETUPDLGA (commdlg.h) - Win32 apps | Microsoft Docs
プリンタの設定

例えば、

					// 取得したIDごとに処理を分岐.
					// Printが選択された時.
					case ID_ITEM_PRINT:

						// ID_ITEM_PRINTブロック
						{

							// 変数の宣言と初期化.
							PRINTDLG pd = {0};	// PRINTDLG構造体pdを0で初期化.
							PAGESETUPDLG psd = {0};	// PAGESETUPDLG構造体psdを0で初期化.

							// pdの初期設定
							pd.lStructSize = sizeof(PRINTDLG);	// PRINTDLG構造体pdを0で初期化.
							pd.hwndOwner = hwnd;	// hwndを指定.
							pd.Flags = PD_RETURNDC;	// pdのメンバとしてhDCを返す.

							// PrintDlgの表示.
							BOOL bRet = PrintDlg(&pd);	// PrintDlgにpdを渡して表示し, 戻り値をBOOLのbRetに格納.
							if (bRet){	// 印刷を押したらTRUE.

								// psdの初期設定
								psd.lStructSize = sizeof(PAGESETUPDLG);	// sizeofでPAGESETUPDLG構造体のサイズを指定.
								psd.hwndOwner = hwnd;		// hwndを指定.
								psd.Flags = PSD_INTHOUSANDTHSOFINCHES;	// インチ単位に設定.

								// PageSetupDlgの表示.
								bRet = PageSetupDlg(&psd);	// PageSetupDlgにpsdを渡して表示し, 戻り値をbRetに格納.
								if (bRet){	// bRetがTRUE.
									MessageBox(NULL, _T("OK!"), _T("PAGESETUPDLG_struct"), MB_OK);	// MessageBoxで"OK!"とメッセージを表示.
								}
								else{	// bRetがFALSE.
									MessageBox(NULL, _T("Cancel!"), _T("PAGESETUPDLG_struct"), MB_OK);	// MessageBoxで"Cancel!"とメッセージを表示.
								}

								// 終了処理.
								DeleteDC(pd.hDC);	// DeleteDCでpd.hDCを削除.

							}

						}

						// 既定の処理へ向かう.
						break;	// breakで抜けて, 既定の処理(DefWindowProc)へ向かう.

このように余白を1000分の1インチ単位設定に変更できる。

こちらもマニフェスト追加
こちらもマニフェスト追加

こちらもマニフェスト追加。

余白が1000分の1インチ単位
余白が1000分の1インチ単位

余白が1000分の1インチ単位。
今度は、100分の1ミリ単位に戻して、左10、上20、右30、下40、の余白をセット。
(ダイアログ上は、0.1、0.2、0.3、0.4となる。)

このようにすると、

余白が100分の1ミリ単位
余白が100分の1ミリ単位

余白が100分の1ミリ単位で、ちゃんとセットされている。

Sample/winapi/PAGESETUPDLG_struct/PAGESETUPDLG_struct/src/PAGESETUPDLG_struct at master · bg1bgst333/Sample · GitHub