Avatar billede benjamin_ Nybegynder
22. februar 2003 - 23:54 Der er 9 kommentarer og
1 løsning

farve i en buttonbox control..

Kan man lave farven om i en buttonbox control i win32api i vc++?


- benjamin
Avatar billede benjamin_ Nybegynder
23. februar 2003 - 11:10 #1
Jeg har fundet ud af følgende..

    COLORREF crColor;
    HBRUSH hbrColor;
    HDC hDC;
    RECT rc;

    crColor = 0x00FF3452;
    hbrColor = CreateSolidBrush( crColor );
    hDC = GetDC( cWindowButtonR->hWnd );
    GetClientRect( cWindowButtonR->hWnd, &rc );
    FillRect( hDC, &rc, hbrColor );

Hvor skal jeg "lægge denne kode" ind ?  under WM_PAINT ??
Er der andre smartere/mere effektiv måde at gøre det på?


- benjamin
Avatar billede tam Nybegynder
24. februar 2003 - 02:54 #2
En buttonbox?
Hvad er det?
Det er ikke en standars Win32 control ;-)

Anyway, normalt skal man sætten control til at være ownerdraw fro at kunne ændre på den. Det der så sker er at du tegner alt i kontrollen i dens Paint function.

benjamin> Er der andre smartere/mere effektiv måde at gøre det på?

Nope...
Avatar billede benjamin_ Nybegynder
24. februar 2003 - 16:48 #3
SKAL man lave den til ownerdraw for at kunne tegne baggrundsfarven i en anden farve ??


- benjamin
Avatar billede benjamin_ Nybegynder
02. marts 2003 - 02:43 #4
Ok..  Har endelig haft tid til at rode med den button dims..
Har lavet den til ownerdraw og lagt tegneriet af dens baggrund ind under:
WM_DRAWITEM

Mit problem er jeg skal ændre farven i denne button alt hvordan mine data er når jeg trykker på en knap.
Den ændrer ikke farven med mindre jeg minimerer billedet og dernæst maximerer det igen...

Nogen der ved hvordan dette skal klares og hvor det skal klares henne ?
tam ?  (svar på dette og du er 100 point rigere)

- benjamin
Avatar billede tam Nybegynder
02. marts 2003 - 02:47 #5
InvalidateRect(Hwnd_Knap, NULL, false);

Den tvinger knappen til at blive opdateret/gentegnet...
Avatar billede tam Nybegynder
02. marts 2003 - 02:48 #6
D.v.s. når du er færdig med at tegne det du vil, kalder du invalidaterect();
Avatar billede benjamin_ Nybegynder
02. marts 2003 - 03:11 #7
Skal der være en BeginPaint og EndPaint inden i WM_DRAWITEM ??


- benjamin
Avatar billede tam Nybegynder
02. marts 2003 - 13:48 #8
Ups, jeg fik vist forklaret det lidt forkert der...

Når nu du kan ændre farven ved at minimere og derefeter maximere dit window har du jo hele koden rigtig pånær en opdatering af window'et.
Når du minimerer og maximerer tvinger du det til at blive gentegnet, det samme kan du gøre med InvalidateRect();

benjamin > Skal der være en BeginPaint og EndPaint inden i WM_DRAWITEM ??

Nej, din lParam er en DRAWITEMSTRUCT som indeholder en handle til et HDC som du kan tegne i. BeginPaint() og EndPaint() må kun bruges ved et WM_PAINT event.
Avatar billede benjamin_ Nybegynder
02. marts 2003 - 21:14 #9
Det her er hvad jeg har i min DRAWITEMSTRUCT...:

    crColor = 0x00ff0243;
    hbrColor = CreateSolidBrush( crColor );
    hDC = GetDC( cWindowButton->hWnd );
    GetClientRect( cWindowButton->hWnd, &rc );
    FillRect( hDC, &rc, hbrColor );

Jeg udfører dette 4 gange med forskellige farver på 4 forskellige buttons..  Men hvis jeg laver den der InvalidateRect bagefter så går den i ged..

Nogen forslag til hvad der kan være galt tam ?


- benjamin
Avatar billede tam Nybegynder
02. marts 2003 - 22:13 #10
Mit problem er at det er ved at være mange år siden jeg har lavet ownerdraw controls...

Prøv evt. at spørge i C++ forumet på http://codeproject.com/ der kan du garanteret få svar i en fart... (Jeg kommer der selv meget)
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