CPrintDialogを使っての印刷がうまくいきません – プログラミング – Home

CPrintDialogを使っての印刷...
 
通知
すべてクリア

[解決済] CPrintDialogを使っての印刷がうまくいきません


もも
 もも
(@もも)
ゲスト
結合: 23年前
投稿: 36
Topic starter  

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
 RAPT
(@RAPT)
ゲスト
結合: 22年前
投稿: 310
 

# おそらく、ですが
> PrinterDC.Attach(printHDC);
としているのに、Detach() していないからでは?

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

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


返信引用
もも
 もも
(@もも)
ゲスト
結合: 23年前
投稿: 36
Topic starter  

RAPTさん、レスポンスありがとうございます。

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

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


返信引用

返信する

投稿者名

投稿者メールアドレス

タイトル *

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