ScrollBarがスクロール限界値までスクロールしない – プログラミング – Home

ScrollBarがスクロール限界値ま...
 
通知
すべてクリア

[解決済] ScrollBarがスクロール限界値までスクロールしない


Q
 Q
(@Q)
ゲスト
結合: 25年前
投稿: 45
Topic starter  

こちらにはいつもお世話になってます。m(_ _)m

現在、MFCにてダイアログに貼り付けることの出来るScrollViewみたいなものを作成して
います。

ウィンドウのスクロールバー表示は、
CRect rect;
GetClientRect(rect);
で取得できる描画領域と、実画像領域の情報から表示部分の大きさ(SCROLLINFO.nPage)
をSetScrollInfoで設定し、スクロールバーを表示しているのですが、
スクロールバーのスクロールメッセージを処理するとき、SetScrollPosでスクロールバ
ーの位置指定をしても、GetScrollLimit()で取得できる値までスクロールさせることが
出来ない現象に悩まされています。

問題の箇所のコードはこんな感じです
{
int limit = GetScrollLimit(SB_VERT); // limit=60
SCROLLINFO si = {0};
si.cbSize = sizeof(SCROLLINFO);
si.fMask = SIF_POS;
si.nPos = nPos; // 位置指定 nPos=53
BOOL ret = SetScrollInfo(SB_VERT, &si, TRUE); // TRUEが返るのにスクロールし
ない!!

   ・
}

Verticalに限って、GetScrolllimitで返る値より-13までの位置までしかスクロールしま
せん。Horaizentalは問題無いようです。

この現象の原因・対処法ご存知の方おられましたら、ご教授いただけませんでしょう
か。

よろしくお願いいたします。


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

訂正です。。

> GetScrolllimitで返る値より-13までの位置までしかスクロールしません。

-17までの位置、の誤りでした。


返信引用
dairygoods
 dairygoods
(@dairygoods)
ゲスト
結合: 23年前
投稿: 1421
 

ページサイズが不明ですが、
指定可能な範囲をはみ出していませんか?

SetScrollInfo
http://www.microsoft.com/japan/msdn/library/ja/jpwinui/html/_win32_setscrollinfo
.asp

| nPos メンバは、nMin 以上 nMax - max(nPage - 1, 0) 以下
| でなければなりません。どちらかのメンバで不適切な値を指
| 定すると、範囲内に収まるよう値が変更されます。


返信引用
Q
 Q
(@Q)
ゲスト
結合: 25年前
投稿: 45
Topic starter  

これっぽいです。
一応解決です。。

最初の例とは違いますが、いまのところスクロールバーに設定している値は、
SCROLLINFO vsi;
vsi.nMin = 0,
vsi.nMax = 540,
vsi.nPage = 438
ですので、
nMax - max(nPage - 1, 0) = 103
です

とすると、GetScrolllimitが120を返すのはおかしいと思って調べてみると、
勝手にnPageが421に変更されてました。-17されてます。

これはどうしてなのでしょうか・・・?
全然nPageを変更するような関数は呼んでないのですが・・・(汗
何かご存じないでしょうか・・・


返信引用
Q
 Q
(@Q)
ゲスト
結合: 25年前
投稿: 45
Topic starter  

解決しました。

nPageはスクロールバーの表示/非表示が変わった際に呼ばれているようでした。
SetScrollPosのタイミングでページサイズを設定しなおすようにしました。


返信引用

返信する

投稿者名

投稿者メールアドレス

タイトル *

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