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;
SetScrollInfo() で、ページサイズを指定してみてください。
私はGetScrollInfo()、SetScrollInfo()、および
SCROLLINFO構造体を使う方法しか知りません。
その場合はSCROLLINFO構造体のnPageが
スクロールボックスの大きさになります。
dairygoodsさん、ター坊さん
ありがとうございました。
おかげさまで解決しました。
SCROLLINFO構造体を設定して計算することで
スクロールが必要な場合は表示し、必要がない
場合は表示しない。
と、理想のかたちになりました。
ありがとうございました。