タブコントロール上のチャイルド画面スクロール

[戻る]
tamami 2005/04/03(日) 00:13:43
VC++.net WinXPPro

よろしくお願いいたします。
タブコントロール上の
スクロールバーと画面スクロールについて質問です。

■画面は3つあり、
@メイン画面
  ---タブコントロールを貼り付けてある
Aチャイルド画面
  ---タブ画面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画面がスクロールされるようになるのでしょうか。

よろしくお願いいたします。

tamami 2005/04/03(日) 00:48:36
すみません、少しですが自己解決いたしました。

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とする事が果たしてよいとされるのでしょうか。

よろしくお願いいたします、

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