いつもお世話になっておりますKonです。よろしくお願いします。
PCはWinXP、MicrosoftVisualC++6.0 を使用しています。
MFC で、基本クラスをCFormView にしてプロジェクトを作りました。
水平スクロールバーを使用するプログラムで、
void CXXXView::OnHScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar)
を使っており、この機能そのものは今のところ正常に動いていますが、
1,実行したとき、ウインドウに勝手にスクロールバーが表示される。
(Form が十分な面積であるにもかかわらず)
2,そのスクロールバーをクリックするとOnHScrollが呼ばれ、エラーとなる。
という症状がでて、解決できずに困っています。
どなたか、解決方法が分かる方はいらっしゃいませんか?
自己レスです。
2,についてはpScrollBarが不定のため
エラーになるようです。
EditBoxに表示される水平スクロールバーでは
OnHScroll は呼ばれないのに・・・。
また自己レスです;
OnHScrollのヘルプには、
pScrollBar
・・・略・・ユーザーがウィンドウのスクロール バーをクリックした場合は、
このパラメータは NULL になります。
と書いてあります。じゃあ、NULLになったらどうすれば良いのでしょう?
これはつまり、ウインドウのスクロールバーとスクロールバーコントロール
を併用できない。と解釈するべきなのでしょうか?
NULLの場合はCWndのスクロール系関数を使うのだと思います。
NULL以外の場合はそのウインドウにスクロールバーコントロールがあるってことです。
レスありがとうございます。
窓のスクロールバーをクリックした時点で
CXXXView::OnHScroll が呼ばれ、その時には既に
pScrollBar がNULLです。
この状態から、どうやってCWndのスクロール系関数をつかうのでしょうか?
シロートさんありがとうございます。
指摘をヒントにWebを探して見つけました。
void CXXXView::OnHScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar) {
if(pScrollBar == NULL)
{ CFormView::OnHScroll(nSBCode, nPos, pScrollBar); return; }
//ウィンドウ用のスクロールバーがクリックされたときは、
//基本クラスを呼び出して終了。
・・・略・・・
}
これで良いようです。
お騒がせしました。m(_ _)m