> 子でも構わないです^^
話がごちゃごちゃですよ。
ダイアログにコントロールがいっぱいあってスクロールしないといけない
->ダイアログボックスをスクロールバー付きにして、スクロールイベントに対して
コントロールを移動させればよい。
->コントロールが多く、移動させるのが面倒。
->大きなダイアログ(子)を作って、それを別のスクロールバーつきダイアログ
(親)に乗せて、親のスクロールイベントに対して、その子を移動する。
という関係で親子の話をしているんだと思っていましたが。
そもそもスクロールしなければならないほどコントロールがいっぱいあるダイアログ
なんて設計を疑うべきです。コントロールのグループを分けてプロパティシートにす
るとか、ダイアログを小さくする手段はいくらでもあります。
わざわざ実装を難しくして悩む必要が本当にあるんですか?
(本当に実装が難しいかはやってみていないのでよくわかりませんが。)
ユーザインターフェースを考え直すことをお勧めいたします。
>話がごちゃごちゃですよ。
すいません・・・。
>ダイアログにコントロールがいっぱいあってスクロールしないといけない
>->ダイアログボックスをスクロールバー付きにして、スクロールイベントに対して
>コントロールを移動させればよい。
これで十分かもしれないです。
この方法で参考になるサイト等ご存知でしたら教えてくださいm(__)m
設計というか要望なのでどうしようもないんです・・・。
まとめます。
「触ると落ちる」というのは解決しました。
ここで言っている「親」というのも実は子で、プロパティで「子」を設定すれば大丈夫
でした。
現在、CDialog(親)をCreateして、そのOnInitDialog()の中でさらに子をCreateしてい
ます。
子はFormViewです。
Create後に子のOnInitialUpdate()を呼び、そこで
CRect rect;
SIZE sz;
GetClientRect( rect );
sz.cy = rect.bottom -rect.top;
sz.cx = rect.right -rect.left;
SetScrollSizes(MM_HIMETRIC,sz);
このようにしているのですが、スクロールが表示されないという所で詰まっています。
FormViewであればSetScrollSizesでスクロールが表示されると思ったのですが・・・。
(もちろん、リソースのプロパティでスクロールもONにしております)
何か不備がありそうな箇所がございましたらご指摘お願いいたします。
うーん、
何か話が難しくなってきますね。
このままうまくいっても、基本をうまく設計しておかないと、
何らかのタイミングで「HWND == NULL」等の例外で異常終了する可能性
がありますね。
もう少し単純に考えて、ウインドウをFormViewのSDI一つにしてそこに
スクロールバーを配置してそれに連動して動くようにすればいいと思いますが....
maruさんが先に提案していましたね。
> 設計というか要望なのでどうしようもないんです・・・。
もし、顧客かやの仕様でなく要望ならまだ相談の余地が残っていると思います。
どういう事がしたくて一画面のスクロールで無いと困ると
言われているのかを考えないと説得するにしても説得のしようが無いかなと。
一画面のスクロールで対応したいと言うからには
そういう画面で無いと困る理由があるのではないかと思います。
ところが、実際にはこう言うレイアウトにした方が見やすいし、
使いやすいですよと言う提案をする余地もあると思うので
そういう提案が出来てお客さんもハッピーになれるなら
必ずしも要望と全く同じ方法である必要は無いのではないかなと思います。
逆にどうしても一画面に全て載せてスクロールで何とかしないと
不可能な理由があれば、何とか知恵を絞ってでも対応してあげないと
いけないという事になると思うのですけれど。
スクロールは、SetScrollSizesの引数のサイズで表示できました。
また、ダイアログのプロパティでStyleを「オーバーラップ」にすることで触れるように
なりました。
> また、ダイアログのプロパティでStyleを「オーバーラップ」にすることで触れる
> ようになりました。
解決したようですが、いろいろな操作をしてデバッグすることを薦めます。
複雑なウインドウの処理を行なうと思いがけないところで例外の異常終了が起きて
しまうので注意が必要だと思います。