Я хочу создать приятный пользовательский интерфейс для моего проекта. Я создаю окно, затем создаю дочернее окно, которое является основным окном для функций интерфейса. Итак ... У меня эти два окна, в дочернем окне я хочу добавить полосу прокрутки. Я создал класс Scrollbar:Обработка прокрутки WinApi
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();
};
в конструкторе я имею basicaly иметь функцию 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);
}
Незнайка, но по-моему там все нормально ... переменная позиция получает приращение только штраф, но свиток еще в Начальная позиция. Любая идея, что не так? Кроме того, когда я пытаюсь сделать что-то вроде этого:
Scrollbar *s1;
s1 = &scroll;
(...)
GetScrollInfo(hwnd, SB_VERT, s1->si);
Я получаю сообщение об ошибке преобразования (SCROLLINFO TO LPSCROLLINFO)
Любая идея, как это исправить ?
Благодаря человеку! Это помогло! :) Я потерял 2 часа, искал ошибку и менял свой код, и ответ был настолько прост. Черт:/Еще раз, спасибо! – L3M0L