• ベストアンサー

ダイアログのスクロールバー

VC++6.0 MFC お世話になります。 メニューからモードレスダイアログを発生させてそこに文字列を書き出しているのですが、文字列が多い場合、入りきれません。そこでダイアログリソースに標準スクロールバーを付加させました。しかし、ソースが煩雑になっていきます。 調べてみれば、ウィンドウでは基本クラスをCScrollViewにすることにより、スクロールバーのメッセージ処理コードのを大半を肩代わりしてくれることを知りました。 そこで、ダイアログでもこのように便利なことはできないかと質問をした次第です。 できるのであれば、方針などを教えてください。 よろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • guccii
  • ベストアンサー率31% (14/44)
回答No.1

CScrollViewは、Document-View構造を前提としていますから、ダイアログにそのままでは適用できませんが、CWndを継承したクラスにCScrollViewから必要なコードを持ってきてCScrollWndみたいなくラスをつくってみては?MFCを使う場合には、ソースが公開されていますので、よくそんなことをやってました。 CScrollViewの  OnKeyDown  OnLButtonDown  OnRButtonDown  OnSize  OnHScroll  OnVScroll  OnMouseWheel とかのメッセージハンドラと  SetScrollSize  SetScrollTotalSize  SetScrollPageSize  SetScrollLineSize  GetScrollTotalSize  GetScrollPageSize  GetScrollLineSize  GetScrollPosition  ScrollToPosition  CenterOnPoint とかのメソッドぐらいをCWnd継承クラスに付加すれば、CScrollWndになりますよ。 ただ、MFCもそんなに再利用性の考慮されたソースではないので、細かな修正がちょこちょことめんどくさいですが... この場合めんどくさいのは、縦横のスクロールバーの表示/非表示によって描画領域の調整が必要なところがわかりにくい。 でも、ほんとにめんどくさいのは、スクロールバーとの連動よりも、テキストの描画ロジックだと思いますけど...。編集がなければそんなでもないですけどねぇ。テキスト処理に慣れてれば。 これを見て大変そうとか思うのなら、市販のコントロールとかを探して見たほうがいいかもしれません。

ion_2005
質問者

お礼

回答ありがとうございます。 確かに自分で作るのはめんどくさそうですね。 あまり時間がないので別の方法を採りたいと思います。 ただ、クラスを作る方針は勉強になります。 何かに生かしていければと思います。

その他の回答 (1)

  • yonfa
  • ベストアンサー率52% (22/42)
回答No.2

どのようなデザインのダイアログかわからないのでなんともいえませんが、コントロールがたくさん並んでいて、全体をスクロールするというのであれば、#1さんの言われるようにかなり面倒な実装になると思います。 メッセージボックスの延長みたいなものを作りたいのであれば、簡単にエディットコントロールを置くというのではどうでしょう?

ion_2005
質問者

お礼

回答ありがとうございます。 そう言われてみるとそうですね。 エディットコントロールに置くのが手っ取り早いですね。 何で気付かなかったんだろう・・・