Last Updated 2002/09/09
Programming Tips Visual C++ MFC 印刷  索 引 
用紙サイズの変更
2002/09/09

デフォルトのプリンタ設定を変更したい.
以下のようなコードでは用紙方向は変更されても用紙サイズだけ変更されない.

HANDLE hPrn;
PRINTER_INFO_2* pPrnInfo;
DWORD n;
unsigned char* buff;

if( OpenPrinter("EPSON LP-1600", &hPrn, NULL) ) {
    GetPrinter(hPrn, 2, NULL, 0, &n);
    buff = new unsigned char[n];
    if( GetPrinter(hPrn, 2, buff, n, &n) ) {
        pPrnInfo = (PRINTER_INFO_2*)buff;
        pPrnInfo->pDevMode->dmOrientation = DMORIENT_LANDSCAPE;
        pPrnInfo->pDevMode->dmPaperSize = DMPAPER_B5;
        SetPrinter(hPrn, 2, buff, 0);
    }
    delete[] buff;
    ClosePrinter(hPrn);
}
変更されないのはプリンタのプロパティーシートの該当項目に反映されていないのである.
プログラム実行後にメモ帳のページ設定を見ると反映されている.

これを解消するには,SetPrinter() の前で DocumentProperties() を呼び出す.



参考情報

DEVMODE.dmFields

dmFields フラグ初期化済みのメンバを示すフラグである.
ユーザが特定のメンバを変更した場合は該当ビットを設定しなければならない.


参照
プリンタの設定
用紙サイズ変更後 用紙サイズ取得
dmFields(VC++ Ver1.5でプリンタの設定)
給紙方法の設定
前後のTips
用紙サイズの変更

DSS ProgrammingTipsCGI Ver2.02