水平スクロールバーが表示されてしまいます

[戻る]
Kon 2006/03/28(火) 15:52:39
いつもお世話になっておりますKonです。よろしくお願いします。
PCはWinXP、MicrosoftVisualC++6.0 を使用しています。
MFC で、基本クラスをCFormView にしてプロジェクトを作りました。

水平スクロールバーを使用するプログラムで、
void CXXXView::OnHScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar) 
を使っており、この機能そのものは今のところ正常に動いていますが、

1,実行したとき、ウインドウに勝手にスクロールバーが表示される。
(Form が十分な面積であるにもかかわらず)
2,そのスクロールバーをクリックするとOnHScrollが呼ばれ、エラーとなる。

という症状がでて、解決できずに困っています。
どなたか、解決方法が分かる方はいらっしゃいませんか?

Kon 2006/03/28(火) 19:43:43
自己レスです。

2,についてはpScrollBarが不定のため
エラーになるようです。

EditBoxに表示される水平スクロールバーでは
OnHScroll は呼ばれないのに・・・。

Kon 2006/03/29(水) 13:16:55
また自己レスです;

OnHScrollのヘルプには、
pScrollBar 
・・・略・・ユーザーがウィンドウのスクロール バーをクリックした場合は、
このパラメータは NULL になります。

と書いてあります。じゃあ、NULLになったらどうすれば良いのでしょう?
これはつまり、ウインドウのスクロールバーとスクロールバーコントロール
を併用できない。と解釈するべきなのでしょうか?

シロート 2006/03/29(水) 14:18:38
NULLの場合はCWndのスクロール系関数を使うのだと思います。
NULL以外の場合はそのウインドウにスクロールバーコントロールがあるってことです。

Kon 2006/03/29(水) 16:33:47
レスありがとうございます。

窓のスクロールバーをクリックした時点で
CXXXView::OnHScroll が呼ばれ、その時には既に
pScrollBar がNULLです。
この状態から、どうやってCWndのスクロール系関数をつかうのでしょうか?

Kon 2006/03/29(水) 17:02:50
[[解決]]
シロートさんありがとうございます。
指摘をヒントにWebを探して見つけました。

void CXXXView::OnHScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar) {

if(pScrollBar == NULL) 
{ CFormView::OnHScroll(nSBCode, nPos, pScrollBar); return; }

//ウィンドウ用のスクロールバーがクリックされたときは、
//基本クラスを呼び出して終了。

・・・略・・・
}

これで良いようです。
お騒がせしました。m(_ _)m

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