ResetDC

ダイアログを使わずに、設定変更を反映するには、ResetDCでプリンタ用デバイスコンテキストを更新する。

ResetDCA function (wingdi.h) - Win32 apps | Microsoft Docs
プリンタの情報

普通に、

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

						// ID_ITEM_PRINTブロック
						{

							// 変数の宣言
							HWND hEdit1;	// エディットコントロールのハンドルhEdit1.
							int len;		// ウィンドウ名の文字数len.
							TCHAR *ptszPrinterName;	// ウィンドウ名へのポインタptszPrinterName.
							HDC hPrinterDC;	// プリンタのデバイスコンテキストハンドルhPrinterDC.
							int iRetSD;	// StartDocの戻り値iRetSD.
							int iRetSP;	// StartPageの戻り値iRetSP.

							// エディットボックスのプリンタ名の取得.
							hEdit1 = GetDlgItem(hwnd, ID_EDIT1);		// GetDlgItemでID_EDIT1のハンドルを取得.
							len = GetWindowTextLength(hEdit1);	// GetWindowTextLengthでhEdit1のウィンドウ名の文字数を取得.
							ptszPrinterName = new TCHAR[len + 1];	// newで長さlen + 1のTCHAR配列バッファを用意.
							GetWindowText(hEdit1, ptszPrinterName, len + 1);	// GetWindowTextでウィンドウ名をptszPrinterNameに格納.

							// 取得したプリンタ名のプリンタで"ABCDE"を印刷.
							DOCINFO di = {0};	// DOCINFO構造体diを{0}で初期化.
							di.cbSize = sizeof(DOCINFO);	// sizeofでDOCINFOのサイズを指定.
							di.lpszDocName = _T("ResetDC");	// ドキュメント名は"ResetDC"とする.
							hPrinterDC = CreateDC(NULL, ptszPrinterName, NULL, NULL);	// CreateDCでptszPrinterNameのデバイスコンテキストハンドルhPrinterDCを取得.
							if (hPrinterDC != NULL){	// hPrinterDCがNULLでなければ.
								// 印刷開始
								iRetSD = StartDoc(hPrinterDC, &di);	// StartDocで印刷ジョブの開始.
								if (iRetSD > 0){	// 印刷開始成功.
									iRetSP = StartPage(hPrinterDC);	// StartPageでページの開始.
									if (iRetSP > 0){	// ページ開始成功.
										TextOut(hPrinterDC, 50, 0, _T("ABCDE"), _tcslen(_T("ABCDE")));	// TextOutでプリンタの(50, 0)の位置に"ABCDE"を描画.
										EndPage(hPrinterDC);	// EndPageでページ終了.
									}
									EndDoc(hPrinterDC);	// EndDocで印刷ジョブ終了.
								}
								DeleteDC(hPrinterDC);	// DeleteDCでhPrinterDCを削除.
							}

							// バッファの解放.
							delete [] ptszPrinterName;	// deleteでptszPrinterNameを解放.

						}

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

これで印刷する。

印刷設定を見ても
印刷設定を見ても

印刷設定を見ても、

縦になってるよね
縦になってるよね

縦になってるよね。

この状態で印刷
この状態で印刷

この状態で印刷。

わかりにくいけど縦印刷
わかりにくいけど縦印刷

わかりにくいけど縦印刷。

DEVMODEで設定変更して、ResetDCでhPrinterDCを更新。
これで印刷すると、

これもちょっとわかりにくいけど横印刷になっている
これもちょっとわかりにくいけど横印刷になっている

これもちょっとわかりにくいけど横印刷になっている。

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