プリンタドライバの違い

[戻る]
Yan 2010/05/11(火) 14:21:42
初めて質問をします。宜しくお願いします。
環境 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);
   }

仲澤@失業者 2010/05/11(火) 15:38:30
たぶんプリンターの解像度[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 2010/05/12(水) 11:46:49
レス ありがとうございます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 );
のように記述しております。

仲澤@失業者 2010/05/12(水) 12:00:46
>の値はプリンタが違っても96と同じなのです。

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

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

古いスレッドには追加発言できません。