08. november 2004 - 09:54Der er
12 kommentarer og 1 løsning
Billede som baggrund i en editbox
Hejsa. Er der nogen der kan fortælle mig hvordan jeg sætter et billede som baggrund i en editbox, eller bare gør den gennemsigtig så man kan se et billede der er bag den?
Jeg har prøvet at subclasse en Edit control og håndtere WM_ERASEBKGND og sætte tekstens bagrund til at være transparent(SetBkMode), men så bliver der et problem når man scroller.
Det jeg har i tankerne er noget lignende det man kan gøre i Msn messenger, altså sætte et billede ind som man kan se gennem editboxen.
Man kan lave den ownerdrawn ved SS_OWNERDRAW for statics, men jeg tror også det virker for edits, for der er ingen specifikke ownerdraw styles for editboxes i Win32 hjælpen...
Hvis jeg laver en editbox sådan her: case WM_CREATE: { CreateWindow("EDIT", "", ES_READONLY|ES_MULTILINE|WS_VISIBLE|WS_CHILD|SS_OWNERDRAW, 10, 10, 100,100,hwnd, (HMENU)ID_EDIT, 0, 0); break; }
Så bliver teksten bare centreret. Jeg modtager heller ikke WM_DRAWITEM: case WM_DRAWITEM: { MessageBox(0,"hej",0,0); break; } ovenstående giver intet resultat :(
Hvis jeg bare blitter i ERASEBKGND, så scroller den også min baggrund, hvilket "tværer den ud", hvis man kan sige det. Hvis jeg så kalder InvalidateRect i WM_VSCROLL, efter at den har kørt sit scroll, så "hopper" baggrunden 10 pixels ned(hvis man scroller den vej), og hopper så tilbage igen pga. min invalidaterect. Jeg har prøvet at forhindre dette ved at sige LockWindowUpdate, så scroll ikke kan opdatere vinduet, men så begynder programmet at tage op til 100% cpu når man scroller.
Du kunne kikke på WM_CTLCOLOREDIT, den skal returnere en HBRUSH som vil blive brugt til at tegne baggrunden. Du kan lave denne brush med CreateDIBPatternBrushPt.
Det virker faktisk meget godt(jeg lavede Brushen med CreatePatternBrush, håber det er ok). Jeg har dog stadig det problem, at når man scroller så står baggrunden og hopper frem og tilbage. Kan det ikke skyldes at WM_VSCROLL bruger ScrollWindow el. lign?
Jeg lukker her. Problemet blev aldrig rigtig løst, måske kan det slet ikke lade sig gøre.
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.