Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (WinAPI, Konsole) » Scrollbar Problem

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 <
000
22.03.2005, 18:52 Uhr
A-l-e-x



Nach langen suchen von Scrollbar-Beispielen, bin ich so weit:


C++:
SCROLLINFO Scroll;

Scroll.cbSize = sizeof(SCROLLINFO);
Scroll.fMask = SIF_ALL;
Scroll.nMin = 0;
Scroll.nMax = 10;
Scroll.nPage = 1;
Scroll.nPos = 5;
Scroll.nTrackPos = 5;    // Bin mir nicht sicher





C++:
switch(wParam)
{
case SB_LINEUP:
    Scroll.nPos--;
case SB_LINEDOWN:
    Scroll.nPos++;
case SB_PAGEUP:
    Scroll.nPos -= 2;
case SB_PAGEDOWN:
    Scroll.nPos +=2;
}



Mein Problem: Wenn der Benutzer das Ding in der Mitte bewegt, will ich wissen, wo er es hingetan hat. Wie bekommt man das raus?

PS: Ich weis, dass der Code noch nicht optimiert ist.

mfg A-l-e-x
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
22.03.2005, 19:37 Uhr
Oliver
S2-Pixelgeneral



C++:
Scroll.cbSize = sizeof(SCROLLINFO);
Scroll.fMask = SIF_ALL;
Scroll.nMin = 0;
Scroll.nMax = 10;
Scroll.nPage = 1;
Scroll.nPos = 5;
Scroll.nTrackPos = 0;    // 0 oder weglassen, nur bei GetScrollInfo relevant




C++:
switch(wParam)
{
case SB_LINEUP:
    Scroll.nPos--; break; // break nicht vergessen ;-)
case SB_LINEDOWN:
    Scroll.nPos++; break;
case SB_PAGEUP:
    Scroll.nPos -= 2; break;
case SB_PAGEDOWN:
    Scroll.nPos +=2; break;
case SB_THUMBTRACK:
    Scroll.nPos= Scroll.nTrackPos; // nTrackPos ist die aktuelle "TrackPosition", also die, wohin der dein Ding geschoben hat
   break;
}

SetScrollInfo(...)


--
Demokratie ist die Diktatur der Mehrheit.

www.siedler25.org/ ( Siedler2 - Remake )
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
23.03.2005, 11:33 Uhr
A-l-e-x



Irgendwie wird nTrackPos nicht aktuallisiert d.h. ich hab den Vert, denn ich am Anfang hatte. Wie mach ich das?

mfg A-lex
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
23.03.2005, 11:57 Uhr
Oliver
S2-Pixelgeneral


Hmm, hast du das so gemacht wie oben? Dann sollte nTrackPos den neuen Wert erhalten und den musst du nPos zuweisen, wenn deine Marke nicht zurückschnippen soll. Also bei mir geht's so jedenfalls.

Ich hab's z.B. so:


C++:
case WM_VSCROLL:

        int tempPos;
        si.cbSize=sizeof(si);
        si.fMask=SIF_ALL;
        GetScrollInfo(hWnd,SB_VERT,&si);
        tempPos=si.nPos;

        switch(LOWORD(wParam))
        {
        case SB_THUMBTRACK:
            si.nPos=si.nTrackPos;
            break;
        case SB_LINEUP:
            --si.nPos;
            break;
        case SB_LINEDOWN:
            ++si.nPos;
            break;
        case SB_PAGEUP:
            si.nPos-=si.nPage;
            break;
        case SB_PAGEDOWN:
            si.nPos+=si.nPage;
            break;
        }

        if(tempPos!=si.nPos)
        {
            si.fMask=SIF_POS;
            SetScrollInfo(hWnd,SB_VERT,&si,1);
            InvalidateRect(hWnd,NULL,0);
            UpdateWindow(hWnd);
        }

        return 0;


--
Demokratie ist die Diktatur der Mehrheit.

