スクロール処理がうまくいかない – プログラミング – Home

スクロール処理がうまくいかない
 
通知
すべてクリア

[解決済] スクロール処理がうまくいかない


ねこ
 ねこ
(@ねこ)
ゲスト
結合: 22年前
投稿: 94
Topic starter  

ON_WM_VSCROLL()
OnVScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar)
nPos->これはスクロールの位置を示しているのですが、
この値がUINTの表現できる値を超えてしまいました。

これを回避するため、OnVScrollの引数nPosをintに変更しようと
しても起こられました。
ON_WM_VSCROLLの定義と一致しないとだめみたいです。
ON_WM_VSCROLLを定義ってできますか?


引用未解決
トピックタグ
PATIO
(@patio)
Famed Member
結合: 3年前
投稿: 2660
 

えーと、UINTの表現範囲を超えたのでintにしたという部分が理解できないです。
マイナス方向に超えちゃったと言う話なんでしょうか?
この辺の話はちゃんとMSDNでCWnd::OnVScrollを調べて見てください。
nPosの部分でちゃんと解説されています。

発想としてはハンドラの引数の型を変えようと言う時点で間違ってます。
ハンドラを呼び出す側は元の方で呼び出すわけなので意味が無いですし。
基本的にイベントハンドラに関しては関数の型とか引数を変更する事は出来ません。

何をしようとしてどんな状態になっているのかをちゃんと説明してくれないと
多分、参考になるレスポンスは期待できないと思います。
あと、開発環境に関する記述が一切無いのでその辺もちゃんと公開してください。
この辺の話については、このラウンジの「使用上の注意」を参照してください。


返信引用
ねこ
 ねこ
(@ねこ)
ゲスト
結合: 22年前
投稿: 94
Topic starter  

>えーと、UINTの表現範囲を超えたのでintにしたという部分が理解できないです。
>マイナス方向に超えちゃったと言う話なんでしょうか?
まちがえました。long型にしたいです。
表示画面サイズが68606ピクセルなので、桁あふれしているんじゃないか
と思っています。

○現象
ある一定の位置まで、スクロールすると、スクロール位置が先頭になる。
OnVScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar)
を追うと、nPosの値にマイナスが入っていた。

○環境
WindowsXp(Microsoft Visual C++ .NET)

言葉足らずで、申し訳ありません.(__).


返信引用
Blue
 Blue
(@Blue)
ゲスト
結合: 20年前
投稿: 1467
 

ヘルプには
>nPos
>スクロール バーのコードが SB_THUMBPOSITION または SB_THUMBTRACK の場合は、スク
>ロール ボックスの現在位置を指定します。それ以外の場合は使いません。初期スクロ
>ール範囲によっては、nPos が負になることもあるので、必要に応じて int にキャスト
>します。
とありました。
http://msdn2.microsoft.com/ja-jp/library/fhfk142k(VS.80).aspx

で、「OnVScroll 負」というので検索してみてたら
http://www.eva.hi-ho.ne.jp/minoru-f/diary/diary200005.html
ってのを見つけた。


返信引用
ねこ
 ねこ
(@ねこ)
ゲスト
結合: 22年前
投稿: 94
Topic starter  

nPosの表現できる範囲を超えていました。

OnScroll関数内で、
SB_THUMBTRACKの場合のみ、nPosは使用せず、
つまみの位置(GetScrollInfoで取得)を使用するように変更しました。
GetScrollInfo(SB_VERT, &stScrollInfo, SIF_TRACKPOS);

これより、描画する位置を知ることができました。

ありがとうございます!!


返信引用

返信する

投稿者名

投稿者メールアドレス

タイトル *

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