ダイアログ ベースの MFC アプリケーションで CScrollBar から派生するクラスを設計します。ダイアログ クラス (MyScrollbarDlg) で、ON_WM_VSCROLLメッセージを設定し、ヘッダー ファイルでOnVSCrollメソッドを宣言します。また、対応する .cpp ファイルに OnVScroll() メソッドを実装します。しかし、驚いたことに、スクロールバーの一番下にある矢印をクリックすると、最初にしか機能しませんでした。
コードをデバッグしたいので、OnVScroll メソッドにブレーク ポイントを設定します。その後、奇妙なことが起こりました。ブレークポイントは最初のクリックでしか到達しませんでした。続行すると、スクロールバーがダイアログから消えました! これがどのように起こるかわかりません。この迷惑なバグを修正するのを手伝ってくれる人はいますか? どうもありがとうございました!
以下のようにスクロール範囲を設定しました。
SCROLLINFO scrllInfo;
m_scrollbar.GetScrollInfo(&scrllInfo, SIF_ALL);
scrllInfo.nMax = 15;
scrllInfo.nMin = 0;
scrllInfo.nPage = 0;
scrllInfo.nPos = 0;
m_scrollbar.SetScrollInfo(&scrllInfo, TRUE);
ところで、私はダイアログの埋め込みスクロールバーを使用しませんが、ダイアログのメンバーに設定されたスクロールバー コントロールを使用します。
いくつか実験を行ったところ、前述の問題は、スクロールバー コントロールの下部にある矢印をクリックしたときにのみ発生することがわかりました。他の矢印をクリックするか、スクロールボックスをドラッグするとうまく機能します。私が気付いていないスクロールバーの下矢印をクリックすると、何か違いがありますか?
スクロール メッセージが THUMBPOSITION または THUMBTRACK でない場合、メソッドのパラメーターnPos
がOnVScroll()
使用されないことがわかりました。そこで、コードを次のように変更しました。
int currPos = m_scrollbar.GetScrollPos(); m_scrollbar.SetScrollPos(currPos + 1, TRUE);
今回は正常に動作しますが、ブレークポイントを設定すると、スクロールバーが再び消えました。なぜなのかご存知ですか?