www.siedler25.org/ ( Siedler2 - Remake )
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
23.03.2005, 13:34 Uhr
A-l-e-x



Huch, ich seh ein Missverständnis. Also... Ich will das mit einer Resource machen, nicht dem Dialog ein Scrollbalken verschaffen.
Jedenfalls klappt es bei dem Dialog, bloß wie gesagt, war es nicht, was ich wollte.

Kann mir jemand sagen, wie ich das mache, oder wie ich beim zweiten Fall den Scrollbalken verschiebe?

mfg A-l-e-x
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
005
23.03.2005, 14:09 Uhr
Oliver
S2-Pixelgeneral


Müsste eigentlich genauso gehen, bloß:


C++:
SetScrollInfo(hCtrl,SB_CTL,&si);
GetScrollInfo(hCtrl,SB_CTL,&si);

// ---

case WM_VSCROLL: /* bzw. HSCROLL für horizontale Scrollbars */

// dasselbe, bloß HWND(lParam) liefert dir den Handle zu deiner Scrollbar, die betätigt wurde


--
Demokratie ist die Diktatur der Mehrheit.

www.siedler25.org/ ( Siedler2 - Remake )
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
006
23.03.2005, 17:08 Uhr
A-l-e-x



*lol* es geht!
Naja, jedenfalls in C++. Ich wollte das in Assembler nachprogen... Eigentlich sollte es gleich sein...


Code:
; mache es in MASM
.data
Scroll            SCROLLINFO <sizeof(SCROLLINFO),SIF_ALL,0,10,1,5,5>

.data?
pos            dd ?

.code
...
mov eax,uMsg
.IF eax==WM_INITDIALOG        
    invoke GetDlgItem,hWnd,IDC_SCROLL_TYP
    invoke SetScrollInfo,eax,SB_CTL,addr Scroll,TRUE

.ELSEIF eax==WM_VSCROLL
    mov eax,sizeof(SCROLLINFO)
    mov Scroll.cbSize,eax
    mov Scroll.fMask,SIF_ALL
    invoke GetDlgItem,hWnd,IDC_SCROLL_TYP
    invoke GetScrollInfo,eax,SB_CTL,addr Scroll
    mov eax,Scroll.nPos
    mov pos,eax

    mov eax,wParam
    .IF eax==SB_THUMBTRACK
        mov eax,Scroll.nTrackPos
        mov Scroll.nPos,eax
    .ELSEIF eax==SB_LINEUP
        sub Scroll.nPos,1
    .ELSEIF eax==SB_LINEDOWN
        add Scroll.nPos,1
    .ELSEIF eax==SB_PAGEUP
        mov eax,Scroll.nPage
        sub Scroll.nPos,eax
    .ELSEIF eax==SB_PAGEDOWN
        mov eax,Scroll.nPage
        add Scroll.nPos,eax
    .ENDIF

    mov eax,pos
    .IF eax!=Scroll.nPos
        mov Scroll.fMask,SIF_POS
        invoke GetDlgItem,hWnd,IDC_SCROLL_TYP
        invoke SetScrollInfo,eax,SB_CTL,addr Scroll,TRUE
    .ENDIF
.ENDIF



Jedenfalls hab ich da Probleme bei verschieben des Dinges in der Mitte: Er reagiert nur wenn man es an die Stelle 0 patziert.

PS: Hab nichts dagegen, wenn man es jetzt ins Assembler-Forum verschiebt, denn die meisten hier würden sich überfordert fühlen.

mfg A-l-e-x

Dieser Post wurde am 23.03.2005 um 17:09 Uhr von A-l-e-x editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
007
25.03.2005, 18:30 Uhr
A-l-e-x



Hat sich erlädigt. Hab einen anderen Weg gefunden es hinzubekommen.

mfg A-l-e-x
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ C / C++ (WinAPI, Konsole) ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: