none
VC++.NET 2003のMFC(CFormView)でスケルトン作成について教えてください。 RRS feed

  • 質問

  • 今日は!

     VC++6.0では、MFC(CFormView)の構成で、印刷機能がサポートされていましたが、VC++.NET 2003では、それがサポートされていません。

    Q1:VC++.NET 2003でサポートできる様にする方法はありますか?

    Q2:新しいヴァージョンで(2005以降のもの)はそれがサポートされていますか?

     

    お手数をお掛けしますが、宜しくお願いします。

     

    重松 宏昌

    2006年8月7日 9:19

すべての返信

  • とっちゃんです。

    MFC は、7.0(VS2002)から、CFormView での「ウィザードでの」印刷機能の追加が出来なくなりました。

    とはいえ、印刷が出来ないわけではありません。

    元から、CFormView は印刷のことなど考えていないクラスなので(画面をダイアログライクに作れるようにしたもののため)、そういう意味では正当な進化ともいえるのですが(VC6では、MSDNライブラリにそのあたりの問題点を言及していたくらいなので)。

    MFC の実質的な印刷処理のサポートは、CView と CWinApp が行なっています(これがまた、Friend なんでしゃれにならんわけですが...orz)。

    全くの新規なら、別途ダミーで CView の SDI アプリを用意して、そこから持ってくればいいでしょう。VC6時代に作っていたものの焼き直しなら、該当部分をコピーしてくればよいと思います。

    印刷サポートの有無で変わる部分がわからない場合は、同じプロジェクトを2個用意して(別々のフォルダにね)、それぞれの違いを見比べて違っている部分だけ持ってくれば実現可能です。

    あと、注意点としては、CFormView など画面表示と印刷処理とでは全くロジックが異なるものの場合は OnPrint で印刷処理を実装するということですかね(^^;

    2006年8月15日 3:29
  • ご回答有難うございます。

    下記の貴方のご回答のの如く、自分で印刷機能を追加すれば、可能なことは理解出来ます。又、VC++6.0で作成したしたソースを.netでコンパイルも出来るようです。

    もし、機械的に.netのFormViewで作成したスケルトンに印刷機能を追加する方法が無いかと探しています。

    この『ヒツコサ』がお気に触りましたら、御免なさい。

    私の、実力不足の為に、やはりFormViewに関しては、VC++6.0を使用するのが無難な様です。

    ーーー以下は、貴方のご回答の要点です。------------------------------------

    MFC の実質的な印刷処理のサポートは、CView と CWinApp が行なっています(これがまた、Friend なんでしゃれにならんわけですが...orz)。

    MFC の実質的な印刷処理のサポートは、CView と CWinApp が行なっています(これがまた、Friend なんでしゃれにならんわけですが...orz)。

     

     

    失礼しました。

     

     

    2006年8月16日 9:38
  •  shiggy17 さんからの引用

    もし、機械的に.netのFormViewで作成したスケルトンに印刷機能を追加する方法が無いかと探しています。

     

    多分無いと思いますよ。公式にCFormViewは印刷をサポートしないとしているわけですから
    機械的にどうにかできるようなレベルではないと思います。
    こういう部分に手をつけるのであれば、当然理解した上で手をつけないとメンテナンスも
    ままなら無い状況になりますからね。

    2006年8月17日 2:35
  • とっちゃんです。

    メニュー(およびツールバー)とそのハンドラを除けば後はClassViewからぽちぽち選ぶだけで追加できます。<印刷サポート

    ま、そのあたりは印刷処理に何が必要ということをわかっていないとダメなのかもしれませんけど(^^;

     

    2006年8月17日 3:16
  • 今日は!

    下記を追加する事により、OnFilePrintに制御が移り、印刷シーケンスが起動する様です 

    ON_COMMAND(ID_FILE_PRINT, CFormView::OnFilePrint)

    しかし、残念ながら、viewprnt.cppの中のDoPreparePrintingの中の下記のルーチンでエラーが発生する様です

     VERIFY(pInfo->m_strPageDesc.LoadString(AFX_IDS_PREVIEWPAGEDESC));

     

    重松

    2006年8月18日 22:19
  • とっちゃんです。

    該当部分のアサーションはリソースに文字列がないことが原因です。

    印刷サポートを行なう場合、リソース内に、印刷サポート用のリソースを組み込む必要があります。

    こちらも詳しくは、ダミースケルトンを吐き出して確認するとわかります。

    数行足すだけですけど...残念ながらこの部分は自動化は出来ません(^^;

     

    2006年8月21日 4:34