初めまして。
開発環境はVC++.net 2003を使用しています。
VC初心者なのであまりにも基本的な質問かもしれませんが
よろしくお願い致します。
現在MDIプログラムを作成していますが、メインのビューは
CFormViewを継承し、コントロール類を配置しているため、印刷プレビュー
するためのビューをどうしたらよいのかで行き詰まっています。
何かいい方法等ございましたらご教授よろしくお願い致します。
> 何かいい方法等ございましたらご教授よろしくお願い致します。
対象Windowに対して WM_PRINT を SendMessage してやればダイアログの画面イメージが取れる。このイメージを印刷すれば良いかと。
ただ、WM_PRINT ではビジュアルスタイル等に対応したイメージが取得できないケースがあったハズ。
↑対応として、PrintWindow() というAPIを使用してやればビジュアルスタイル等に対応した画面イメージが取得できる。
が、このAPIは非表示Windowのイメージは取得不可なハズなので(MFC機構を使用しての)プレビュー中は使用不可(CFormView継承ビューが
非表示化される為)かもしれない。使いたいなら、多分(非表示化される前に)前以ってイメージを確保して億頭の必要がある。
CFormViewって単語からMFCと判断したけど合ってるよね?
後、↑で挙げたWM_PRINT、PrintWindow()の問題点が未だに残っているのかどうかは判らない。環境無いので試してない。
返答有難うございます。
>対象Windowに対して WM_PRINT を SendMessage してやればダイアログの画面イメージが取れる。このイメージを印刷すれば良いかと。
言葉足らずですみません。
画面イメージをハードプリントするのではなく、メインビューに入力したデータを
あるフォーマットでプリントしたいのです。
>CFormViewって単語からMFCと判断したけど合ってるよね?
そうです。できればMFCでどのようにすればいいのかをお聞きしたいです。
>MFC機構を使用しての)プレビュー中
このMFC機構を使用してのプレビューを行いたいのです。
メインビューをCFormViewにすると、印刷プレビューや印刷ができなくなってしまいます。
どうすれば、使えるようになるのでしょうか?
> このMFC機構を使用してのプレビューを行いたいのです。
CFormView継承クラス::OnPrint() をオーバーライドして好きなように描けば良い。
CFormView継承クラス::OnPrint(CDC* pDC, CPrintInfo* pInfo) {
pDC->TextOut(0, 0, _T("印刷"));
}
こんな感じに。
> メインビューをCFormViewにすると、印刷プレビューや印刷ができなくなってしまいます。
通常のCViewの印刷は OnPrint() 内で OnDraw() を呼んでるだけだったハズ。
ただ、CFormViewだと今回の様に印刷するデータが一意には決まらない。(rsaddさんは在るフォーマットでデータを印刷したかった
のだけど、画面のハードコピーを印刷したいのだと俺が勘違いしてしまった様に)
とう事等もあり CFormView は標準では印刷をサポートしていない。(OnPrint() 内で OnDraw() を呼ばないようにしていたハズ)
なので OnPrint() 内の処理を自力で実装してやる必要が有る。
後は通常の印刷処理。「印刷 MFC」とか「マッピングモード」等でググれば欲しい情報に辿り着けるかと。
SDIで、CFormViewを選択した場合に、印刷機能を付けるには
メッセージマップに次を追加
ON_COMMAND(ID_FILE_PRINT_DIRECT, CView::OnFilePrint)
ON_COMMAND(ID_FILE_PRINT_PREVIEW, CView::OnFilePrintPreview)
OnPreparePrintingをオーバーライドし、DoPreparePrintingを実行する
BOOL CTESTView::OnPreparePrinting(CPrintInfo* pInfo)
{
// デフォルトの印刷準備
return DoPreparePrinting(pInfo);
}
OnPrintをオーバーライドし、印刷内容を書込む
void CTESTView::OnPrint(CDC* pDC, CPrintInfo* pInfo)
{
pDC->TextOut(0, 0, _T("印刷テスト"));
}
メニュー項目ID_FILE_PRINT_PREVIEWを追加する
を行うという記述を見つけたので
MDIでもできるのかと思い、設定してみたのですが
メニューからCView::OnFilePrintPreviewを実行すると
ERROR: Cannot find dialog template with IDD 0x7803.
(DEBUGモードでコンパイル)
とエラーがでて、異常終了してしまいます。
SDIでは、問題なく印刷プレビューできます。
MDIでは、なにが足りないのでしょうか?
解決しました。
リソースファイルに
53行目 "#include ""afxprint.rc"" // 印刷/印刷プレビュー リソース\r\n"
420行目#include "afxprint.rc" // 印刷/印刷プレビュー リソース
を追加することでエラーが発生しなくなりました。
有難う御座いました。