none
[VS2019][MFC] 印刷ダイアログを表示せず 2つのプリンターで印刷 RRS feed

  • 質問

  • VS2019、MFC環境で帳票アプリを開発しています。
    毎日大量の伝票とレポートを印刷する操作が必要で、そのUXを改善するためダイアログ上のボタンを押すと

     ボタン1...アプリケーションを実行中のPCにUSB接続されているドットプリンタに伝票印刷
     ボタン2...LAN上に接続されているレーザープリンタにレポート印刷

    というのを「印刷ダイアログを表示せず」に(つまり1クリックで)行うようにしたいのですが、うまくいきません。

    1つのプリンタだけなら、既定のプリンタに設定して
    CPrintDialog dlg(FALSE);
    dlg.GetDefaults();
    とすれば印刷ダイアログを表示せずプリントできるのは実現できています。

    問題は既定ではないプリンタへ印刷ダイアログを表示させずに印刷する方法です。

    いろいろ調べましたが、一度 Do.Modal() で指定させた m_pd.hDevMode を何らかの形で保存したものを用意し上と同様にCPrintDialogを作成したあとに保存したDEVMODEを書き戻してやればうまくいくのでは?
    と思い色々やってみたのですが、なかなかうまくいきません。どうやら書き戻すときにうまくいかず、エラーになってしまうようです。
    どなたか設定できる方法をご存じではないでしょうか?

    ものすごく初歩的なところで躓いている気がしますが、ご教授お願いいたします。


    2020年3月2日 6:33

回答

すべての返信

  • CPrintDialog呼ばずに、直接CDC::CreateDCとかでPrinterDCを作ればいいような気がしますが。

    jzkey

    • 回答としてマーク こし 2020年3月3日 1:40
    2020年3月2日 9:49
  • jzkeyさん

    早急な回答ありがとうございます。
    おっしゃる通り、CreateDCでデバイスコンテキストを作ったらあっさりできました。

    なぜCPrintDialogを使うことに拘ったのか、自分でも疑問なのですが、
    CreateDCをすっかり忘れていました。

    ありがとうございました!

    2020年3月3日 1:40