- 締切済み
VC++APPウィザードの印刷指定
はじめまして VC++6.0で、SDIアプリケーションを作成しています。 アプリケーションウィザードで印刷と印刷プレビューをサポートするのチェックを外してプロジェクトを作成したのですが、後から印刷を行いたいとの要求が出てきました。 かなり作成の進んだプロジェクトなので、出来れば一からやり直しは避けたいのですが、 「印刷…」をチェックしたのと同等の変更を後から加える事は出来るでしょうか? 若しくは他のうまい方法はありますでしょうか? どなたかお知恵をお貸しください。
- みんなの回答 (2)
- 専門家の回答
みんなの回答
- FAY
- ベストアンサー率49% (95/193)
> メニューが無効になっている理由が判れば良いのですが…。 Viewクラスのメッセージマップの3行があればメニューは有効になるはずなので、 考えられるのは、印刷メニューのIDが ID_FILE_PRINT になっていないくらいですね。 どうしてもだめなら印刷メニューのIDでWM_COMMANDメッセージハンドラ作っちゃうしかないかな。 で、そのメッセージハンドラの中で基底クラスの OnFilePrint() 呼ぶとか。 あと、OnPreparePrinting() のオーバーライド直後の実装は return CView::OnPreparePrinting(pInfo); になってると思うんですが、これを return DoPreparePrinting(pInfo); 変えてあげないと思い通りにいきません。 割とはまりやすいところなので念のため。
- FAY
- ベストアンサー率49% (95/193)
SDIでDocument-Viewアーキテクチャをしているという前提で... Appクラスのメッセージマップに ON_COMMAND(ID_FILE_PRINT_SETUP, CWinApp::OnFilePrintSetup) を追加 Viewクラスのメッセージマップに下の3つを追加 ON_COMMAND(ID_FILE_PRINT, CView::OnFilePrint) ON_COMMAND(ID_FILE_PRINT_DIRECT, CView::OnFilePrint) ON_COMMAND(ID_FILE_PRINT_PREVIEW, CView::OnFilePrintPreview) さらに OnPreparePrinting() OnBeginPrinting() OnEndPrinting() をオーバーライド それで、印刷時にID_FILE_PRINTコマンド、印刷プレビュー時にID_FILE_PRINT_PREVIEWコマンドをメッセージで送ってやればOKかな。 (WM_COMMANDで明示的に送らなくてもメニューやボタンのIDに設定してやればOK)
お礼
ご回答ありがとうございます。 実はご回答いただいた内容のコードは生成されていました。 と言う事は、印刷を使用する設定でプロジェクトを作成していたのですね。 曖昧な質問で申し訳ありません。 実際の問題は、メニューの印刷と印刷プレビューがグレーになっていて、選択出来ない事なのです。 試しに新しく作成したプロジェクトでは、最初から印刷と印刷プレビューが選択できる状態なので、使用しない設定で作成したと思いこんでいました。 メニューが無効になっている理由が判れば良いのですが…。
お礼
引き続きのご教示ありがとうございます。 >どうしてもだめなら印刷メニューのIDでWM_COMMANDメッセージハンドラ作っちゃうしかないかな。 結局あきらめて、今はその様にしています。 プレビューがやっかいなので、プレビュー無しで進めています。