Q&A
MFCのダイアログモードでアプリケーションの制作をしているのですが、スクロールバーの処理でエラーが発生している様で、上手く機能しません。
言語はC++です。
スクロールバーはリソースエディタでスクロールバーのコントロールを置き、ダイアログのクラスウィザードからWM_VSCROLLのイベントを追加し、それで追加された下記のOnVScrollのメソッドの中にコードを記述しました。
他に特に変わったことはしていないはずです。
ソースコード
C++
1void CXXXXXDlg::OnVScroll( UINT nSBCode, UINT nPos, CScrollBar *pScrollBar ) 2{ 3 // TODO: ここにメッセージ ハンドラー コードを追加するか、既定の処理を呼び出します。 4 int e = pScrollBar->SetScrollPos(10); 5 int error_code = GetLastError(); 6 CDialogEx::OnVScroll( nSBCode, nPos, pScrollBar ); 7} 8
上記のコードはとりあえずスクロールバーが操作できるかを確かめる為に書いたものです。
(最初はもっときちんとしたのをネット上にあったサンプルを参考に書いたのですが、それがまず上手くいかなかったので、原因究明として上記のようなシンプルなコードを書きました)
上記のコードでスクロールバーを操作したら、とりあえずバーの位置が10になるかと思うのですが、バーを動かしてもすぐに初期の位置に戻り処理の反映が出来ませんでした。
そこでブレイクポイントを使用して調べてみたことろ、引数のpScrollBarはNULLでは無く何かの値(たぶんスクロールバーコントロールのハンドル)が入っており、nSBCodeにはSB_THUMBTRACKやSB_THUMBPOSITIONなど、スクロールバーを操作した時の動作が正しく入っていました。
ただし、nPosはどんな操作をしても常に0が入ってました。(SB_THUMBPOSITIONとSB_THUMBTRACK時は、その時の位置が入っているらしいですが、それも0でした)
また、SetScrollPosの戻り値が0でして、エラーが起きた時は0が返って来るとの事なので、エラーが起きていると思われます。
ただ、GetLastErrorで取得した値は5だったのですが、これの意味は調べてもよく分かりませんでした。
このエラーの原因、また修正方法を教えていただけたら幸いです。
回答2件
あなたの回答
tips
プレビュー
下記のような回答は推奨されていません。
このような回答には修正を依頼しましょう。