Scrollbar Problem
-
Also ich hab hier einen Code, der nicht so richtig funktioniert:
; 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
Da regiert der Scrollbalken bei SB_THUMBTRACK nicht so richtig. Wo hab ich hier 'nen Fehler?
Bitte nicht in WinApi-Forum verschieben, denn ich hab hier tatsächlich ein Assembler Problem. Beweis:
SCROLLINFO si; ... case WM_INITDIALOG: si.cbSize = sizeof(SCROLLINFO); si.fMask = SIF_ALL; si.nMin = 0; si.nMax = 10; si.nPage = 1; si.nPos = 5; si.nTrackPos = 0; // 0 oder weglassen, nur bei GetScrollInfo relevant SetScrollInfo(GetDlgItem(hWnd,IDC_SCROLL),SB_CTL,&si,TRUE); break; case WM_VSCROLL: int tempPos; si.cbSize=sizeof(SCROLLINFO); si.fMask=SIF_ALL; GetScrollInfo(GetDlgItem(hWnd,IDC_SCROLL),SB_CTL,&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(GetDlgItem(hWnd,IDC_SCROLL),SB_CTL,&si,TRUE); } break;
Eigentlich sollte es das selbe sein.
mfg A-lex
-
durch den Spammer bin ich zufällig wieder auf den Thread gestoßen:
du machst imho hier einen Denkfehler/Flüchtigkeitsfehler:switch(LOWORD(wParam)) { case SB_THUMBTRACK:
das funktioniert, ja.
mov eax,wParam .IF eax==SB_THUMBTRACK mov eax,Scroll.nTrackPos mov Scroll.nPos,eax
warum versuchst du aber hier direkt den ganzen wParam zu vergleichen
? Und nicht etwa nur den LOWORD (siehe dafür nur den AX Register-Teil).Damit vergleichst du SB_THUMBTRACK mit dem kompletten wParam und das kann ja net klappen