ページ設定と印刷 [プログラミング]
MFCにCPageSetupDialog
というダイアログがありました。
印刷するページを設定するためのダイアログのようで、紙の大きさや向き、余白の設定が出来ます。
印刷する紙のサイズは、CPrintDialog
からも出来ますが(印刷ダイアログで[プロパティ]ボタンを押して、プリンタ独自の設定ダイアログで設定できる)、紙のサイズがCPageSetupDialog
とCPrintDialog
で食い違ったらどうするんだろう………。
CPageSetupDialog
で指定したサイズや向きを正として印刷イメージを作成し、それをCPrintDialog
で指定したサイズに投影するのが、一般的な方法なんだろうか。
つまり、CPageSetupDialog
で、用紙A4、余白1cmとし、CPrintDialog
でA3を指定したら、A4で1cmの余白になる様にしたものをA3に拡大して印刷するから結果として余白は2cmになるんだろうか………。
多分なるんだろうな。
CPageSetupDialog
でA4縦と指定して、CPrintDialog
でA4横を指定したら、縦が潰れて横に伸びた風に印刷されるのかな。
※とりあえず試してみたけど、余白に関しては、なんとなくそれっぽい(文字は普通に出たけど)。
で、これを実現するには、
SetWindowExt
とSetViewportExt
を使えば意外と簡単に実現できそうだけど、使い方がよく解らなかったのですよ。
そんな訳で、「暗号メモ帳」には印刷機能が実装されていません。
「折角暗号化して他人から見られない様にしているのに、印刷しちゃったら意味ないじゃーん」ということで…
仕様書書き(仕事)が飽きてきたので気分転換として色々と試して見た所、
SetWindowExt()
で指定したサイズのものが、SetViewportExt()
で設定したサイズになって出力される、式で表せば、座標が
(SetViewportExt()で設定した値 ÷ SetWindowExt()で設定した値)倍
されるみたい。
と言う事は、次の様なコードでOKってことか。
pDC->SetMapMode(MM_ANISOTROPIC); pDC->SetWindowExt(CPageSetupDialogから取得した用紙の大きさ); pDC->SetViewportExt(CPrintDialogから取得した用紙の大きさ); DCに対して適当に描画
そう言えば、SetWindowOrg()
やSetViewportOrg()
なんてのもあったな。
これらも考慮にいれると、座標の変換は、こう↓なるのか。
(P - Wo)×Ve÷We + Vo P :描画する時に指定する座標 Wo:SetWindowOrg()で指定した座標 Vo:SetViewportOrg()で指定した座標 We:SetWindowExt()で指定したサイズ Ve:SetViewportExt()で指定したサイズ
今日の六冊 | |
西の善き魔女〈1〉セラフィールドの少女 (C・NOVELSファンタジア)
|
SetWindowExtとSetViewportExtがよく分からなかったのですが、ここの説明を読んだら分かりました。ありがとうございます。
by 通りすがりですが (2006-07-20 16:57)