VC++6.0の印刷プレビュー

[戻る]
ぶいしー 2008/07/18(金) 09:11:44
以下の手順を行うと、印刷プレビューの拡大でASSERTするのですが、
誰かわかる方、回避方法等を教えていただけませんか?

(1)VC++6.0で、MFC AppWizard(exe)で全てデフォルトで作成する。
(2)そのままコンパイル・実行する。
(3)画面を最大化する。
(4)[ファイル]-[プリンタの設定]で、印刷の向きを[横]にする。
(5)[ファイル]-[印刷プレビュー]で、プレビュー画面(白紙ですが)を表示させる。
(6)[拡大]ボタンで、拡大をしていくと、以下の部分でASSERTしてしまう。
void CScrollView::ScrollToDevicePosition(POINT ptDev)
{
    ASSERT(ptDev.x >= 0);
    ASSERT(ptDev.y >= 0);  ← ここでASSERTする
....
どうも、ptDev.yに負の値が入っているからのよう。

上記で、画面を最大化しないとこの現象は発生しないようです。
また、MDIでもSDIでも発生してしまう。
環境的には、以下のとおりです。
・VC++6.0 SP6
・WindowsXP Professional SP2

すいませんが、よろしくお願いします。

たいちう 2008/07/18(金) 09:38:05
再現しませんでした。取り急ぎ報告だけ。
・VC++6.0 SP6
・WindowsXP Professional SP3

ぶいしー 2008/07/18(金) 09:47:01
もしかしたら、環境に影響されているのかもしれないと思い、
以下のようなテストをしたらある状況で発生するようです。

(1)発生する場合:
・解像度:1280×1024
・用紙サイズ:A4

(2)以下の場合は発生しなかった
・解像度:1280×1024
・用紙サイズ:A3

(3)以下の場合は発生しなかった
・解像度:1024×768
・用紙サイズ:A4

何か、解像度と用紙サイズの関係で条件があるようなのですが、、。

たいちう 2008/07/18(金) 10:33:02
デフォルトプリンタは信頼できるものですか?

ぶいしー 2008/07/18(金) 10:40:51
デフォルトプリンタはRICOH製ですが、通常のページプリンタです。
また、プリンタをPDFにしても同様な現象が発生します。

なにか、環境的なものなんでしょうか?

ITO 2008/07/18(金) 13:10:32
ScrollToDevicePositionの説明に
 > ビューは、指定した位置がウィンドウの左上隅になるようにスクロールされます。
 > このメンバ関数は、ビューが伸縮モードのときは呼び出さないでください。
とあります。
印刷時、ビューが伸縮モードののときに「ScrollToDevicePosition」
を使っていませんか?

ぶいしー 2008/07/18(金) 15:46:10
MFCのウィザードで作成したのみで、ソースに一切修正を加えてない状態です。

ScrollToDevicePositionは、MFCのなかから、コールしている部分なので、
ビューが伸縮モードかどうかが不明です。

ビューが伸縮モードかどうかを調べる方法がよく分からないので、
もし、知っていたら教えてください。

ITO 2008/07/18(金) 18:54:03
僕もCScrollViewの印刷はあまりやったことないんで、
 CScrollViewのサンプルSCRIBBLEを参考にするといいです。

http://msdn.microsoft.com/ja-jp/library/f35t8fts.aspx

古いスレッドには追加発言できません。