- ベストアンサー
画面を表示せずに印刷
VC++6.0 SDI プロジェクト名:PrintD プログラムの実行と同時に印刷を開始するプログラムを作成したいのですが、 画面も印刷ダイアログボックスも表示することなく印刷を行うことは可能なのでしょうか? どなたかご存知の方がいらっしゃいましたらご教授下さい。 質問を載せさせていただくこと自体が初めてなので質問の仕方がオカシイ場合はご指摘下さい。 よろしくお願いします。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
>画面も印刷ダイアログボックスも表示することなく印刷を行うことは可能なのでしょうか? 可能です。実現方法としてはダメな例ですが...MFCアプリケーションのSDIでしたら BOOL CPrintDView::OnPreparePrinting(CPrintInfo* pInfo) { // デフォルトの CEditView の印刷準備 pInfo->m_bDirect = TRUE;■追加 return CEditView::OnPreparePrinting(pInfo); } BOOL CPrintDApp::InitInstance() { ...省略 m_pMainWnd->ShowWindow(SW_HIDE);■括弧内修正 m_pMainWnd->UpdateWindow(); m_pMainWnd->SendMessage(WM_COMMAND,ID_FILE_PRINT);■追加 ...省略 } というようにたったの2行追加と1行修正で実現できます(ただ一瞬画面表示があったりプログラムが終了できなかったりと問題はありますが)。 何を印刷したいかにもよりますが、この手のことをするときはMFCよりもSDKかATLでベタに書いてしまった方が楽です(と言ってもMFCでもSDKでもやることは同じですが)。プリントアウトは画面への描画と同じでDCへ書き出すだけですので。
その他の回答 (1)
- hyde19
- ベストアンサー率29% (196/661)
可能です。 画面の表示に関するプログラムを作ってみても、通常そのまま画面にパーツを描画するのは、最初のうちだけです。 画面描画用のメモリを確保(関数を置く)して、そこにパーツを書き込んで行き、パーツが揃ったところで画面に表示させます。これを繰り返す方が、1つ1つ画面に表示させるより、プログラムの動作が速くなるからです。 ということは、メモリの中身を画面に表示する必要性はなく、そのまま印刷機へ出力すれば良い訳です。 モニタに出力するか、紙に出力するかの違いでしかありません。 連続印刷ユーティリティなどファイルを指定して印刷だけをするものもありますしね。
補足
hyde19さん 回答ありがとうございます! こんなに早く回答をいただけるとは思ってませんでした。 本当に感謝しています。 画面描画用のメモリを確保? なんとなくイメージはわかるのですが具体的には???です・・・。 すいません、勉強不足で。 とりあえず画面描画用のメモリを確保というのを調べてみます。 それでもわからなかった場合は申し訳ないのですが また質問させてください。よろしくお願いします。
補足
nitscapeさんの方法で解決できました。 hyde19さんの方法は今後のために知っておいた方がいいと思ったので ただいま勉強中です。 お二人のおかげで解決&スキルアップすることができました。 丁寧な説明を本当にありがとうございました。