印字をする

VC++ の StartDoc(), StartPage() でプリンタに印字します。

前田稔(Maeda Minoru)の超初心者のプログラム入門

プロジェクトの設定

  1. 新規プロジェクトを作成して、メニューを設定して下さい。
    キャプションID
    ファイル(&F) 親メニュー
    終了(&X) IDM_END
    印刷(&P) IDM_PRINT
  2. デフォルトのプリンタ情報を取得する構造体の定義です。
        PRINTER_INFO_5  prninfo[3];
        
  3. CALLBACK 関数です。
    メニューから IDM_PRINT: が選択されたときに MyPrint() で印字します。
            case IDM_PRINT:
                MyPrint();
                break;
        
  4. プリンタに TEXT を印字する関数です。
    docinfo を初期化して、GetPrintInfo() でプリンタの HDC を取得します。
    取得した Printer Name を MessageBox() で表示してみました。
    StartDoc(); StartPage(); に続いて、画面に表示するときと同じように TextOut() でプリントします。
    EndPage(); EndDoc(); で印字を終了して、DeleteDC(); で HDC を開放して下さい。
        int MyPrint(void)
        {   HDC     hdc;
            DOCINFO docinfo;
    
            memset(&docinfo, 0, sizeof(DOCINFO));
            docinfo.cbSize = sizeof(DOCINFO);
            docinfo.lpszDocName = "testprint";
            hdc = GetPrintInfo();
        MessageBox(NULL,prninfo[0].pPrinterName,"Printer Name",MB_OK);
    
            StartDoc(hdc, &docinfo);
            StartPage(hdc);
            TextOut(hdc, 20, 20, "これは、テスト印刷です", 22);
    
            EndPage(hdc);
            EndDoc(hdc);
            DeleteDC(hdc);
            return 0;
        }
        
  5. デフォルトのプリンタ情報を取得する関数です。
    EnumPrinters() で PRINTER_ENUM_DEFAULT を指定して、デフォルトのプリンタ情報を取得します。
    dwNeeded には、この関数が成功したときに prninfo の必要なバイト数が格納されます。
    dwReturned には、関数が成功したときの構造体の個数が格納されます。
    CreateDC() で Printer Name をパラメータとして HDC を取得します。
        HDC GetPrintInfo(void)
        {   DWORD   dwNeeded,dwReturned;
            if (EnumPrinters(PRINTER_ENUM_DEFAULT,NULL,5,(LPBYTE)&prninfo,
                sizeof(prninfo),&dwNeeded,&dwReturned))
            {   return CreateDC(NULL,prninfo[0].pPrinterName,NULL,NULL); }
            return 0;
        }
        

【演習】

  1. プログラムを完成させて下さい。
  2. TextOut() の座標を変えて試して下さい。
  3. StartPage(hdc); EndPage(hdc); で2ページ目も印字してみて下さい。

超初心者の方のために全ソースコードを掲載します。 (^_^;)
全ソースコード

超初心者のプログラム入門(Win32API C++)