Scrollbar im Dialog
-
hallo,
also ich hab um mein Programm ein wenig zu verkleinern (ich sehe langsam nicht mehr durch
) einen Dialog, der eh nur auf NT-Rechnern lief als Resource neu geschrieben und benutze eine angepasste Version der WinProc. Leider will mein Scrollbar nun nicht mehr scrollen
Wie gesagt, das funzte mal als das Fenster noch mit CreateWindow gebaut war..BOOL CALLBACK ToolProc (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam) { static C_MyButton *Wasser, *Ebene, *Berg; SCROLLINFO ScI; HDC hDC; PAINTSTRUCT ps; HRGN Circle; RECT rect; HBRUSH Brush; int CiRad; char out[10]; switch (message) /* handle the messages */ { case WM_CREATE: BSize = GetDlgItem (hwnd, SCROLL_01); ScI.fMask=SIF_RANGE | SIF_PAGE | SIF_POS; ScI.nMin = 1; ScI.nMax = 100; ScI.nPage = 5; ScI.nPos = 1; SetScrollInfo(BSize,SB_CTL,&ScI,TRUE); break; case WM_DESTROY: delete Wasser; delete Ebene; delete Berg; break; case BUTTON_BERG: Grid->ActTool = 1; break; case BUTTON_EBENE: Grid->ActTool = 2; break; case BUTTON_WASSER: Grid->ActTool = 3; break; /* **** Eventhandler für den Scrollbar ********************************** */ case WM_HSCROLL: switch (LOWORD (wParam)) { case SB_LINEUP: // über Dreieck Grid->ScPos -= 1; if (Grid->ScPos < 1) Grid->ScPos = 1; break; case SB_LINEDOWN:// über Dreieck Grid->ScPos += 1; if (Grid->ScPos > 100) Grid->ScPos = 100; break; case SB_PAGEUP: // über Klick in Balken Grid->ScPos -= 10; if (Grid->ScPos < 1) Grid->ScPos = 1; break; case SB_PAGEDOWN: // über Klick in Balken Grid->ScPos += 10; if (Grid->ScPos > 100) Grid->ScPos = 100; break; case SB_THUMBTRACK:// über ziehen des Balken Grid->ScPos = HIWORD(wParam); break; default: break; } ScI.fMask= SIF_POS; ScI.nPos = Grid->ScPos; SetScrollInfo(hwnd,SB_CTL,&ScI,TRUE); // SetScrollPos(BSize, SB_CTL, Grid->ScPos, TRUE); InvalidateRect(hwnd,NULL,TRUE); break; /* **** ****************************** ********************************** */ /* **** Neuzeichnen des Pinselkreises in aktueller Größe etc. *********** */ case WM_PAINT: hDC = BeginPaint(hwnd,&ps); /* zirkel zeichnen */ CiRad = (Grid->ScPos/4); Brush = CreateSolidBrush(BLACK_BRUSH); Circle = CreateRectRgn(29-CiRad,100-CiRad,29+CiRad,100+CiRad); FillRgn(hDC, Circle, Brush); /* Text ausgeben */ sprintf(out,"%i", Grid->ScPos); rect.left = 0; rect.top = 130, rect.bottom = 150; rect.right = 58; DrawText(hDC,(LPSTR) out, strlen(out), &rect, DT_CENTER); /* aufräumen */ EndPaint(hwnd, &ps); DeleteObject (Brush); DeleteObject (Circle); DeleteObject (hDC); break; /* **** ***************************************************** *********** */ default: /* for messages that we don't deal with */ return FALSE;//DefWindowProc (hwnd, message, wParam, lParam); } return TRUE; }
hier auch nochmal die Resource:
DD_TOOLBOX DIALOG DISCARDABLE 100,100, 40, 100 STYLE WS_POPUP|WS_CAPTION|WS_VISIBLE CAPTION "Tools" FONT 8, "Helv" BEGIN PUSHBUTTON "Berg", BUTTON_BERG, 0, 0,40,12 PUSHBUTTON "Ebene", BUTTON_EBENE, 0,12,40,12 PUSHBUTTON "Wasser",BUTTON_WASSER, 0,24,40,12 SCROLLBAR SCROLL_01, 0,36,40, 8, SBS_HORZ END
[ Dieser Beitrag wurde am 04.12.2002 um 19:00 Uhr von DocJunioR editiert. ]