プリンタドライバの違い – プログラミング – Home

プリンタドライバの違い
 
通知
すべてクリア

[解決済] プリンタドライバの違い


Yan
 Yan
(@Yan)
ゲスト
結合: 15年前
投稿: 3
Topic starter  

初めて質問をします。宜しくお願いします。
環境 XP
Visual C++ 6.0
SDI
内容は印刷のプログラムで、A4横を
アプリケーションクラスで記述し、
ビュークラスで印字したところ、
キャノン・リコー・NECのプリンタでは
同じ、サイズで出力されるが、ゼロックス
のDocuCentre-II C2200シリーズで印字すると
拡大されて印字されます。
プリンタにより、指定変更等が必要なのですか?

/* APPで記述 */
 if(m_hDevMode == NULL) {
// m_hDevMode を設定
PRINTDLG printDlg;

GetPrinterDeviceDefaults(&printDlg);
m_hDevMode = printDlg.hDevMode;
}
if(m_hDevMode != NULL) {
LPDEVMODE lpDevMode = (LPDEVMODE)GlobalLock(m_hDevMode);
lpDevMode->dmOrientation = DMORIENT_LANDSCAPE;
lpDevMode->dmPaperSize = DMPAPER_A4;
GlobalUnlock(m_hDevMode);
GlobalFree(m_hDevMode);
}


引用未解決
トピックタグ
仲澤@失業者
(@uncle_kei)
Prominent Member
結合: 5年前
投稿: 828
 

たぶんプリンターの解像度[pixl/inch]が違うのではないでしょうか。
色々なやりかたがあると思いますが、自分の場合はプリンタHDCに対して

int Resolution_W = ::GetDeviceCaps( hdc, LOGPIXELSX);// 解像度 X [pix/inch]
int Resolution_H = ::GetDeviceCaps( hdc, LOGPIXELSY);// 解像度 Y [pix/inch]
double pix_p_mm_x = ( double)Resolution_W / ( double)25.4;
double pix_p_mm_y = ( double)Resolution_H / ( double)25.4;// 1inch = 25.4[mm]

のように[pixl/mm]を算定しておいて、描画時に換算しています。
んで、[mm]で描画するときはマップモードをMAP_MODE_ISOTROPICに
してます。
こうすることで、プリンタの解像度[pixl/inch]による差異を吸収しています。


返信引用
Yan
 Yan
(@Yan)
ゲスト
結合: 15年前
投稿: 3
Topic starter  

レス ありがとうございますm(__)m

昨日から、マップモードをISOTROPICに変更して
実行しいるのですが、サイズの変更ができません。
根本的間違っているのかもしれません。

のように[pixl/mm]を算定しておいて、描画時に換算しています。

というのは、換算してDraw時に再計算しているという事ですか?

int Resolution_W = ::GetDeviceCaps( hdc, LOGPIXELSX);// 解像度 X [pix/inch]
int Resolution_H = ::GetDeviceCaps( hdc, LOGPIXELSY);// 解像度 Y [pix/inch]

の値はプリンタが違っても96と同じなのです。

void CCKohjiInView::OnBeginPrinting(CDC* pDC, CPrintInfo* /*pInfo*/)
{
 int Resolution_W = ::GetDeviceCaps( *pDC, LOGPIXELSX);
 int Resolution_H = ::GetDeviceCaps( *pDC, LOGPIXELSY);
 if(
SetMapMode( *pDC,MM_ISOTROPIC );
のように記述しております。


返信引用
仲澤@失業者
(@uncle_kei)
Prominent Member
結合: 5年前
投稿: 828
 

>の値はプリンタが違っても96と同じなのです。

96ってのはモニターディスプレーの標準値なので、
そのHDCは画面用のHDCですね、先の発言の通り
「プリンターのHDC」に対してやってみてください。


返信引用
Yan
 Yan
(@Yan)
ゲスト
結合: 15年前
投稿: 3
Topic starter  

早急なレス誠にありがとうございます。
一生懸命ディスプレイの値を取っていたのですね(>_<)
あとは、描画時にpix_p_mm_xとpix_p_mm_yの比率を計算して
出力するという事ですね
誠にありがとうございます。m(__)m


返信引用

返信する

投稿者名

投稿者メールアドレス

タイトル *

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