印刷用のOnDrawについて – プログラミング – Home

通知
すべてクリア

[解決済] 印刷用のOnDrawについて


Fortran使い
 Fortran使い
(@Fortran使い)
ゲスト
結合: 19年前
投稿: 45
Topic starter  

お世話になっております。
VC++でMDIアプリで印刷をしようと思うのですが、子ウィンドに書き出したグラフを印刷
プレビューで見ると左端に小さく表示されてしい使用に耐えられるものではありませ
ん。過去スレにもネット上にもそこそこ情報はあるようですがいまいち釈然としませ
ん。

GetDiviceCapsで印刷可能領域の情報を取得できることと結局はOnDrawが呼び出されてい
るということは理解できました。

OnDraw内で画面表示用とプリント用でスケールを振り分ければよさそうですが、OnDraw
が画面表示のために呼ばれたのかプリントのために呼ばれたのかを判別することはでき
るのでしょうか?

また、他に方法がございましたらアドバイスください。
よろしくお願いします。


引用未解決
トピックタグ
Fortran使い
 Fortran使い
(@Fortran使い)
ゲスト
結合: 19年前
投稿: 45
Topic starter  

OnPrintをオーバーライドするのが普通なんですかね。


返信引用
maura
 maura
(@maura)
ゲスト
結合: 19年前
投稿: 2
 

ヒント:CPaintDC


返信引用
maura
 maura
(@maura)
ゲスト
結合: 19年前
投稿: 2
 

あかん。まちごうた
ヒント:CPrinterDC


返信引用
たいちう
 たいちう
(@たいちう)
ゲスト
結合: 23年前
投稿: 662
 

こんな感じで、どうかな。

void CHogeView::OnDraw(CDC* pDC)
{
// サイズの設定
if (pDC->IsPrinting()) {

} else {

}

// 表示

}


返信引用
dairygoods
 dairygoods
(@dairygoods)
ゲスト
結合: 23年前
投稿: 1421
 

CView::OnPreparePrinting() というのもあります。


返信引用
たいちう
 たいちう
(@たいちう)
ゲスト
結合: 23年前
投稿: 662
 

印刷で使う領域を

void CHogeView::OnPrint(CDC* pDC, CPrintInfo* pInfo) {
if (pInfo)
m_rectPrint = pInfo->m_rectDraw;
...
}

このように、Viewのメンバ変数に入れ、

void CHogeView::OnDraw(CDC* pDC) {
// サイズの設定
if (pDC->IsPrinting()) {
// ここで、m_rectPrintを使う
} else
...

...
}

という方法で調整したのですが、より良い方法がありましたら、
私も是非お教えいただきたいです。

# 古いソースを引っ張り出してきたんで、勘違いあったら勘弁。


返信引用
PATIO
(@patio)
Famed Member
結合: 3年前
投稿: 2660
 

MFCを使った時の印刷時の処理の流れをきちんと確認された方がいいと思います。
HELP(MSDN)にもきちんと書いてありますよ。
dairygoodsさんが触れられているCView::OnPreparePrinting()も流れの中の一つになります。
MFCを使っているのであれば、MFCの印刷のフレームワークをうまく利用するのが賢いかと
思います。
あと、OnPrintが内部でOnDrawを呼んでいるのはあくまでもデフォルト実装なので
印刷時に処理を分けたい場合には独自の描画処理をOnPrint内に起こすという方法もあり
ます。
また、OnDraw内で呼んでいる描画処理を独立した関数にしてしまい、
OnDrawからもOnPrintからも呼び出すという形にする方法もあります。
この辺はアイディア次第という気もします。


返信引用
Fortran使い
 Fortran使い
(@Fortran使い)
ゲスト
結合: 19年前
投稿: 45
Topic starter  

皆さん、有難うございました。
IsPrinting()による判別でうまくいきました。

PATIOさんの意見もごもっともだと思いますが、私はまだMFCの便利さを実感する前に
MFCに振り回されている段階です。一応ドキュメント類には目を通しているのですが
なかなか身につきません。

便利メンバ関数を探しそれを所持しているクラスを探し、インスタンスのポインタ
をどうやって取得していいのか苦労している段階です。(本末転倒ですが)

MFCの理解も深まるようがんばりたいと思います。


返信引用

返信する

投稿者名

投稿者メールアドレス

タイトル *

プレビュー 0リビジョン 保存しました
共有:
タイトルとURLをコピーしました