2013-04-19 37 views
0

我想爲我的項目創建一個不錯的用戶界面。我創建一個窗口,然後創建一個子窗口,這是接口函數的主窗口。所以...我有這兩個窗口,在子窗口中我想添加一個滾動條。我創建了一個滾動條類: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); 

所以滾動被創建,但現在我想以某種方式處理它,所以我這樣做這在我的子窗口回調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)

不知道如何解決這個問題?

回答

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)); 
+0

感謝的人!這有幫助! :)我失去了2小時尋找錯誤並更改我的代碼,答案非常簡單。該死的:/再一次,謝謝! – L3M0L