CPrintDialogを使っての印刷がうまくいきません

[戻る]
もも 2006/03/06(月) 05:05:12
MFCでCPrintDialogを使ってボタンを押したら印刷すると
いうようなプログラムを作ろうとしています。
今のプログラムではエラーも出ず実行でき、印刷もされるのですが、
そのときに
「問題が発生したため、TODO: <ファイルの説明> を終了します。 ご不便をおかけして
申し訳ありません。」
というエラー報告を送信する/しないのメッセージダイアログが出て、
その後プログラムが強制終了してしまいます。

今以下のようなプログラムを記述しています。

void CPrt::OnBnClickedButton1()
{
  CDC PrinterDC;
  HDC printHDC;

  //印刷開始ダイアログ表示
  CPrintDialog dlg(FALSE);            
  if(dlg.DoModal()==IDOK){
      //印刷用HDCを得る
      printHDC = dlg.GetPrinterDC();        

      //印刷用HDCからCDCへ変換
      PrinterDC.Attach(printHDC);            

      DOCINFO    docinfo;
      //DOCINFOを用意
      docinfo.cbSize  = sizeof(docinfo);    
      docinfo.lpszDocName = NULL;
    docinfo.lpszOutput = NULL;
    docinfo.lpszDatatype = NULL;
    docinfo.fwType = 0;
        
    //印刷開始
    PrinterDC.StartDoc(&docinfo);            
    PrinterDC.StartPage();                    

    //印刷内容
    PrinterDC.TextOut(100, 100, "テスト印刷");    

    //印刷終了
    PrinterDC.EndPage();
    PrinterDC.EndDoc();                        

    //HDC開放
    ::DeleteDC(printHDC);                    
  }
}

どうすれば上手くプログラムが動くでしょうか?
またこれ以外で手を加えなければいけない箇所があれば教えてください。

よろしくお願いします。

RAPT 2006/03/06(月) 09:26:50
# おそらく、ですが
> PrinterDC.Attach(printHDC);
としているのに、Detach() していないからでは?

先に、::DeleteDC(printHDC); していて、
Detach()されていないので、PrinterDC のデストラクタで
DeleteDC()とかしようとして落ちていると憶測。

対処としては、PrinterDC.Detach();
してから、::DeleteDC(printHDC); する。

もも 2006/03/07(火) 14:12:30
[[解決]]
RAPTさん、レスポンスありがとうございます。

アドバイスして頂いた通りに対処いたしましたら
無事プログラムが強制終了することなく印刷をすることができました。

どうもありがとうございました!お世話になりました。

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