SSブログ

ページ設定と印刷 [プログラミング]

MFCにCPageSetupDialogというダイアログがありました。
印刷するページを設定するためのダイアログのようで、紙の大きさや向き、余白の設定が出来ます。

ページ選択ダイアログ

印刷する紙のサイズは、CPrintDialogからも出来ますが(印刷ダイアログで[プロパティ]ボタンを押して、プリンタ独自の設定ダイアログで設定できる)、紙のサイズがCPageSetupDialogCPrintDialogで食い違ったらどうするんだろう………。

CPageSetupDialogで指定したサイズや向きを正として印刷イメージを作成し、それをCPrintDialogで指定したサイズに投影するのが、一般的な方法なんだろうか。

つまり、CPageSetupDialogで、用紙A4、余白1cmとし、CPrintDialogでA3を指定したら、A4で1cmの余白になる様にしたものをA3に拡大して印刷するから結果として余白は2cmになるんだろうか………。

多分なるんだろうな。

CPageSetupDialogでA4縦と指定して、CPrintDialogでA4横を指定したら、縦が潰れて横に伸びた風に印刷されるのかな。

※とりあえず試してみたけど、余白に関しては、なんとなくそれっぽい(文字は普通に出たけど)。

で、これを実現するには、
SetWindowExtSetViewportExtを使えば意外と簡単に実現できそうだけど、使い方がよく解らなかったのですよ。

そんな訳で、「暗号メモ帳」には印刷機能が実装されていません。
「折角暗号化して他人から見られない様にしているのに、印刷しちゃったら意味ないじゃーん」ということで…


仕様書書き(仕事)が飽きてきたので気分転換として色々と試して見た所、
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ファンタジア)

西の善き魔女〈1〉セラフィールドの少女 (C・NOVELSファンタジア)

  • 作者: 荻原 規子
  • 出版社/メーカー: 中央公論新社
  • 発売日: 1997/09
  • メディア: 単行本(ソフトカバー)

タグ:VisualC++
nice!(0)  コメント(1)  トラックバック(0) 

nice! 0

コメント 1

通りすがりですが

SetWindowExtとSetViewportExtがよく分からなかったのですが、ここの説明を読んだら分かりました。ありがとうございます。
by 通りすがりですが (2006-07-20 16:57) 

コメントを書く

お名前:
URL:
コメント:
画像認証:
下の画像に表示されている文字を入力してください。

トラックバック 0

この広告は前回の更新から一定期間経過したブログに表示されています。更新すると自動で解除されます。