VC++.net WinXPPro
よろしくお願いいたします。
タブコントロール上の
スクロールバーと画面スクロールについて質問です。
■画面は3つあり、
①メイン画面
---タブコントロールを貼り付けてある
②チャイルド画面
---タブ画面Aとして使用
■メイン画面は小さく、Aのチャイルド画面の高さが
可也の長さがあります。
メイン画面のタブコントロール内で縦スクロールにより
Aをスクロールして見られるようにしたいのです。
■この場合、
スクロールバーは
A画面のプロパティ「Vertical ScrollBar」=Trueとして
OnVScrollイベントで処理すべきでしょうか?
それともメイン画面のタブコントロール上に
「スクロールバー」を貼り付けて、処理すべきでしょうか?
前者のプロパティで試してみたところ、
デバッグした際のタブコントロール上に表示されたのは
A画面のスクロールバーも途中で途切れてしまうものでした。
そこで、後者に切り替えたのですが、
OnVScrollイベント内の処理で
以下のように記述したところ、
スクロールバーはマウスクリック等にちゃんと反応するのですが、
その次の肝心な画面の移動は行われません。
-----------------------------------------
//スクロールバー処理
SCROLLINFO info;
pScrollBar->GetScrollInfo(&info);
int myMax = info.nMax - info.nPage + 1;
int pos = pScrollBar->GetScrollPos();
switch( nSBCode ){
case SB_TOP: // 左端へスクロール
pos = 0;
break;
(中略)
case SB_ENDSCROLL: // スクロール終了
return;
}
if( pos < info.nMin )pos = info.nMin;
if( pos > myMax ) pos = myMax;
pScrollBar->SetScrollPos(pos);
//画面移動処理(試しに動くことだけ確認したいのでスクロールに関わらず同じ処理)
CRect rRect;
m_tabctrl.GetWindowRect( &rRect );
m_CTab1.ScrollWindowEx(0,0,&rRect,&rRect,NULL,NULL,SW_SCROLLCHILDREN);
m_CTab1.InvalidateRect(NULL,TRUE);
m_CTab1.UpdateData(FALSE);
-----------------------------------------
※m_tabctrl ・・・ メイン画面のタブコントロールのメンバ変数
m_CTab1 ・・・ A画面(クラス)の変数
画面表示が全く変わらず、どうしたらいいのかわかりません。
試しに、m_Ctab1.m_CTab1.MoveWindow(0,0,40,40,TRUE);
のようにしたところ、タブコントロールからはみ出して上に行ってしまいました。
どのようにしたらうまくタブコントロール内で、
A画面がスクロールされるようになるのでしょうか。
よろしくお願いいたします。
すみません、少しですが自己解決いたしました。
m_CTab1.ScrollWindowEx(0,0,&rRect,&rRect,NULL,NULL,SW_SCROLLCHILDREN);
↓
m_CTab1.ScrollWindowEx(0,0,NULL,NULL,NULL,NULL,SW_SCROLLCHILDREN);
とし、
m_CTab1.UpdateWindow();
を加えたところ、ちゃんとタブコントロール内でスクロールされるようになりました!
でもこれですと下へのスクロールしか出来ないので上へは
スクロールされません。
あと、NULLとする事が果たしてよいとされるのでしょうか。
よろしくお願いいたします、