[VC++ MFC] CListCtrl font grootte aanpassen

Pagina: 1
Acties:

  • mvds
  • Registratie: November 2000
  • Laatst online: 24-08 22:05

mvds

Totally awesome!

Topicstarter
Ik ben bezig met een CListCtrl in VC++ 6.0 maar ik kan nergens terugvinden hoe ik de fontgrootte kan aanpassen binnen de lijst. Zelfs sites zoals codeguru en MSDN kunnen me niet verder helpen.

Het enige wat ik kon vinden was dingen zoals SetFont, maar ik zag niet hoe dit het probleem zou kunnen verhelpen.

Kan iemand me hiermee helpen?

  • The End
  • Registratie: Maart 2000
  • Laatst online: 07:23

The End

!Beginning

Je kan de listcontrol aanmaken met LVS_OWNERDRAWFIXED. Dit zorgt ervoor dat er een WM_DRAWITEM message wordt gestuurd als een item in de listcontrol getekend moet worden.
Je krijgt dan als 'OnDrawItem' wordt een DRAWITEMSTRUCT mee met gegevens over welk item het is e.d.
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
CString Text = _T("blablabla");
CDC  CurDC;
RECT Rect;
CurDC.Attach(DrawItemStruct->hDC);
Rect.top       = DrawItemStruct->rcItem.top;
Rect.bottom = DrawItemStruct->rcItem.bottom;
Rect.left = 0; //Even zelf uitrekenen wat de linkercoordinaat is van je item
Rect.rigth = 0; //Even zelf uitrekenen wat de rechtercoordinaat is van je item
if(DrawItemStruct->itemState & ODS_SELECTED)
{ //Blauw (of wat je in windows heb ingesteld) maken als het geselecteerd is
    CurDC.FillSolidRect(&Rect,GetSysColor(COLOR_HIGHLIGHT));
    CurDC.SetTextColor(GetSysColor(COLOR_HIGHLIGHTTEXT));
}
else
{//en weer wit (of wat je in windows heb ingesteld)
    CurDC.FillSolidRect(&Rect,GetSysColor(COLOR_WINDOW));
    CurDC.SetTextColor(RGB(0,0,0));
}
Rect.left += 1; // Inspringen?
CurDC.DrawText(Text,&Rect,DT_LEFT);  // <----- hier wordt de tekst getekend.
CurDC.Detach();


Je moet wel even van tevoren het font veranderen in de DC

[ Voor 4% gewijzigd door The End op 29-01-2003 09:17 ]


  • mvds
  • Registratie: November 2000
  • Laatst online: 24-08 22:05

mvds

Totally awesome!

Topicstarter
Dit stuk code werkt, alleen het veranderen van het font word niet geaccepteerd... Even verder zoeken hoe dat kan, bedankt iig. :)

  • Olaf van der Spek
  • Registratie: September 2000
  • Niet online
Een simpele oplossing:
C++:
1
2
3
4
CFont m_listfont;

if (m_listfont.CreateFont(-11, 0, 0, 0, FW_NORMAL, 0, 0, 0, 0, 0, 0, 0, 0, "Courier New"))
    m_list.SetFont(&m_listfont);

[ Voor 12% gewijzigd door Olaf van der Spek op 29-01-2003 12:32 ]


  • mvds
  • Registratie: November 2000
  • Laatst online: 24-08 22:05

mvds

Totally awesome!

Topicstarter
OlafvdSpek schreef op 29 January 2003 @ 12:31:
Een simpele oplossing:
C++:
1
2
3
4
CFont m_listfont;

if (m_listfont.CreateFont(-11, 0, 0, 0, FW_NORMAL, 0, 0, 0, 0, 0, 0, 0, 0, "Courier New"))
    m_list.SetFont(&m_listfont);
Simpel maar doeltreffend, werkt prima. Thanks. :)

Vreemd, want ik had dit ook al geprobeerd, maar het werkte niet. :/ Zal ik toch wel iets fout gedaan hebben...

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 11:21

.oisyn

Moderator Devschuur®

Demotivational Speaker

Je kan natuurlijk ook gewoon de WM_GETFONT message in je dialog afvangen, die door controls wordt gestuurd bij initialisatie om het huidige font vast te stellen. De control tekent z'n tekst dan met het teruggegeven font

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.

Pagina: 1