ダイアログベースで水平スクロールを使いたいのですがバーしか動かないで画面が左右に移動しません。どうすればいいでしょうか?誰か教えてください!
スクロールバーを単に貼り付けても何も起こらないので、
操作したときに、画面がスクロールするように自分で書いてください。
すいません、説明不足でした。
色々なサイトでソースを見て試したのですが、どれもバーしか動きませんでした。ソースわかる人いませんか?
バーしか動かないってどういうことですか??
バーが動けば正しく動いていると思うのですけど。。
水平スクロールが機能することにより何をしたいのかが
わからないので、その部分を明確にした方がソースを
提示しやすいかと思います。
>すいません、説明不足でした。
まだ、説明がかなり不足しています。
>色々なサイトでソースを見て試したのですが、どれもバーしか動きませんでした。ソースわかる人いませんか?
少なくとも、あなたが試した「バーしか動かない状態」を、他の人が再現できるぐらいの説明が必要です。
参考にしたソースの提示も無い様なので答えようが無いような。
基本的にスクロールバーが制御してくれるのはスクロールバー自身の挙動だけです。
実際にコントロールやら画像やらをスクロールするための操作は、
自分で記述して動作させないと駄目です。
単純にダイアログにスクロールバーを載せれば、他のコントロール等も自動で
スクロールしてくれると考えているのであれば、それは間違いです。
結局、ソースの提示が無いので想像で書くしかありません。
きわめて効率が悪いと思いますので解決のためには適切なソースの提示が必要だと考えてください。
BOOL CUKScrollBarDlg::OnInitDialog()
{
CDialog::OnInitDialog();
……
// TODO: 特別な初期化を行う時はこの場所に追加してください。
// m_hscroll1はCScrollBarクラスの水平スクロールバー。ClassWizardで設定する
m_hscroll1.SetScrollRange(-20, 20);
m_hscroll1.SetScrollPos(0);
return TRUE; // TRUE を返すとコントロールに設定したフォーカスは失われません。
}
これでスクロールバーの左端が-20、右端が20となり、初期位置は0(つまりスクロールバーの中央)に設定される。
スクロールバー上でスクロールボックスをドラッグさせたり、両端の矢印をクリックするなどしてスクロールを実行すると、親ウィンドウにWM_HSCROLLメッセージ(垂直スクロールバーの場合はWM_VSCROLL)が送られる。親ウィンドウのOnHScrollハンドラをカスタマイズすることで、このメッセージを取得、操作することができる。
void CUKScrollBarDlg::OnHScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar)
{
// TODO: この位置にメッセージ ハンドラ用のコードを追加するかまたはデフォルトの処理を呼び出してください
int iPos = pScrollBar->GetScrollPos();
int iMin, iMax;
pScrollBar->GetScrollRange(&iMin, &iMax);
switch(nSBCode) {
case SB_LINELEFT: // 左端の矢印をクリックした場合(または←キー)
iPos--;
if( iPos < iMin )
iPos = iMin;
break;
case SB_LINERIGHT: // 右端の矢印をクリックした場合(または→キー)
iPos++;
if( iPos > iMax )
iPos = iMax;
break;
case SB_PAGELEFT: // スクロールボックスの左側をクリックした場合(またはPageUpキー)
iPos -= 10;
if( iPos < iMin )
iPos = iMin;
break;
case SB_PAGERIGHT: // スクロールボックスの右側をクリックした場合(またはPageDownキー)
iPos += 10;
if( iPos > iMax )
iPos = iMax;
break;
case SB_THUMBPOSITION: // スクロールボックスを絶対移動させた場合
case SB_THUMBTRACK: // スクロールボックスをドラッグ移動させた場合
iPos = nPos;
break;
}
pScrollBar->SetScrollPos(iPos);
// デフォルトの処理は実行せずにコメント化する
// CDialog::OnHScroll(nSBCode, nPos, pScrollBar);
}
遅れて申し訳ないです。このソースで試してみたら、バーしか動きませんでした。
>遅れて申し訳ないです。このソースで試してみたら、バーしか動きませんでした。
バー以外を動かす記述はどこにあるんですか?
もしないのであれば、当然動きません。
ダイアログベースにこだわらなくていいなら、画面スクロールに限ればSDI&CFormViewで簡単にできるのにね。
これって文字通りスクロールバーの制御をしているだけです。
前にも書いていますが、動かしたい対象を動かすのはプログラマの仕事です。
動かしたいものがコントロールであれば、そのコンロトールにMoveWindow等を
使って動かす必要があるでしょうし、対象が画像なら必要な分だけ基準位置を
ずらして描画するためのコードを自分で書かなくては駄目です。
ツイート | ![]() |