none
印刷プレビューを強制的に終了させる方法 RRS feed

  • 質問

  • CMFCRibbonBarをつかったMDIアプリケーションを開発しています。

    例えばAというViewとBというViewがあったとして、Aで印刷プレビューを実行したとします。

    そうした時にBのViewに切り替えることが出来てしまうのですが、あまりよろしくないので、Viewを切り替えた場合には印刷プレビューを終了したいと考えています。

    Viewを切り替えたタイミング、ということで、OnActivateViewでAfxGetMainWnd()→SendMessage(WM_COMMAND, AFX_ID_PREVIEW_CLOSE)を呼んでいるのですが、一向に印刷プレビューを終了させることができません。

    ちなみに、印刷プレビューをしているViewが非アクティブになる場合は通知されないのですが、これはCPreviewViewになっているからでしょうか?

    CPreviewViewが非アクティブになるところでAfxGetMainWnd()→SendMessage(WM_COMMAND, AFX_ID_PREVIEW_CLOSE)を呼べばいいのかとも思ったのですが、やり方がわかりません

    何か良い方法をご存知でしたらご教授いただければ幸いです。

    よろしくお願いいたします。

    2012年1月31日 3:32

回答

  • プレビュークローズを送る先をトップレベルのフレームウィンドウに送っても処理されないのであれば、プレビューを行っているウィンドウのフレームウィンドウのアクティブなビューに送る必要があると思います。

    手元に実験できるコードがないので、それだけで問題ないのかはわかりませんが。

    また、MDIがWindows のMDIのしくみで動いているのであれば、CChildFrame にMDIのアクティブが切り替わった時の通知(WM_MDIACTIVATEなど)が来ると思います。

    このタイミングでAFX_ID_PREVIEW_CLOSE を自分のアクティブなビューに通知する(無条件に実行してもたぶん問題ないと思われる)か、m_lpfnCloseProc が NULL ではなければ、WM_CLOSE を自分自身に送ることでプレビューが終了すると思います(m_lpfnCloseProc がNULLの時に呼び出すと自分自身が閉じてしまうので注意)。

     


    わんくま同盟,Microsoft MVP for Visual C++(Oct 2005-) http://blogs.wankuma.com/tocchann/
    • 回答としてマーク ZAOZAO 2012年1月31日 10:02
    2012年1月31日 7:34

すべての返信

  • プレビュークローズを送る先をトップレベルのフレームウィンドウに送っても処理されないのであれば、プレビューを行っているウィンドウのフレームウィンドウのアクティブなビューに送る必要があると思います。

    手元に実験できるコードがないので、それだけで問題ないのかはわかりませんが。

    また、MDIがWindows のMDIのしくみで動いているのであれば、CChildFrame にMDIのアクティブが切り替わった時の通知(WM_MDIACTIVATEなど)が来ると思います。

    このタイミングでAFX_ID_PREVIEW_CLOSE を自分のアクティブなビューに通知する(無条件に実行してもたぶん問題ないと思われる)か、m_lpfnCloseProc が NULL ではなければ、WM_CLOSE を自分自身に送ることでプレビューが終了すると思います(m_lpfnCloseProc がNULLの時に呼び出すと自分自身が閉じてしまうので注意)。

     


    わんくま同盟,Microsoft MVP for Visual C++(Oct 2005-) http://blogs.wankuma.com/tocchann/
    • 回答としてマーク ZAOZAO 2012年1月31日 10:02
    2012年1月31日 7:34
  • とっちゃん様

     

    早々にありがとうございます!!!

    おかげさまで、無事印刷プレビューを終了させることができました。

    助かりました。

    2012年1月31日 10:02