WinApi滚动条处理

WinApi滚动条处理,winapi,scrollbar,handle,Winapi,Scrollbar,Handle,我想为我的项目创建一个漂亮的用户界面。我创建一个窗口,然后创建一个子窗口,它是接口函数的主窗口。所以我有这两个窗口,在子窗口中我想添加一个滚动条。我创建了一个滚动条类: class Scrollbar { public: HINSTANCE hInstance; HWND hwnd; SCROLLINFO si; Scrollbar(HWND Scroll_hwnd, HINSTANCE hInstance, HWND hwnd, SCROLLINFO si, R

我想为我的项目创建一个漂亮的用户界面。我创建一个窗口,然后创建一个子窗口,它是接口函数的主窗口。所以我有这两个窗口,在子窗口中我想添加一个滚动条。我创建了一个滚动条类:

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);
所以创建了滚动条,但现在我想以某种方式处理它,所以我在我的子窗口回调函数中执行如下操作:

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 );
}
(……)

我得到一个转换错误(SCROLLINFO到LPSCROLLINFO)


知道如何修复吗?

您创建了一个水平滚动条,但您正在回调中获取/设置垂直滚动条的值。将
SB_VERT
更改为
SB_HORZ

至于编译器错误,您确实传递了一个
SCROLLINFO
,其中需要一个
SCROLLINFO*

更改此项:

GetScrollInfo( hwnd, SB_VERT, s1->si );
为此:

GetScrollInfo( hwnd, SB_HORZ, &(s1->si) );
或者这个:

GetScrollInfo( hwnd, SB_HORZ, &(scroll.si) );
谢谢你,伙计!这有帮助!:)我在搜索错误和修改代码时迷失了方向,答案很简单。妈的:再来一次,谢谢!
GetScrollInfo( hwnd, SB_HORZ, &(s1->si) );
GetScrollInfo( hwnd, SB_HORZ, &(scroll.si) );