VC++6.0のMFC、基本ViewをScrollViewでテキストファイルを読み込んで表示するというプログラムを作ったのですが、MFCで最初からついてる印刷をするとすっごく縮小されて印刷されてしまうのですが、画面への表示と同じように印刷するにはどうしたらよいですか?
OSはXPです。
私の場合次のようにしました。
プリンターデバイスとデスプレイデバイス固有の情報
(X方向、Y方向の論理インチ当たりのピクセル数)を取得し、
デスプレイのピクセル数を1として、プリンターのピクセル数の
倍率を求め、プリンターの印刷の時その倍率を考慮しました。
具体的に言いますと、
CViewの派生クラスで、OnDraw関数を作り、その中でGetDiviceCapsを
使って、プリンター出力か否かの判定や、それぞれのピクセル数取得を行います。
文字の位置については、デスプレイに対するプリンターのピクセル数の倍率
を考慮します。
文字のサイズもCreateFont等でGetDiviceCapsを使えば旨くできます。
つまり
文字の高さ h = MulDiv(pDC->GetDeviceCaps(LOGPIXELSY),文字のpoint数,72);
FontL.CreateFont(-h,0,0,0,FW_NORMAL,0,0,0,
SHIFTJIS_CHARSET,OUT_CHARACTER_PRECIS,CLIP_CHARACTER_PRECIS,
DRAFT_QUALITY, DEFAULT_PITCH | FF_MODERN, fontF);
とします。
関数や設定により、もっと簡単な方法があるかもしれません。
フォントの大きさをピクセルで管理しないでポイントを使うという手もあります。
一般的に言う10ポイント文字というやつです。
CFontクラスには、CreatePointFontという関数やCreatePointFontIndirectという関数があります。
これらの関数は描画対象のCDCのポインタを引き渡す事でポイント数から
描画対象上でそのポイントのサイズにするには何ピクセルにすればよいかを
計算してフォントを作成してくれます。
描画時に改行処理を自分でやっている場合は文字の高さを取得してそれを改行幅に
使えば問題は解決するのではないでしょうか。
ツイート | ![]() |