Toon posts:

[C++/Win32] textlabel background

Pagina: 1
Acties:

Verwijderd

Topicstarter
Ik ben sinds gisteren bezig met Win32 programming in C++ (zonder MFC, gewoon API). Maar nu stuit ik dus op een probleem. Ik ben al anderhalf uur op zoek naar een manier om de achtergrondkleur van mijn text label (STATIC window) uit te zetten (transparant zou ook goed zijn ;)) maar ik krijg het met geen manier voor elkaar. Ik heb alle SS_ dStyle properties voor CreateWindow() geprobeerd maar geen van alle geeft het gewenste resultaat.

Iemand die mij een klein duwtje in de goede richting kan geven? :)

  • curry684
  • Registratie: Juni 2000
  • Laatst online: 12-05 22:23

curry684

left part of the evil twins

Windows zijn niet transparant, dus wat je zoekt kan niet op deze manier. Een static window is daar ook niet voor bedoeld, je moet gewoon in de WM_PAINT handler van de parent direct met DrawText op zijn DC tekenen.

Voordat ik trouwens commentaar krijg: ja, door WS_EX_TRANSPARENT te enabled kan het wellicht 'enigszins' werken, maar dat is dodgy en vragen om tekenfouten.

[ Voor 27% gewijzigd door curry684 op 22-06-2004 17:05 ]

Professionele website nodig?


Verwijderd

Topicstarter
Ik gebruik nu DrawText() om direct op te HDC te `schrijven', maar ik blijf last hebben van een witte achtergrond. Ik gebruik de volgende code:

C++:
1
2
3
4
5
6
7
8
9
case WM_PAINT:
    hdc = BeginPaint (hWnd, &ps);

    GetClientRect(hWnd, &rVierkant);

    DrawText(hdc, "Name", -1, &rVierkant, DT_SINGLELINE | DT_CENTER | DT_VCENTER);

    EndPaint (hWnd, &ps);
break;


(rVierkant is een RECT)

  • curry684
  • Registratie: Juni 2000
  • Laatst online: 12-05 22:23

curry684

left part of the evil twins

Selecteer een lege brush (Stock Object HOLLOW_BRUSH) in je DC alvorens te tekenen.

Kunt trouwens voor labels ook beter ExtTextOut gebruiken, die is een stuk sneller dan DrawText... pardon dat ik die niet eerst noemde :)

Professionele website nodig?


  • madwizard
  • Registratie: Juli 2002
  • Laatst online: 26-10-2024

madwizard

Missionary to the word of ska

Volgens mij helpt een null/hollow brush niet bij DrawText, maar moet je SetBkMode(hdc, TRANSPARENT) gebruiken. Overigens kan het wel met een static label, je moet dan alleen even een WM_CTLCOLOR* message afhandelen:
C++:
1
2
3
case WM_CTLCOLORSTATIC:
    SetBkMode((HDC)wParam, TRANSPARENT);
    return (LRESULT)GetStockObject(NULL_BRUSH);

www.madwizard.org


  • curry684
  • Registratie: Juni 2000
  • Laatst online: 12-05 22:23

curry684

left part of the evil twins

Dan nog is ExtTextOut veel sneller en correcter :)

Buiten Dialog Boxes hoor je statics in principe niet te gebruiken tenzij om controls te groupen ('panels').

Professionele website nodig?


  • madwizard
  • Registratie: Juli 2002
  • Laatst online: 26-10-2024

madwizard

Missionary to the word of ska

curry684 schreef op 22 juni 2004 @ 17:49:
Dan nog is ExtTextOut veel sneller en correcter :)

Buiten Dialog Boxes hoor je statics in principe niet te gebruiken tenzij om controls te groupen ('panels').
Dat is wel waar maar misschien heeft sh0wtime ook wel een dialog met statics, en wil hij alleen de achtergrond van de dialog een andere kleur of afbeelding geven (los van het feit dat dat meestal een slecht idee is).

Maar inderdaad, zodra je controls gaat gebruiken om tekst te 'tekenen' ben je fout bezig en moet je snel een GDI functie gaan gebruiken.

www.madwizard.org

Pagina: 1