Skocz do zawartości

scroll bar -podstawa


Beta

Recommended Posts

witam

Stworzylem sobie okienko dialogowe za pomoca Dialogbox wrzucilem na nie scrollbox i powstal mi maly zgrzyt moj scroll nie chce sie poruszyc powiedzcie mi dlaczego prosze.
Moj proble jest czysto ksiazkowy i nie moge znalez w nim bledu.
podaje fragment kodu :

BOOL CALLBACK dlg_menu (HWND hDlg, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
        HWND hscroll;
        static int pos;
switch (uMsg)
       {
               
        case WM_INITDIALOG:
        hscroll=GetDlgItem(hDlg,IDC_SCROLL);
         
//w tym miejscu nawet nie przestawia mi sie pozycji scrola
//ktory dla proby mial byc mniej wiecej na srodku

        if(SetScrollRange(hscroll,SB_VERT,1,4,false)==0)
             MessageBox(NULL,"no range","",NULL);
        if(SetScrollPos(hscroll,SB_VERT,2,false)==0)
            MessageBox(NULL,"no pos","",NULL);
          pos=2;      //GetScrollPos(hscroll,SB_VERT);
              return true;

        case WM_VSCROLL:
         hscroll=(HWND)lParam;
        switch(LOWORD(wParam))
        {
                case SB_LINEDOWN:
                pos=min(1,pos-1);
                break;
                case SB_LINEUP:
                pos=max(4,pos+1);
                break;
                case SB_THUMBPOSITION:
                case SB_THUMBTRACK:
                pos=HIWORD(wParam);
                break;
                default:return false                                }
                               SetScrollPos(hscroll,SB_VERT,pos,false);
                return true;
                   
       }
}
Link do komentarza
Udostępnij na innych stronach

Witam

niestety ta poprawk nic nie zmienila.
moim problem to brak komunikaty WM_VSCROLL zauwarzylem taka dziwna zaleznosc. Jesli zaslepie ten frgmen kodu to moje okno otrzymuje komunikat VM_VSCROLL jesli tego nie zrobieokno dialogowe nie otrzymuje tego komunikatu. Dlaczego tak jest ?
Prosze niech ktos wczyta sie w ten kod ja nic w nim nie widze.

/*
if(SetScrollRange(hscroll,SB_VERT,1,4,false)==0) 
        MessageBox(NULL,"no range","",NULL); 
   if(SetScrollPos(hscroll,SB_VERT,2,false)==0) 
       MessageBox(NULL,"no pos","",NULL); 
*/
Link do komentarza
Udostępnij na innych stronach

/*
if(SetScrollRange(hscroll,SB_VERT,1,4,false)==0)
MessageBox(NULL,"no range","",NULL);
if(SetScrollPos(hscroll,SB_VERT,2,false)==0)
MessageBox(NULL,"no pos","",NULL);
*/

Funkcje SetScrollRange i SetScrollPos przyjmują jako pierwszy parametr uchwyt okna ktore ma te paski przewijania a nie uchwyty paskow przewijania.

Podobnie tutaj

case WM_VSCROLL:
hscroll=(HWND)lParam;
switch(LOWORD(wParam))

lParam to uchwyt kontrolki.

Dla f. SetScrollRange i ...Pos podawaj uchwycik okna rodzica dla tych paskow - u Ciebie - hDlg.

Zainteresuj sie SetScrollInfo() ma wieksze mozliwoscie przez co ladniej wyglada.

Powodzenia

Link do komentarza
Udostępnij na innych stronach

  • 1 month later...

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Gość
Odpowiedz...

×   Wkleiłeś zawartość bez formatowania.   Usuń formatowanie

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Utwórz nowe...