スクロールバーのつまみ

[戻る]
レゴラス 2005/06/15(水) 22:05:02
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 2005/06/16(木) 09:00:56
SetScrollInfo() で、ページサイズを指定してみてください。

ター坊 2005/06/16(木) 09:05:40
私はGetScrollInfo()、SetScrollInfo()、および
SCROLLINFO構造体を使う方法しか知りません。

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

レゴラス 2005/06/17(金) 00:35:03
[[解決]]
dairygoodsさん、ター坊さん
ありがとうございました。
おかげさまで解決しました。

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

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