VC++6.0 MFC
お世話になります。
メニューからモードレスダイアログを発生させてそこに文字列を書き出しているのですが、文字列が多い場合、入りきれません。そこでダイアログリソースに標準スクロールバーを付加させました。しかし、ソースが煩雑になっていきます。
調べてみれば、ウィンドウでは基本クラスをCScrollViewにすることにより、スクロールバーのメッセージ処理コードのを大半を肩代わりしてくれることを知りました。
そこで、ダイアログでもこのように便利なことはできないかと質問をした次第です。
できるのであれば、方針などを教えてください。
よろしくお願いします。
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もそんなに再利用性の考慮されたソースではないので、細かな修正がちょこちょことめんどくさいですが...
この場合めんどくさいのは、縦横のスクロールバーの表示/非表示によって描画領域の調整が必要なところがわかりにくい。
でも、ほんとにめんどくさいのは、スクロールバーとの連動よりも、テキストの描画ロジックだと思いますけど...。編集がなければそんなでもないですけどねぇ。テキスト処理に慣れてれば。
これを見て大変そうとか思うのなら、市販のコントロールとかを探して見たほうがいいかもしれません。
回答ありがとうございます。
確かに自分で作るのはめんどくさそうですね。
あまり時間がないので別の方法を採りたいと思います。
ただ、クラスを作る方針は勉強になります。
何かに生かしていければと思います。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) シートをコピーする下記記述でダイアログを用いた記述がわかりません?( A = Dir(ThisWor 4 2022/08/22 12:26
- Excel(エクセル) capeofdragonと申します Excel2016を使っておりまして 半角又は全角の任意文字列が 2 2022/10/31 13:51
- その他(プログラミング・Web制作) プログラミング pythonの問題について 2 2022/04/19 00:41
- Visual Basic(VBA) 集めたシートのシート名を変更したい。 下記のコードでサブフォルダにあるファイルのSheet3を集めて 6 2022/08/23 10:38
- Visual Basic(VBA) エクセルVBAについて 2 2023/01/31 16:21
- Visual Basic(VBA) VBA 重複チェック後に値をワークシートに転記する方法を教えてください。 1 2023/03/19 12:43
- Visual Basic(VBA) サブフォルダ(データ)にある複数の.xlsxファイルのSheet3のA2セルの値で01から左側をB2 2 2022/08/14 15:46
- C言語・C++・C# Seleniumで「ファイルを開く」ダイアログボックスのフォルダ指定する方法を教えてください。 1 2022/05/09 07:38
- Excel(エクセル) Excelの空文字判定について 7 2023/01/06 13:25
- Visual Basic(VBA) VBAでファイルを開くプログラムがエラーです 2 2023/02/21 16:56
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
コントロールの書式設定で、“コ...
-
DateTimePickerでに年月までし...
-
エクセルのコントロールツール...
-
フォームでPDFを表示させた...
-
EXCELVBA リストボックスで選択...
-
ワードのドロップダウンリスト
-
WM_SIZEを発生させる方法
-
連続で印刷すると画像が更新さ...
-
TabControlとToolBarの背景色変更
-
文字色を変えたい(ACCESS VBA)
-
WS_TABSTOPが機能するコントロ...
-
ActiveXコントロールを.NETにイ...
-
スピンボタンを右クリックして...
-
VCのコントロール最大配置数は?
-
VBAでリストボックス内で↑↓の操...
-
エクセル - リストボックスのマ...
-
VC++6.0 エディットボックス、...
-
MFCのプロジェクト作成時にコモ...
-
コモンダイアログコントロール...
-
Win32のリストコントロールで縦...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
コントロールの書式設定で、“コ...
-
エクセルのコントロールツール...
-
フォームでPDFを表示させた...
-
スピンボタンを右クリックして...
-
DateTimePickerでに年月までし...
-
C++6.0でのresource.hについて
-
連続で印刷すると画像が更新さ...
-
ActiveXコントロールを.NETにイ...
-
警告表示を非表示にしたい
-
エクセル - リストボックスのマ...
-
コモンダイアログコントロール...
-
EXCELVBA リストボックスで選択...
-
TabControlとToolBarの背景色変更
-
ワードのドロップダウンリスト
-
文字色を変えたい(ACCESS VBA)
-
CEdit の内容が変わった時にメ...
-
リストボックスの同期
-
VB6.0のデザイン時 コントロー...
-
WM_SIZEを発生させる方法
-
VBAでリストボックス内で↑↓の操...
おすすめ情報