1

紹介と関連情報:

古いアプリケーションを保守しており、データベースから計算されたデータに基づいてレポートを生成する機能を実装する必要があります。ユーザーには、ファイルを印刷する追加オプションも必要です (ユーザーはプリンターを選択でき、印刷プレビューを表示できる必要があります)。

満足のいく答えが得られる可能性を高めるために、小さな「例」で問題をさらに明確にすることができます。

  • ユーザーがボタンを押す -> アプリケーションがデータを計算します。// 終わり

  • アプリケーションはファイルを作成し、結果を入力します。// 終わり

  • ユーザーは、レポートが生成されたことを通知されます。// 終わり

  • ユーザーが別のボタンを押すと、印刷料金が発生します。// ここで立ち往生!

  • 印刷プレビューがポップアップし、印刷ダイアログを実行するオプションが表示されます。 // ここで立ち往生

  • ユーザーが印刷ダイアログを開始し、プリンターを選択すると、アプリケーションがファイルを印刷します。

C++アプリケーションはraw WinAPI( no ) を使用してコーディングされていMFCます。私はWindows XPで作業しています。

問題:

OLE オートメーションを使用してWordおよびExcelレポートを生成/保存できましたが、Word が作成する印刷プレビューと完全に一致する印刷プレビューを作成できません。

OLE オートメーションを使用してExcel の印刷ダイアログ/印刷プレビューを表示すると、次の問題が発生する可能性があります。

ユーザーは、[印刷プレビューを閉じる] をクリックするか、印刷プロパティ シート(下の図を参照) を閉じて、ドキュメントのデータを危険にさらす可能性のあるドキュメントに戻ることができます

ここに画像の説明を入力

私の雇用主はこれを好まず (彼らにはソフトウェア エンジニアリングや開発のバックグラウンドがないため、私が何を言おうとも「風のこだま」になってしまいます...)、彼らは私の印刷プレビューが印刷プレビューと正確に一致することを望んでいます。ワードが生成します。

したがって、 Word が作成する印刷プレビューと正確に一致する方法で、ユーザーの印刷プレビューを生成するためのソリューションが必要です。さらに、ユーザーはこれがどのように見えるかしか見ることができず、アプリケーションからファイルを開くことはできません。ユーザーは、ファイルを印刷するプリンターを選択できる必要があります。

写真のような実装で問題ありません。

質問:

導入ノート:

質問が広すぎて 1 回の投稿で回答できないため、アドバイス / 一般的な概念 / 正しい方向を示すことだけを求めなければなりません。

実際の質問:

OLE オートメーションExcel / Wordファイルを使用して最善を尽くしましたが、ご覧のとおり、印刷プレビューの生成に問題があるため、次の質問があります。

  1. この種のタスクに取り組むのはこれが初めてなので、それを処理する適切な方法を教えてもらえますか (もちろん、一般的な概念)。

  2. 印刷の問題 (WM_PRINTCLIENTメッセージをWord / Excelに送信するなど) の回避策がある可能性はありますか?

備考 :

繰り返しになりますが、質問が広すぎることに気付いたので、一般的な概念/指針を教えてください。途中で行き詰まった場合は、別の質問を投稿できます。

Word / ExcelOLE Automationを使用する必要はありません。現時点では、それが私の選択でした。

より良い解決策をお勧めできる場合は、喜んで受け入れます。ライブラリを使用したくありません。

追加情報が必要な場合は、お尋ねください。投稿を編集します。

4

1 に答える 1

1

ユーザーが印刷ボタンをクリックしたときにダイアログ ボックスを表示する必要があります。ダイアログ ボックスには、既定のプリンターのプレビューを表示するコントロールと、別のプリンターを選択し、印刷して終了するための 3 つのボタンが含まれます。

プレビュー コントロールは、ハンドラーがプレビューを描画する静的コントロールにすることができますWM_PAINT(代替手段: HTML テキストが供給される Web ブラウザー コントロールまたは RTF テキストが供給される RichText コントロールですが、これらのコントロールの機能によって制約されます)。

引用: 印刷プレビューは特別なものではありません。これは単に、プリンター DC にレンダリングするものを画面 (またはビットマップ) にレンダリングする必要があることを意味します。これは主に、ページ サイズを使用し、前/次のページの UI コントロールを提供することを意味します。

This SO Answerでは、プレビューをペイントするために必要な作業について詳しく説明しています。

この CodeProject 記事には、印刷プレビュー用の簡単なコードが含まれています。これは単純な MFC であり、単純な C++/WinAPI に変換するのはそれほど難しくありません。

于 2014-06-02T08:32:00.087 に答える