1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89
|
LRESULT CALLBACK MainWndProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
int save_position_vertical = 0; // Permet de calculer le déplacement de la scrollbar pour y adapter la zone client
int save_position_horizontal = 0; // Permet de calculer le déplacement de la scrollbar pour y adapter la zone client
// La zone client étant la fenêtre principal
switch (uMsg)
{
case WM_CREATE:
{
ZeroMemory(&si, sizeof(SCROLLINFO));
si.cbSize = sizeof(si);
si.fMask = SIF_RANGE | SIF_POS;
si.nMin = 0;
si.nMax = 100;
si.nPos = 0;
SetScrollInfo(hwnd, SB_HORZ, &si, FALSE);
break;
}
case WM_HSCROLL :
GetScrollInfo(hwnd, SB_HORZ, &si);
save_position_horizontal = si.nPos;
switch (LOWORD(wParam))
{
case SB_PAGEUP : si.nPos-=10;
break;
case SB_PAGEDOWN : si.nPos+=10;
break;
case SB_LINEUP : si.nPos-=10;
break;
case SB_LINEDOWN : si.nPos +=10;
break;
case SB_THUMBPOSITION : si.nPos = HIWORD(wParam);
break;
}
si.fMask = SIF_POS;
// permet de mettre la jour les infos sur la scroll bar si besoin est
SetScrollInfo(hwnd,SB_HORZ,&si,TRUE);
// permet de redéssiner la zone client en fonction du déplacement de la scrollbar
ScrollWindow(hwnd,(save_position_horizontal - si.nPos),0 , NULL, NULL);
// permet d'aficher la scrollbar à l'endroit où elle doit l'être
SetScrollPos(hwnd,SB_HORZ,si.nPos,TRUE);
InvalidateRect(hwnd,NULL,TRUE); // pour que le logo soit bien déssiné
break;
case WM_VSCROLL :
GetScrollInfo(hwnd, SB_VERT, &si);
save_position_vertical = si.nPos;
switch (LOWORD(wParam))
{
case SB_PAGEUP : si.nPos-=10;
break;
case SB_PAGEDOWN : si.nPos+=10;
break;
case SB_LINEUP : si.nPos-=10;
break;
case SB_LINEDOWN : si.nPos +=10;
break;
case SB_THUMBPOSITION : si.nPos = HIWORD(wParam);
break;
}
si.fMask = SIF_POS;
// permet de mettre la jour les infos sur la scroll bar si besoin est
SetScrollInfo(hwnd,SB_VERT,&si,TRUE);
// permet de redéssiner la zone client en fonction du déplacement de la scrollbar
ScrollWindow(hwnd,0, (save_position_vertical - si.nPos), NULL, NULL);
// permet d'aficher la scrollbar à l'endroit où elle doit l'être
SetScrollPos(hwnd,SB_VERT,si.nPos,TRUE);
InvalidateRect(hwnd,NULL,TRUE); // pour que le logo soit bien déssiné
break;
... |
Partager