Avatar billede narrr Nybegynder
08. november 2004 - 09:54 Der 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.
Avatar billede sovsekoder Nybegynder
08. november 2004 - 10:05 #1
kan du ikke lave den owner drawn. og så blitte et billede ind som det først i paint, hvorefter du kalder base-klassens paint? noget i den stil
Avatar billede jpk Nybegynder
08. november 2004 - 10:13 #2
Eller blitte billedet i WM_ERASEBKGND...
Avatar billede narrr Nybegynder
08. november 2004 - 12:34 #3
Hvordan laver man en editbox ownerdraw?

jpk > jeg har prøvet at blitte billedet i erasebkgnd, men så kommer det til at se galt ud når man scroller.
Avatar billede nlf Nybegynder
08. november 2004 - 12:44 #4
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...
Avatar billede narrr Nybegynder
08. november 2004 - 12:57 #5
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 :(
Avatar billede jpk Nybegynder
08. november 2004 - 13:37 #6
Hvilket problem oplever du når man scroller..?
Avatar billede narrr Nybegynder
08. november 2004 - 16:13 #7
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.
Avatar billede bertelbrander Novice
08. november 2004 - 21:40 #8
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.
Avatar billede narrr Nybegynder
08. november 2004 - 22:37 #9
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?
Avatar billede narrr Nybegynder
08. november 2004 - 22:38 #10
Det skal nævnes at jeg har sat SetBkMode(hdc, TRANSPARENT) for at tekstens baggrundsfarve ikke skal overskrive baggrunden.
Avatar billede jpk Nybegynder
09. november 2004 - 10:07 #11
Er det WM_ERASEBKGND for edit-kontrollen og IKKE for dialogen du bruger?
Avatar billede narrr Nybegynder
09. november 2004 - 16:48 #12
jep, den er subclassed
Avatar billede narrr Nybegynder
13. august 2005 - 16:26 #13
Jeg lukker her. Problemet blev aldrig rigtig løst, måske kan det slet ikke lade sig gøre.
Avatar billede Ny bruger Nybegynder

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.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester