• ベストアンサー

画面を表示せずに印刷

VC++6.0 SDI プロジェクト名:PrintD プログラムの実行と同時に印刷を開始するプログラムを作成したいのですが、 画面も印刷ダイアログボックスも表示することなく印刷を行うことは可能なのでしょうか? どなたかご存知の方がいらっしゃいましたらご教授下さい。 質問を載せさせていただくこと自体が初めてなので質問の仕方がオカシイ場合はご指摘下さい。 よろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • nitscape
  • ベストアンサー率30% (275/909)
回答No.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へ書き出すだけですので。

madamadahiyoko
質問者

補足

nitscapeさんの方法で解決できました。 hyde19さんの方法は今後のために知っておいた方がいいと思ったので ただいま勉強中です。 お二人のおかげで解決&スキルアップすることができました。 丁寧な説明を本当にありがとうございました。

その他の回答 (1)

  • hyde19
  • ベストアンサー率29% (196/661)
回答No.1

可能です。 画面の表示に関するプログラムを作ってみても、通常そのまま画面にパーツを描画するのは、最初のうちだけです。 画面描画用のメモリを確保(関数を置く)して、そこにパーツを書き込んで行き、パーツが揃ったところで画面に表示させます。これを繰り返す方が、1つ1つ画面に表示させるより、プログラムの動作が速くなるからです。 ということは、メモリの中身を画面に表示する必要性はなく、そのまま印刷機へ出力すれば良い訳です。 モニタに出力するか、紙に出力するかの違いでしかありません。 連続印刷ユーティリティなどファイルを指定して印刷だけをするものもありますしね。

madamadahiyoko
質問者

補足

hyde19さん 回答ありがとうございます! こんなに早く回答をいただけるとは思ってませんでした。 本当に感謝しています。 画面描画用のメモリを確保? なんとなくイメージはわかるのですが具体的には???です・・・。 すいません、勉強不足で。 とりあえず画面描画用のメモリを確保というのを調べてみます。 それでもわからなかった場合は申し訳ないのですが また質問させてください。よろしくお願いします。

