Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

[C++][WinApi] ScrollBar Poziomy

Ostatnio zmodyfikowano 2013-10-17 11:57
Autor Wiadomość
pawellek1995
Temat założony przez niniejszego użytkownika
[C++][WinApi] ScrollBar Poziomy
» 2013-10-11 14:10:44
Witam,
Napisałem kod na obsługę poziomego ScrollBara kompiluje się ale nie działa nie wiem w czym problem gdy przesuwam to nic się nie dzieje. Proszę  o pomoc o to kawałek kodu:
C/C++
case WS_HSCROLL: {
   
   
    ZeroMemory( & si, sizeof( si ) );
    si.cbSize = sizeof( SCROLLINFO );
    si.fMask = SIF_POS | SIF_PAGE | SIF_TRACKPOS;
    GetScrollInfo( hwnd, SB_HORZ, & si );
   
    int pozycja = si.nPos;
   
    switch( LOWORD( wParam ) ) {
    case SB_LEFT:
        pozycja = 0;
        break;
    case SB_RIGHT:
        pozycja = 1000;
        break;
    case SB_LINELEFT:
        if( pozycja > 0 ) {
            pozycja--;
        }
        break;
    case SB_LINERIGHT:
        if( pozycja < 1000 ) {
            pozycja++;
        }
        break;
    case SB_PAGELEFT:
        pozycja -= si.nPage;
        if( pozycja < 0 ) {
            pozycja = 0;
        }
        break;
    case SB_PAGERIGHT:
        pozycja += si.nPage;
        if( pozycja > 1000 ) {
            pozycja = 1000;
        }
        break;
    case SB_THUMBPOSITION:
        pozycja = si.nTrackPos;
        break;
    case SB_THUMBTRACK:
        pozycja = si.nTrackPos;
        break;
    }
   
    int dy = -( pozycja - si.nPos );
    ScrollWindowEx( hwnd, 0, dy,( CONST RECT * ) NULL,( CONST RECT * ) NULL,( HRGN ) NULL,( LPRECT ) NULL, SW_SCROLLCHILDREN | SW_INVALIDATE | SW_ERASE );
    UpdateWindow( hwnd );
   
    ZeroMemory( & si, sizeof( si ) );
    si.cbSize = sizeof( SCROLLINFO );
    si.fMask = SIF_POS;
    si.nPos = pozycja;
   
    SetScrollInfo( hwnd, SB_HORZ, & si, TRUE );
}
break;
P-93510
pawellek1995
Temat założony przez niniejszego użytkownika
» 2013-10-11 15:05:48
Napisałem inny sposób przesuwania okna za pomocą strzałek gdyby ktoś potrzebował zamieszczam kod:
C/C++
case WM_KEYDOWN:
switch(( int ) wParam )
{
case VK_RIGHT:
    if( HIBYTE( GetKeyState( VK_CONTROL ) ) )
    {
        ScrollWindowEx( hwnd, - 10, 0,( CONST RECT * ) NULL,( CONST RECT * ) NULL,( HRGN ) NULL,( LPRECT ) NULL, SW_SCROLLCHILDREN | SW_INVALIDATE | SW_ERASE );
        UpdateWindow( hwnd );
       
    }
    else
    {
        ScrollWindowEx( hwnd, - 1, 0,( CONST RECT * ) NULL,( CONST RECT * ) NULL,( HRGN ) NULL,( LPRECT ) NULL, SW_SCROLLCHILDREN | SW_INVALIDATE | SW_ERASE );
        UpdateWindow( hwnd );
       
    }
    break;
case VK_LEFT:
    if( HIBYTE( GetKeyState( VK_CONTROL ) ) )
    {
        ScrollWindowEx( hwnd, 10, 0,( CONST RECT * ) NULL,( CONST RECT * ) NULL,( HRGN ) NULL,( LPRECT ) NULL, SW_SCROLLCHILDREN | SW_INVALIDATE | SW_ERASE );
        UpdateWindow( hwnd );
       
    }
    else
    {
        ScrollWindowEx( hwnd, 1, 0,( CONST RECT * ) NULL,( CONST RECT * ) NULL,( HRGN ) NULL,( LPRECT ) NULL, SW_SCROLLCHILDREN | SW_INVALIDATE | SW_ERASE );
        UpdateWindow( hwnd );
       
    }
   
   
    break;
   
case VK_DOWN:
    if( HIBYTE( GetKeyState( VK_CONTROL ) ) )
    {
        ScrollWindowEx( hwnd, 0, - 10,( CONST RECT * ) NULL,( CONST RECT * ) NULL,( HRGN ) NULL,( LPRECT ) NULL, SW_SCROLLCHILDREN | SW_INVALIDATE | SW_ERASE );
        UpdateWindow( hwnd );
       
    }
    else
    {
        ScrollWindowEx( hwnd, 0, - 1,( CONST RECT * ) NULL,( CONST RECT * ) NULL,( HRGN ) NULL,( LPRECT ) NULL, SW_SCROLLCHILDREN | SW_INVALIDATE | SW_ERASE );
        UpdateWindow( hwnd );
       
    }
    break;
case VK_UP:
    if( HIBYTE( GetKeyState( VK_CONTROL ) ) )
    {
        ScrollWindowEx( hwnd, 0, 10,( CONST RECT * ) NULL,( CONST RECT * ) NULL,( HRGN ) NULL,( LPRECT ) NULL, SW_SCROLLCHILDREN | SW_INVALIDATE | SW_ERASE );
        UpdateWindow( hwnd );
       
    }
    else
    {
        ScrollWindowEx( hwnd, 0, 1,( CONST RECT * ) NULL,( CONST RECT * ) NULL,( HRGN ) NULL,( LPRECT ) NULL, SW_SCROLLCHILDREN | SW_INVALIDATE | SW_ERASE );
        UpdateWindow( hwnd );
       
    }
    break;
}
//InvalidateRect( hwnd, NULL, TRUE );
break;

Gdyby ktoś pomógł w napisaniu obsługi scrollbara poziomego i znalazł błąd byłbym wdzięczny. Jeśli nie temat zamknę.
P-93511
DejaVu
» 2013-10-17 11:57:38
P-93867
« 1 »
  Strona 1 z 1