だいぶ理解できてきた

印刷のマージンは,ディスプレイとプリンタとでちょっと異なるようだ.
印刷プレビュー付きアプリケーションを全部自作するときに考えるべき単位は

  • プリンターの単位 [px]
  • 印刷プレビューの単位 [px]
  • マージン等を処理するときの単位 [mm] or [inch]

がある.
ディスプレイ(印刷プレビュー)とプリンターの解像度を使えばこれらの間の相互変換が可能だ(印刷プレビューの場合はこれにスケーリングファクタが加わる).
プリンタ自身が持つマージンにも気をつける必要がある.これは,印刷の開始位置がプリンタのマージンの左上隅から始まるためだ(もしかすると機種依存かもしれない).
もちろん,Windows の印刷関連 API にはピクセル単位ではなく mm や inch 単位で指定することができるようにできるオプションがある(SetMapMode)が,例えばフォントサイズはディスプレイ解像度(96 dpi)を基準にしているから,プリンターに出力する際にはフォントサイズを適切にスケーリングする必要がある.
フォントサイズのスケーリングはまた複雑な処理が必要だが,ワープロソフトを作るのでない限り,単純な線形スケーリングでも問題ないだろう.

ところで私の使っているディスプレイは 16inch - SXGA なので,ほぼ 96 dpi になっている.つまり,拡大率を 100% にするとほぼ印刷結果と同じ(ディスプレイに印刷結果を重ねて確認w)ため,一つ上の WYSIWYG が実現できている.ちょっとだけ嬉しい(笑)