我想为我的项目创建一个不错的用户界面。我创建一个窗口,然后创建一个子窗口,它是接口函数的主窗口。所以...我有两个窗口,在子窗口中我想添加一个滚动条。我创建了一个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 func:
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 );
}
Dunno但在我看来一切都很好......位置变量增加得很好但滚动仍处于起始位置。有什么想法错了吗? 当我尝试做这样的事情时:
Scrollbar *s1;
s1 = &scroll;
(...)
GetScrollInfo( hwnd, SB_VERT, s1->si );
我收到转换错误(SCROLLINFO TO LPSCROLLINFO)
知道如何解决这个问题吗?
答案 0 :(得分:1)
您创建了一个水平滚动条,但您正在回调中获取/设置垂直滚动条值。将SB_VERT
更改为SB_HORZ
。
至于编译器错误,您确实传递了SCROLLINFO
,其中SCROLLINFO*
是预期的。
改变这个:
GetScrollInfo( hwnd, SB_VERT, s1->si );
对此:
GetScrollInfo( hwnd, SB_HORZ, &(s1->si) );
或者这个:
GetScrollInfo( hwnd, SB_HORZ, &(scroll.si) );