関連するQ&A

  • VC++でダイアログボックスを表示させるプログラム

    VC++のプログラミングで、実行できない原因が 判らないので、ヒントをいただけないでしょうか。 現在VC++の勉強中で、ダイアログボックスを 表示するプロジェクトを作成しています。 ビルドエラーは出ないのですが、実行しても 何も表示されません。 メニューを持った親ウインドウを表示し、 メニューから「加算」を選択すると 計算用のダイアログボックスが表示されるプログラムです。 ダイアログボックスは三個のテキストボックスと 二個のボタンがあり、数字を二箇所入れ ボタンを押すと計算結果を表示します。 長くなる為ソースは書けないのですが、 こういう場合まず何からチェックすればいいでしょうか? 初心者なのでちょっとしたことで間違えているかも しれません。どなたかアドバイス下さい。

  • アプリ起動時にダイアログも開くには?

    <環境> WIN98 VC++6.0 MFC SDIにて アプリ起動時に、SDIは非表示にしているおり、さらに同時にダイアログも非表示で開きたいのですが、ダイアログのコードはどこに書けばよいのでしょうか?

  • VC++APPウィザードの印刷指定

    はじめまして VC++6.0で、SDIアプリケーションを作成しています。 アプリケーションウィザードで印刷と印刷プレビューをサポートするのチェックを外してプロジェクトを作成したのですが、後から印刷を行いたいとの要求が出てきました。 かなり作成の進んだプロジェクトなので、出来れば一からやり直しは避けたいのですが、 「印刷…」をチェックしたのと同等の変更を後から加える事は出来るでしょうか? 若しくは他のうまい方法はありますでしょうか? どなたかお知恵をお貸しください。

  • SDKってなんですか?

     プログラミングを始めようと思いVC++6.0を手に入れましたが、何からはじめればよいのかわからずつまずいております。HPを色々見ていますが、とあるところでSDKプログラムという言葉が出てきました。SDIなら本に書いてありましたが違うものでしょうか。  あわせて、VC++6.0によるプログラムの勉強のしかたも教示いただければうれしいです。VC++を手に入れた動機は、 JW-CADのJWWファイルをまとめて(300枚ぐらい)印刷できないかなと思ったことでした。

  • エディットボックスの処理で画面がちらつきます。

    VC++ 6.0 Win32APIにてダイアログベースのプログラムを作成しております。 ダイアログに18個のエディットボックスを配置しておりますが、そのエディットボックスのテキストを SetDlgItemText()を使って全て空欄にすると(第3引数に””を指定)画面がちらつきます。 同ダイアログ内のリストコントロールがダブルクリックされた際のイベントを拾ってエディットボックスクリアの処理を実行しているのですが、ちらつきを抑える手法はありますでしょうか?

  • VC++6.0 ダイアログの追加について

    現在,VC++6.0でSDIのプログラムを開発しています. このプログラムのメニューからダイアログを表示させるプログラムを開発したのですが,別のプラグラマーが開発したダイアログベースのプログラムを組み込むことは可能でしようか? また,将来的にダイアログを2つ出してその間で数値のやり取りをさせたいのですが,可能でしょうか? もし可能でしたら教えてください.よろしくお願いします.

  • リアルタイム波形表示

    VC++ 6.0でプログラムを作成しています。 別の機器からUSBを通して送られてきたデータを配列に入れ、 新しいデータが入力されたら、線を追加して、リアルタイムに波形を表示したいと思います。 VC++ 6.0のダイアログベースでプログラムを作成していますが、 コントロールボックスをクリックすると、別のウィンドウが開き、 そこに波形を表示しようと思います。 ダイアログベースで、新しいウィンドウを発生させる方法をご存知でしたら、 ご教授願えると幸いです。 以上、宜しくお願いします。

  • Visual C++ で画像表示

     非常に初心者な質問で申し訳ないのですが、Visual C++.NETで画像を表示させるプログラムの作成の仕方がわかりません。  作っているプログラムはダイアログベースで、ダイアログの中にイメージボックスとコマンドボタンが貼り付けてあります。実行した際にコマンドボタンを押すと、ある画像がイメージボックスに表示されるようにしたいのです。  ライブラリや本をいろいろ調べたのですが、具体的なやり方まで示してくれる本は残念ながら出会えませんでした。  どなたか教えてください。よろしくお願いします。

  • Sub Main が実行されない

    Visual Basic 6.0 について質問があります。 以前、Windows 2000上でVBのプログラムを作っていました。 (1)プロジェクトの種類を「Active X DLL」にしています。   ・・外部プログラムで呼び出すDLLを作るためです。 (2)デバッグのために、[スタートアップの設定] を 「Sub Main」に設定していました。   ・・[プロジェクト プロパティ]ダイアログボックスで     [全般]タブの [スタートアップの設定] を 「Sub Main」にしています。 (3)[実行]-[開始]とすると、Sub Main に書いたコードが実行されました。 (4)★ところが、最近 Windows XP マシンにこのプログラムのソースを移しました。   その結果、Sub Main に書いたコードが実行されなくなりました。 何が原因なのでしょうか?

  • 起動時に何のダイアログも表示されない

    こんにちは。 大変恐縮ですがこちらで質問させてください。 開発環境はVC2005のMFCです。 質問内容は題名の通りなのですが、デバッグを実行しても何のダイアログが表示されない という状態になってしまいました。 すぐにデバッグが終了してしまいます。(「デバッグなしで開始」でも同様です。) プロジェクトはダイアログベース、スタティックライブラリ、ソケットを使える設定で 作成しました。 プロジェクトを作成してから他ダイアログを作り全てのダイアログに新しくボタンを配置したのと、初期配置のOK,キャンセルボタンを削除した以外は、コード上に手を加えるなどはしていません。 また、以下のようなエラーコードが出力されました。 Dumping objects -> f:\dd\vctools\vc7libs\ship\atlmfc\src\mfc\occmgr.cpp(195) : {75} normal block at 0x003496B8, 488 bytes long. Data: < > E8 03 00 00 00 00 00 00 E9 03 00 00 00 00 00 00 {74} normal block at 0x00349580, 248 bytes long. Data: < > FF FF FF FF 00 00 00 00 00 00 00 00 00 00 00 00 Object dump complete. プログラム '[1528] test.exe: ネイティブ' はコード 0 (0x0) で終了しました。 何か原因と対策等がわかりましたら回答をいただければと思います。 よろしくお願いします。