1

プロジェクト用の優れたユーザー インターフェイスを作成したいと考えています。ウィンドウを作成し、インターフェイス機能のメイン ウィンドウである子ウィンドウを作成します。だから...私はそれらの2つのウィンドウを持っています.子ウィンドウにスクロールバーを追加したいと思います. Scrollbar クラスを作成しました。

class Scrollbar
{
public:
    HINSTANCE hInstance;
    HWND hwnd;
    SCROLLINFO si;
    Scrollbar(HWND Scroll_hwnd, HINSTANCE hInstance, HWND hwnd, SCROLLINFO si, RECT Child_rect, int iHThumb);
    SCROLLINFO Initialise(SCROLLINFO si, RECT rect);
    ~Scrollbar();
};

コンストラクターには、基本的に CreateWindow 関数があります。

Scroll_hwnd = CreateWindow(
L"SCROLLBAR", 
(LPCWSTR)NULL,
 WS_CHILD | WS_VISIBLE | SBS_HORZ | SBS_BOTTOMALIGN,
 Child_rect.left,Child_rect.top,Child_rect.right-iHThumb,Child_rect.bottom,
 hwnd,
 NULL,
 hInstance,
 NULL);

SetScrollRange( Scroll_hwnd, SB_CTL, 0, 10, FALSE);

スクロールが作成されますが、どうにかしてそれを処理したいので、子ウィンドウの CALLBACK 関数で次のようにします。

case WM_HSCROLL: 
    {

    GetScrollInfo( hwnd, SB_VERT, &si );

    int position = si.nPos;

    switch( LOWORD( wParam ) ) 
    {

    case SB_LINELEFT:
        if( position > 0 ) 
        {
            position--;
        }
        break;
    case SB_LINERIGHT:
        if( position < 10 ) 
        {
            position++;
        }
        break;
    ZeroMemory( & si, sizeof( si ) );
    si.cbSize = sizeof( SCROLLINFO );
    si.fMask = SIF_POS;
    si.nPos = position;

    SetScrollInfo( hwnd, SB_VERT, & si, TRUE );
}

わかりませんが、私の意見では、すべて問題ありません...位置変数は問題なくインクリメントされますが、スクロールはまだ開始位置にあります。何が問題なのですか?また、次のようなことをしようとすると:

Scrollbar *s1;
s1 = &scroll;

(...)

GetScrollInfo( hwnd, SB_VERT, s1->si );

変換エラーが発生する (SCROLLINFO TO LPSCROLLINFO)

それを修正する方法はありますか?

4

1 に答える 1