salut,
Je vais essayer de simplifier le problème.
Sur une source MS (http://support.microsoft.com/default.aspx?scid=kb;EN-US;q248496), j'ai trouvé un morceau de code me permettant, dans une TreeView, de desiner certaines lignes en gras (en l'occurrence, il s'agit ici des lignes ayant le focus)
Voici le morceau de code permettant de faire ça:
Ce morceau de code est en fait exécuté à chaque fois que Windows repaint chacune des lignes de la TreeView (juste avant que la ligne soit repainte en fait => CDDS_ITEMPREPAINT)
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 { HFONT hFont = (HFONT) ::SendMessage(hWndTreeView, WM_GETFONT, 0, 0); LOGFONT lf = { 0 }; GetObject(hFont, sizeof(LOGFONT), &lf); lf.lfWeight |= FW_BOLD; //lf.lfHeight = 20; HFONT hFontBold = CreateFontIndirect(&lf); HFONT hOldFont = (HFONT) SelectObject(pNMTVCD->nmcd.hdc, hFontBold); DeleteObject(hFontBold); }
Donc, ici, le programme extrait la fonte du controle, lui applique un effet gras, et réapplique la fonte au DC du controle.
Mais ce que je ne comprends pas, c'est ce DeleteObject(hFontBold); alors que la fonte est sélectionnée dans le DC du TreeView. Comment est ce possible? Ca me parait très bizarre (appels asynchrones?)
Partager