水平スクロールバーが表示されてしまいます – プログラミング – Home

水平スクロールバーが表示されてしまいま...
 
通知
すべてクリア

[解決済] 水平スクロールバーが表示されてしまいます


Kon
 Kon
(@Kon)
ゲスト
結合: 19年前
投稿: 89
Topic starter  

いつもお世話になっておりますKonです。よろしくお願いします。
PCはWinXP、MicrosoftVisualC++6.0 を使用しています。
MFC で、基本クラスをCFormView にしてプロジェクトを作りました。

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

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

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


引用未解決
トピックタグ
Kon
 Kon
(@Kon)
ゲスト
結合: 19年前
投稿: 89
Topic starter  

自己レスです。

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

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


返信引用
Kon
 Kon
(@Kon)
ゲスト
結合: 19年前
投稿: 89
Topic starter  

また自己レスです;

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

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


返信引用
シロート
 シロート
(@シロート)
ゲスト
結合: 19年前
投稿: 20
 

NULLの場合はCWndのスクロール系関数を使うのだと思います。
NULL以外の場合はそのウインドウにスクロールバーコントロールがあるってことです。


返信引用
Kon
 Kon
(@Kon)
ゲスト
結合: 19年前
投稿: 89
Topic starter  

レスありがとうございます。

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


返信引用
Kon
 Kon
(@Kon)
ゲスト
結合: 19年前
投稿: 89
Topic starter  

シロートさんありがとうございます。
指摘をヒントにWebを探して見つけました。

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

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

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

・・・略・・・
}

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


返信引用

返信する

投稿者名

投稿者メールアドレス

タイトル *

プレビュー 0リビジョン 保存しました
共有:
タイトルとURLをコピーしました