スクロールバーのつまみ – プログラミング – Home

スクロールバーのつまみ
 
通知
すべてクリア

[解決済] スクロールバーのつまみ


レゴラス
 レゴラス
(@レゴラス)
ゲスト
結合: 22年前
投稿: 18
Topic starter  

Win98/VC++6.0 SPなし

久しぶりにご質問させて頂きたいと思っています。
よろしくお願いいたします。

オーバーラップウィンドウにテキストを
コンソールプログラムのように描画していく
プログラムを作っています。

このとき画面からはみ出す(下へ)場合を想定して、
スクロールバーをつけてみました。

単純にCreateWindow で WS_VSCROLL を追記しただけ
で、後は「猫でもわかる・・・」サイトのソースを
コピーして書いてみて、とりあえずできるようになったのですが、
スクロールバーの ツマミ 部分がスクロールの移動量に対して
異常に小さいです。
2~3行しかスクロールしないはずなのに、ツマミが小さい
場合は、何に原因があるのでしょうか。

ご存知の方いらっしゃいましたらご教授ください。
以下、コピーしたソースです。
-----------------------------
case WM_CREATE:
wPosX = GetSystemMetrics(SM_CXSCREEN);
wPosY = GetSystemMetrics(SM_CYSCREEN);
break;
case WM_SIZE:
yclient = HIWORD(lParam);
range = wPosY - yclient;
y = min(y, range);
SetScrollRange(hWnd, SB_VERT, 0, range, FALSE);
SetScrollPos(hWnd, SB_VERT, y, TRUE);
break;
case WM_VSCROLL:
switch (LOWORD(wParam))
{
case SB_LINEUP:
dy = -1;
break;
case SB_LINEDOWN:
dy = 1;
break;
case SB_THUMBPOSITION:
dy = HIWORD(wParam)-y;
break;
case SB_PAGEDOWN:
dy = 10;
break;
case SB_PAGEUP:
dy = -10;
break;
default:
dy = 0;
break;
}
dy = max(-y, min(dy, range - y));
if (dy != 0) {
y += dy;
ScrollWindow(hWnd, 0, -dy, NULL, NULL);
SetScrollPos(hWnd, SB_VERT, y, TRUE);
UpdateWindow(hWnd);
}
break;


引用未解決
トピックタグ
dairygoods
 dairygoods
(@dairygoods)
ゲスト
結合: 23年前
投稿: 1421
 

SetScrollInfo() で、ページサイズを指定してみてください。


返信引用
ター坊
 ター坊
(@ター坊)
ゲスト
結合: 21年前
投稿: 9
 

私はGetScrollInfo()、SetScrollInfo()、および
SCROLLINFO構造体を使う方法しか知りません。

その場合はSCROLLINFO構造体のnPageが
スクロールボックスの大きさになります。


返信引用
レゴラス
 レゴラス
(@レゴラス)
ゲスト
結合: 22年前
投稿: 18
Topic starter  

dairygoodsさん、ター坊さん
ありがとうございました。
おかげさまで解決しました。

SCROLLINFO構造体を設定して計算することで
スクロールが必要な場合は表示し、必要がない
場合は表示しない。
と、理想のかたちになりました。
ありがとうございました。


返信引用

返信する

投稿者名

投稿者メールアドレス

タイトル *

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