アプリ版:「スタンプのみでお礼する」機能のリリースについて

VC++6.0 MFC
お世話になります。

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

A 回答 (2件)

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もそんなに再利用性の考慮されたソースではないので、細かな修正がちょこちょことめんどくさいですが...
この場合めんどくさいのは、縦横のスクロールバーの表示/非表示によって描画領域の調整が必要なところがわかりにくい。

でも、ほんとにめんどくさいのは、スクロールバーとの連動よりも、テキストの描画ロジックだと思いますけど...。編集がなければそんなでもないですけどねぇ。テキスト処理に慣れてれば。

これを見て大変そうとか思うのなら、市販のコントロールとかを探して見たほうがいいかもしれません。
    • good
    • 0
この回答へのお礼

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

お礼日時:2007/01/07 16:36

どのようなデザインのダイアログかわからないのでなんともいえませんが、コントロールがたくさん並んでいて、全体をスクロールするというのであれば、#1さんの言われるようにかなり面倒な実装になると思います。



メッセージボックスの延長みたいなものを作りたいのであれば、簡単にエディットコントロールを置くというのではどうでしょう?
    • good
    • 0
この回答へのお礼

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

お礼日時:2007/01/07 16:42

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!