スクロールバーが表示されなくなる

[戻る]
Q 2006/01/12(木) 11:51:22
いつもお世話になってますm(_ _)m

WTLでスクロールウィンドウ内に別のウィンドウを表示するアプリケーションを作成して
いるのですが、
スクロールバーが表示されなくなる問題に頭を悩ませております。

スクロールウィンドウは、CScrollWindowImpl<T>を継承しています。
SetScrollSize()で表示する子ウィンドウのウィンドウサイズを指定し、
SetScrollPage()でスクロールウィンドウのクライアント領域を指定して、スクロールバ
ーの表示制御を行っています。

表示している子ウィンドウが入れ替わる場合、いったんスクロールバー表示を消す必要
(※)から、SetScrollSize(1,1)としてスクロールバーを消した後、新しくSetSrollSize
()で表示するウィンドウのサイズを指定しているのですが、
明らかに垂直・水平スクロールバーが表示されるべき場合でも「垂直スクロールバー」だ
けが表示されません。
また、この状態になったとき水平スクロールバーの「→」が反応しなくなります。
(どうやらスクロールバーは存在しているのに描画されていないだけ?のようです)

試しにこのときウィンドウスタイルを確認してみると、
垂直スクロールバーは「表示状態」になっていました。

一応、ウィンドウをリサイズすることで正常な表示になるのですが、
なんとか上記のような状態を回避する方法はありませんでしょうか?

開発環境は、
・Windows XP
・Visual Studio 6.0 (VC++ 6.0)
・ATL & WTL 3.1(古っ!!)
です。

何か良い方法をご存知の方おられましたら、
よろしく御教授お願い致しますm(_ _)m

[※ スクロールウィンドウのリサイズに合わせて子ウィンドウもリサイズする場合、ス
クロールバーが表示されたままだと、ウィンドウのサイズの縮小にあわせてスクロール
バーが激しく表示/非表示を繰り返してしまうため、強制的に非表示状態にしていま
す。]

Q 2006/01/20(金) 15:28:18
[[解決]]
自己レスですが、一応解決の報告です。

WTLのスクロールバーの消去と再描画の処理に問題がありました。

とりあえず、関連するバグとして、2点不具合がありました。
AtlScrl.h内、
CScrollImpl<T>クラスで、
1.OnSize()のそれぞれのSetScrollInfo関数の再描画フラグ
      誤:pT->SetScrollInfo(SB_VERT, &si, FALSE);
      正:pT->SetScrollInfo(SB_VERT, &si, TRUE);
2.SetScrolSize()
      pT->ShowScrollBar(SB_BOTH, FALSE);
      が抜けている。

WTLのヘッダをコピーして、
自プロジェクト内で修正済したヘッダを利用してみると、
無事解決しました。

※ WTLの最新版だとなおってるのかな。。?

古いスレッドには追加発言できません。