Bonjour,
Je souhaiterai modifier la couleur d'un "bouton" de style "BS_GROUPBOX" qui apparament utilise la couleur "WINDOW_FRAME" (???)
Bonjour,
Je souhaiterai modifier la couleur d'un "bouton" de style "BS_GROUPBOX" qui apparament utilise la couleur "WINDOW_FRAME" (???)
Renseigne toi sur l'"owner drawing".
Le style "BS_OWNERDRAW" ?Envoyé par Aurelien.Regat-Barrel
Si oui il faut traiter le message WM_DRAWITEM, donc cela revient à le redessiner , ou penses tu à autre chose ?
Non, avec WM_CTLCOLORBTN qui te permet de modifier le HDC utilisé et surtout de renvoyer la brosse à utiliser. Je crois que ça ne marche pas pour les pushbutton, mais tu es chanceux tu utilises un groupbox.
Par contre je ne me souviens plus s'il faut ou non le style BS_OWNERDRAW pour recevoir cette notification.
Visiblement il n'intercepte pas le message WM_CTLCOLORBTN et avec le style BS_OWNERDRAW il ne dessine plus rien !Envoyé par Aurelien.Regat-Barrel
Je vais essayer avec BS_OWNERDRAW et en interceptant le message WM_DRAWITEM et la structure passée (DRAWITEMSTRUCT) ...
WM_CTLCOLORBTN ne doit pas être traité n'importe comment, montre comment tu fais.
Voilà ma procedure, mais elle est en cours de mise au point ... :Envoyé par Aurelien.Regat-Barrel
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
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97 BOOL CALLBACK PrefDlgProc (HWND hDlg, UINT message, UINT wParam, LONG lParam) { INITCOMMONCONTROLSEX icex; TCITEM tie; NONCLIENTMETRICS nct; RECT rect; #define lpnmHDR ((NMHDR *)lParam) static HWND hwnd; static HWND hParent; static HWND hwndTab; //static HWND hTab[2]; HFONT hFont; static HICON hicon; static HBRUSH hBrush3; static COLORREF RGBMODIF = RGB(0, 160, 0); static int i, iPage; char onglet[2][20] = {"Onglet 1", "Onglet 2" }; char tmp[10]; DWORD dwDlgBase = GetDialogBaseUnits(); int cxMargin = LOWORD(dwDlgBase) / 4; int cyMargin = HIWORD(dwDlgBase) / 8; switch (message) { case WM_INITDIALOG: hBrush3 = CreateSolidBrush (RGBMODIF); nct.cbSize = sizeof(NONCLIENTMETRICS); SystemParametersInfo(SPI_GETNONCLIENTMETRICS, sizeof(NONCLIENTMETRICS), &nct, 0); hFont = CreateFontIndirect(&nct.lfMenuFont); icex.dwSize = sizeof(icex); icex.dwICC = ICC_TAB_CLASSES; hwndTab = GetDlgItem (hDlg, IDC_TAB1); InitCommonControlsEx(&icex); GetClientRect(hDlg, &rect); SendMessage (hwndTab, WM_SETFONT, (UINT)hFont, 0); tie.mask = TCIF_TEXT; tie.pszText = onglet[0]; TabCtrl_InsertItem(hwndTab, 0, &tie); tie.pszText = onglet[1]; TabCtrl_InsertItem(hwndTab, 1, &tie); //Static Maitre Page 1 hTab[0] = CreateWindowEx(WS_EX_LEFT|WS_EX_CLIENTEDGE, "static", "", WS_CHILD | WS_VISIBLE, 0, 24, rect.right-rect.left, rect.bottom-rect.top, hwndTab, NULL, hInst, NULL); lpfnWndProc = (FARPROC)SetWindowLong(hTab[0],GWL_WNDPROC, (DWORD) ProcPage1); hTab[10] = CreateWindow("Button", "", WS_VISIBLE|WS_CHILD|BS_GROUPBOX, // |BS_OWNERDRAW , 25,50,500,150, hTab[0], NULL, hInst, NULL); SendMessage (hTab[10], WM_SETFONT, (UINT)hFont, 0); SetWindowText (hTab[10], "La Banque sur Internet ..."); hTab[11] = CreateWindowEx(WS_EX_LEFT|WS_EX_CLIENTEDGE, "static", "", WS_CHILD | WS_VISIBLE, 90, 80, 20, 18, hTab[0], NULL, hInst, NULL); SendMessage (hTab[11], WM_SETFONT, (UINT)hFont, 0); SetWindowText (hTab[11], "Url"); hTab[12] = CreateWindowEx(WS_EX_LEFT|WS_EX_CLIENTEDGE, "edit", "", WS_CHILD | WS_VISIBLE, 115, 80, 380, 18, hTab[0], NULL, hInst, NULL); SendMessage (hTab[12], WM_SETFONT, (UINT)hFont, 0); //Static Maitre Page 2 hTab[1] = CreateWindowEx(WS_EX_LEFT|WS_EX_CLIENTEDGE, "Edit", "", WS_CHILD, 55, 60, 100, 18, hwndTab, NULL, hInst, NULL); return TRUE ; /* case WM_CTLCOLORBTN : if ((HWND)lParam == hTab[10]) { SetBkColor ((HDC)wParam, RGBMODIF); return ((DWORD) hBrush3); } return 0; */ case WM_NOTIFY : if (lpnmHDR->code == TCN_SELCHANGE) { iPage = TabCtrl_GetCurSel(hwndTab); for (i = 0; i < N_PAGES; i++) ShowWindow(hTab[i], (i==iPage)? SW_SHOW : SW_HIDE); } return 0; case WM_COMMAND: switch (wParam) { case IDOK: case IDCANCEL: DestroyWindow(hTab[0]); DestroyWindow(hTab[1]); EndDialog (hDlg, 0) ; return TRUE ; } break ; } return FALSE ; }
Je me demande si le groupbox n'utilise pas simplement la couleur de fond de son parent. Je ne crois pas que l'on puisse modifier le fond d'un groupbox, autrement qu'en modifiant le fond de son parent (WM_CTLCOLORDLG).
Je pense que j'approfondirais le problème un peu plus tard ....Envoyé par Aurelien.Regat-Barrel
Merci encore.
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager