Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

COULEURS ET TRANSPARENCE DES CONTROLES (API)


Information sur la source

Catégorie :API Niveau : Débutant Date de création : 29/11/2004 Vu / téléchargé: 8 520 / 845

Note :
9,2 / 10 - par 5 personnes
9,20 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10

Commentaire sur cette source (10)
Ajouter un commentaire et/ou une note

Description

Cliquez pour voir la capture en taille normale
Suite aux nombreuses questions dans le forum sur la transparence des

STATICs et l'utilisation des couleurs dans les contrôles, je me suis

dit qu'il serait utile de proposer un petit code source dans lequel je

rassemble tout ce que je sais à ce sujet. Tout réside dans le

traitement des messages suivants:
WM_CTLCOLORSTATIC: pour définir la couleur et la transparence d'un

STATIC, CHECKBOX ou bouton radio.
WM_CTLCOLOREDIT: pour définir la couleur du texte et de fond d'un EDIT.
WM_CTLCOLORLISTBOX: pour définir la couleur du texte et de fond d'une

LISTBOX.
WM_CTLCOLORSCROLLBAR: pour définir la couleur de fond d'une SCROLLBAR.
WM_CTLCOLORDLG: pour définir la couleur de fond d'une boite de

dialogue.
WM_DRAWITEM: pour définir la couleur du texte et de fond d'un bouton

créé avec le style BS_OWNERDRAW.
En cliquant sur un contôle de la boite de dialogue, ce programme change

la couleur, choisie au hasard, d'un STATIC en affichant sa valeur

héxadécimale.
Ce source n'utilise pas les ressources. Il suffit de le copier puis le

coller dans un nouveau projet WIN32. Il a été fait sous Visual C++ 6.

 

Source

  • #include <windows.h>
  • /******************************************************************/
  • /************* Fonction de dessin des boutons *************/
  • /******************************************************************/
  • void DessinerBouton(LPDRAWITEMSTRUCT lpds,LPCTSTR texte,COLORREF couleurtexte,COLORREF couleurfond)
  • {
  • //Déclarations:
  • SIZE dims;
  • char nom[50];
  • //Définir le texte du bouton:
  • strcpy(nom, texte);
  • //Déterminer les dimensions du texte:
  • GetTextExtentPoint32(lpds->hDC, nom, strlen(nom), &dims);
  • //Définir la couleur du texte:
  • SetTextColor(lpds->hDC, couleurtexte);
  • //Définir la couleur du fond:
  • SetBkColor(lpds->hDC, couleurfond);
  • //Déterminer l'état du bouton:
  • BOOL etat=lpds->itemState & ODS_SELECTED;
  • //Déterminer la largeur et la hauteur du bouton:
  • int largeur=lpds->rcItem.right-lpds->rcItem.left;
  • int hauteur=lpds->rcItem.bottom-lpds->rcItem.top;
  • //Ecrire le texte sur le bouton:
  • ExtTextOut(lpds->hDC,(largeur-dims.cx)/2+etat, (hauteur-dims.cy)/2+etat, ETO_OPAQUE | ETO_CLIPPED, &lpds->rcItem, nom, strlen(nom), NULL);
  • //Dessiner le cadre du bouton selon son état:
  • DrawEdge(lpds->hDC, &lpds->rcItem,(etat ? EDGE_SUNKEN : EDGE_RAISED ), BF_RECT);
  • //Retour:
  • return;
  • }
  • /******************************************************************/
  • /******************************************************************/
  • /************** Procédure de la boite de dialogue ***********/
  • /******************************************************************/
  • BOOL CALLBACK DialogProc( HWND hDlg, UINT message, WPARAM wParam,LPARAM lParam )
  • {
  • //Déclarer et définir les couleurs de fond de certains contrôles:
  • static HBRUSH hbDialog = CreateSolidBrush(RGB(200,175,100));
  • static HBRUSH hbEdit= CreateSolidBrush(RGB(210,200,150));
  • static HBRUSH hbScrollh= CreateSolidBrush(RGB(60,250,240));
  • static HBRUSH hbScrollv= CreateSolidBrush(RGB(250,160,230));
  • static HBRUSH hbList= CreateSolidBrush(RGB(120,170,130));
  • //Déclarer et définir notre police:
  • static HFONT hPolice=CreateFont(32,0,0,0,400,0,0,0,0,0,0,0,0,"Arial");
  • //Déclaration de nos contrôles:
  • static HWND hBouton1,hBouton2,hBouton3,hBouton4,hBouton5,hBouton6,hEdit;
  • static HWND hCheckbox1,hCheckbox2,hRadio1,hRadio2,hScrollh,hScrollv,hList,hQuitter;
  • static HWND hStatic1,hStatic2,hStatic3,hStatic4,hStatic5,hRadios,hChecks,hCadre;
  • switch (message)
  • {
  • case WM_INITDIALOG://Initialisation de notre boite de dialogue
  • {
  • //Ecrire le titre de la boite de dialogue:
  • SetWindowText(hDlg,"Couleurs et transparence");
  • //Création de nos contrôles:
  • hBouton1=CreateWindow("BUTTON",0,WS_CHILD | WS_VISIBLE | BS_OWNERDRAW,20,30,80,24,hDlg,0,0,0);
  • hBouton2=CreateWindow("BUTTON",0,WS_CHILD | WS_VISIBLE | BS_OWNERDRAW,20,70,80,24,hDlg,0,0,0);
  • hBouton3=CreateWindow("BUTTON",0,WS_CHILD | WS_VISIBLE | BS_OWNERDRAW,20,110,80,24,hDlg,0,0,0);
  • hBouton4=CreateWindow("BUTTON",0,WS_CHILD | WS_VISIBLE | BS_OWNERDRAW,20,150,80,24,hDlg,0,0,0);
  • hBouton5=CreateWindow("BUTTON",0,WS_CHILD | WS_VISIBLE | BS_OWNERDRAW,20,190,80,24,hDlg,0,0,0);
  • hBouton6=CreateWindow("BUTTON",0,WS_CHILD | WS_VISIBLE | BS_OWNERDRAW,20,230,80,24,hDlg,0,0,0);
  • hQuitter=CreateWindow("BUTTON",0,WS_CHILD | WS_VISIBLE | BS_OWNERDRAW,310,230,80,24,hDlg,0,0,0);
  • hEdit=CreateWindowEx(WS_EX_CLIENTEDGE,"EDIT",0,WS_CHILD | WS_VISIBLE,130,233,150,20,hDlg,0,0,0);
  • hCheckbox1=CreateWindow("BUTTON","Check 1",WS_CHILD | WS_VISIBLE | BS_AUTOCHECKBOX ,308,167,100,16,hDlg,0,0,0);
  • hCheckbox2=CreateWindow("BUTTON","Check 2",WS_CHILD | WS_VISIBLE | BS_AUTOCHECKBOX ,308,187,100,16,hDlg,0,0,0);
  • hRadio1=CreateWindow("BUTTON","Radio 1",WS_CHILD | WS_VISIBLE | BS_AUTORADIOBUTTON ,305,106,100,16,hDlg,0,0,0);
  • hRadio2=CreateWindow("BUTTON","Radio 2",WS_CHILD | WS_VISIBLE | BS_AUTORADIOBUTTON ,305,126,100,16,hDlg,0,0,0);
  • hScrollh=CreateWindow("SCROLLBAR",0,WS_CHILD | WS_VISIBLE | SBS_HORZ,20,270,400,20,hDlg,0,0,0);
  • hScrollv=CreateWindow("SCROLLBAR",0,WS_CHILD | WS_VISIBLE | SBS_VERT,420,30,20,240,hDlg,0,0,0);
  • hList=CreateWindowEx(WS_EX_CLIENTEDGE,"LISTBOX",0,WS_CHILD | WS_VISIBLE,130,110,150,104,hDlg,0,0,0);
  • hRadios=CreateWindow("BUTTON",0,WS_CHILD | WS_VISIBLE | BS_GROUPBOX,300,91,90,56,hDlg,0,0,0);
  • hChecks=CreateWindow("BUTTON",0,WS_CHILD | WS_VISIBLE | BS_GROUPBOX,300,151,90,59,hDlg,0,0,0);
  • hCadre=CreateWindow("BUTTON",0,WS_CHILD | WS_VISIBLE | BS_GROUPBOX,130,39,260,48,hDlg,0,0,0);
  • hStatic1=CreateWindow("STATIC","Edit :",WS_CHILD | WS_VISIBLE ,130,216,80,16,hDlg,0,0,0);
  • hStatic2=CreateWindow("STATIC","ListBox :",WS_CHILD | WS_VISIBLE ,130,93,80,16,hDlg,0,0,0);
  • hStatic3=CreateWindow("STATIC","www.cppfrance.com",WS_CHILD | WS_VISIBLE | SS_CENTER,132,49,256,36,hDlg,0,0,0);
  • hStatic4=CreateWindow("STATIC","Static :",WS_CHILD | WS_VISIBLE ,130,30,80,16,hDlg,0,0,0);
  • //Ajouter deux éléments dans la LISTBOX:
  • SendMessage(hList,LB_ADDSTRING,0,(LPARAM)"Premier élément");
  • SendMessage(hList,LB_ADDSTRING,0,(LPARAM)"Deuxième élément");
  • //Changer la police de notre STATIC principal:
  • SendMessage(hStatic3,WM_SETFONT,(WPARAM)hPolice,1);
  • //Donner le focus à notre EDIT:
  • SetFocus(hEdit);
  • return 0;
  • }
  • case WM_CLOSE://Fermeture
  • //Suppression des objets créés:
  • DeleteObject(hbDialog);
  • DeleteObject(hbEdit);
  • DeleteObject(hbScrollh);
  • DeleteObject(hbScrollv);
  • DeleteObject(hbList);
  • DeleteObject(hPolice);
  • //Fermeture de la Boite de dialogue:
  • EndDialog(hDlg,0);
  • return 0;
  • case WM_CTLCOLORDLG://Couleur de fond de la boite de dialogue
  • return (INT_PTR)hbDialog;
  • case WM_DRAWITEM://Dessin des boutons
  • {
  • LPDRAWITEMSTRUCT lpdis = (LPDRAWITEMSTRUCT)lParam;
  • if (lpdis->hwndItem==hBouton1)//Bouton jaune
  • {
  • DessinerBouton(lpdis,"Jaune",RGB(0,0,255),RGB(255,255,0));
  • return TRUE;
  • }
  • if (lpdis->hwndItem==hBouton2)//Bouton vert
  • {
  • DessinerBouton(lpdis,"Vert",RGB(114,95,42),RGB(0,255,0));
  • return TRUE;
  • }
  • if (lpdis->hwndItem==hBouton3)//Bouton bleu
  • {
  • DessinerBouton(lpdis,"Bleu",RGB(255,255,0),RGB(0,0,255));
  • return TRUE;
  • }
  • if (lpdis->hwndItem==hBouton4)//Bouton rouge
  • {
  • DessinerBouton(lpdis,"Rouge",RGB(255,255,255),RGB(255,0,0));
  • return TRUE;
  • }
  • if (lpdis->hwndItem==hBouton5)//Bouton blanc
  • {
  • DessinerBouton(lpdis,"Blanc",RGB(255,0,0),RGB(255,255,255));
  • return TRUE;
  • }
  • if (lpdis->hwndItem==hBouton6)//Bouton noir
  • {
  • DessinerBouton(lpdis,"Noir",RGB(0,255,255),RGB(0,0,0));
  • return TRUE;
  • }
  • if (lpdis->hwndItem==hQuitter)//Bouton Quitter
  • {
  • DessinerBouton(lpdis,"Quitter",RGB(255,255,0),RGB(114,95,42));
  • return TRUE;
  • }
  • break;
  • }
  • case WM_CTLCOLORSTATIC://Dessin des STATICs, RADIOs et CHECKBOXes
  • {
  • if ((HWND)lParam==hCheckbox1)
  • {
  • SetTextColor((HDC)wParam,RGB(0,0,255));
  • SetBkMode((HDC)wParam, TRANSPARENT);
  • return (BOOL)GetStockObject(NULL_BRUSH);
  • }
  • if ((HWND)lParam==hCheckbox2)
  • {
  • SetTextColor((HDC)wParam,RGB(0,0,255));
  • SetBkMode((HDC)wParam, TRANSPARENT);
  • return (BOOL)GetStockObject(NULL_BRUSH);
  • }
  • if ((HWND)lParam==hRadio1)
  • {
  • SetTextColor((HDC)wParam,RGB(255,0,0));
  • SetBkMode((HDC)wParam, TRANSPARENT);
  • return (BOOL)GetStockObject(NULL_BRUSH);
  • }
  • if ((HWND)lParam==hRadio2)
  • {
  • SetTextColor((HDC)wParam,RGB(255,0,0));
  • SetBkMode((HDC)wParam, TRANSPARENT);
  • return (BOOL)GetStockObject(NULL_BRUSH);
  • }
  • if ((HWND)lParam==hStatic1)
  • {
  • SetTextColor((HDC)wParam,RGB(255,255,255));
  • SetBkMode((HDC)wParam, TRANSPARENT);
  • return (BOOL)GetStockObject(NULL_BRUSH);
  • }
  • if ((HWND)lParam==hStatic2)
  • {
  • SetTextColor((HDC)wParam,RGB(255,255,255));
  • SetBkMode((HDC)wParam, TRANSPARENT);
  • return (BOOL)GetStockObject(NULL_BRUSH);
  • }
  • if ((HWND)lParam==hStatic3)
  • {
  • SetTextColor((HDC)wParam,RGB(170,200,175));
  • SetBkMode((HDC)wParam, TRANSPARENT);
  • return (BOOL)GetStockObject(NULL_BRUSH);
  • }
  • if ((HWND)lParam==hStatic4)
  • {
  • SetTextColor((HDC)wParam,RGB(255,255,255));
  • SetBkMode((HDC)wParam, TRANSPARENT);
  • return (BOOL)GetStockObject(NULL_BRUSH);
  • }
  • return 0;
  • }
  • case WM_CTLCOLOREDIT://Dessin du contrôle EDIT
  • {
  • if ((HWND)lParam==hEdit)
  • {
  • SetTextColor((HDC)wParam,RGB(70,110,60));
  • SetBkColor((HDC)wParam,RGB(210,200,150));
  • return (BOOL) hbEdit;
  • }
  • return 0;
  • }
  • case WM_CTLCOLORSCROLLBAR://Dessin des SCROLLBARs
  • {
  • if ((HWND)lParam==hScrollh) return (BOOL) hbScrollh;
  • if ((HWND)lParam==hScrollv) return (BOOL) hbScrollv;
  • return 0;
  • }
  • case WM_CTLCOLORLISTBOX://Dessin de la LISTBOX
  • {
  • if ((HWND)lParam==hList)
  • {
  • SetTextColor((HDC)wParam,RGB(255,255,0));
  • SetBkColor((HDC)wParam,RGB(120,170,130));
  • return (BOOL) hbList;
  • }
  • return 0;
  • }
  • case WM_COMMAND://Clic sur un contrôle
  • {
  • //Obtenir le device contexte du STATIC principal:
  • HDC hdc=GetDC(hStatic3);
  • //Déterminer la zone dessinable:
  • RECT rect;
  • GetClientRect(hStatic3,&rect);
  • //Effacer contenu du STATIC:
  • FillRect(hdc,&rect,hbDialog);
  • //Choisir une couleur au hasard:
  • int couleur=rand()%256*0x10000+rand()%256*0x100+rand()%256;
  • //Définir la couleur du texte:
  • SetTextColor(hdc,couleur);
  • //Rendre le Static transparent:
  • SetBkMode(hdc,TRANSPARENT);
  • //Choisir notre police:
  • HFONT hOrigi=(HFONT)SelectObject(hdc,hPolice);
  • //Convertir la couleur en valeur héxadécimale:
  • char valeurhexa[6];
  • itoa(couleur,valeurhexa,16);
  • //Ecrire la valeur dans le STATIC
  • DrawText( hdc, valeurhexa, -1, &rect, DT_CENTER | DT_VCENTER | DT_SINGLELINE );
  • //Restaurer la police originale:
  • SelectObject(hdc,hOrigi);
  • //Libérer le device context:
  • ReleaseDC(hStatic3,hdc);
  • if ((HWND)lParam==hQuitter)//clic sur Quitter
  • {
  • //Envoi du message de fermeture
  • SendMessage(hDlg,WM_CLOSE,0,0);
  • break;
  • }
  • }
  • }
  • //Retour:
  • return 0;
  • }
  • /******************************************************************/
  • /******************************************************************/
  • /***************** Fonction WinMain *****************************/
  • /******************************************************************/
  • int APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,LPSTR lpCmdLine,int nCmdShow)
  • {
  • //Allouer de la mémoire pour notre dialog template:
  • LPDLGTEMPLATE lpdt = ( LPDLGTEMPLATE) GlobalAlloc(GPTR, 512);
  • if (!lpdt) return 1;
  • // Définir les propriétés de la boite de dialogue:
  • lpdt->style = DS_CENTER | WS_POPUP | WS_MINIMIZEBOX| WS_SYSMENU | DS_MODALFRAME | WS_CAPTION;
  • lpdt->x = lpdt->y = 0; lpdt->cx = 230; lpdt->cy = 155;
  • //Lancer la boite de dialogue
  • DialogBoxIndirect(hInstance,lpdt,NULL,(DLGPROC)DialogProc);
  • //Libération de la mémoire allouée:
  • GlobalFree((HGLOBAL)lpdt);
  • //Retour:
  • return 0;
  • }
  • /******************************************************************/
#include <windows.h>

/******************************************************************/
/*************     Fonction de dessin des boutons     *************/
/******************************************************************/
void DessinerBouton(LPDRAWITEMSTRUCT lpds,LPCTSTR texte,COLORREF couleurtexte,COLORREF couleurfond)
{
	//Déclarations:
	SIZE dims;
	char nom[50];
	//Définir le texte du bouton:
	strcpy(nom, texte);
	//Déterminer les dimensions du texte:
    GetTextExtentPoint32(lpds->hDC, nom, strlen(nom), &dims);
	//Définir la couleur du texte:
    SetTextColor(lpds->hDC, couleurtexte);
	//Définir la couleur du fond:
    SetBkColor(lpds->hDC, couleurfond);
	//Déterminer l'état du bouton:
	BOOL etat=lpds->itemState & ODS_SELECTED;
	//Déterminer la largeur et la hauteur du bouton:
	int largeur=lpds->rcItem.right-lpds->rcItem.left;
	int hauteur=lpds->rcItem.bottom-lpds->rcItem.top;
	//Ecrire le texte sur le bouton:
    ExtTextOut(lpds->hDC,(largeur-dims.cx)/2+etat, (hauteur-dims.cy)/2+etat, ETO_OPAQUE | ETO_CLIPPED, &lpds->rcItem, nom, strlen(nom), NULL);
    //Dessiner le cadre du bouton selon son état:
	DrawEdge(lpds->hDC, &lpds->rcItem,(etat ? EDGE_SUNKEN : EDGE_RAISED ), BF_RECT);                
	//Retour:
	return;
}
/******************************************************************/

/******************************************************************/
/**************   Procédure de la boite de dialogue     ***********/					
/******************************************************************/
BOOL CALLBACK DialogProc(  HWND hDlg, UINT message, WPARAM wParam,LPARAM lParam  )
{
	//Déclarer et définir les couleurs de fond de certains contrôles:
	static HBRUSH hbDialog = CreateSolidBrush(RGB(200,175,100));
	static HBRUSH hbEdit= CreateSolidBrush(RGB(210,200,150));
	static HBRUSH hbScrollh= CreateSolidBrush(RGB(60,250,240));
	static HBRUSH hbScrollv= CreateSolidBrush(RGB(250,160,230));
	static HBRUSH hbList= CreateSolidBrush(RGB(120,170,130));
	//Déclarer et définir notre police:
	static HFONT hPolice=CreateFont(32,0,0,0,400,0,0,0,0,0,0,0,0,"Arial");
	//Déclaration de nos contrôles:
	static HWND hBouton1,hBouton2,hBouton3,hBouton4,hBouton5,hBouton6,hEdit;
	static HWND hCheckbox1,hCheckbox2,hRadio1,hRadio2,hScrollh,hScrollv,hList,hQuitter;
	static HWND hStatic1,hStatic2,hStatic3,hStatic4,hStatic5,hRadios,hChecks,hCadre;
	 
	switch (message)
	{
		case WM_INITDIALOG://Initialisation de notre boite de dialogue
			{
				//Ecrire le titre de la boite de dialogue:
				SetWindowText(hDlg,"Couleurs et transparence");
				//Création de nos contrôles:
				hBouton1=CreateWindow("BUTTON",0,WS_CHILD | WS_VISIBLE | BS_OWNERDRAW,20,30,80,24,hDlg,0,0,0);
				hBouton2=CreateWindow("BUTTON",0,WS_CHILD | WS_VISIBLE | BS_OWNERDRAW,20,70,80,24,hDlg,0,0,0);
				hBouton3=CreateWindow("BUTTON",0,WS_CHILD | WS_VISIBLE | BS_OWNERDRAW,20,110,80,24,hDlg,0,0,0);
				hBouton4=CreateWindow("BUTTON",0,WS_CHILD | WS_VISIBLE | BS_OWNERDRAW,20,150,80,24,hDlg,0,0,0);
				hBouton5=CreateWindow("BUTTON",0,WS_CHILD | WS_VISIBLE | BS_OWNERDRAW,20,190,80,24,hDlg,0,0,0);
				hBouton6=CreateWindow("BUTTON",0,WS_CHILD | WS_VISIBLE | BS_OWNERDRAW,20,230,80,24,hDlg,0,0,0);
				hQuitter=CreateWindow("BUTTON",0,WS_CHILD | WS_VISIBLE | BS_OWNERDRAW,310,230,80,24,hDlg,0,0,0);
				hEdit=CreateWindowEx(WS_EX_CLIENTEDGE,"EDIT",0,WS_CHILD | WS_VISIBLE,130,233,150,20,hDlg,0,0,0);
				hCheckbox1=CreateWindow("BUTTON","Check 1",WS_CHILD | WS_VISIBLE | BS_AUTOCHECKBOX ,308,167,100,16,hDlg,0,0,0);
				hCheckbox2=CreateWindow("BUTTON","Check 2",WS_CHILD | WS_VISIBLE | BS_AUTOCHECKBOX ,308,187,100,16,hDlg,0,0,0);
				hRadio1=CreateWindow("BUTTON","Radio 1",WS_CHILD | WS_VISIBLE | BS_AUTORADIOBUTTON ,305,106,100,16,hDlg,0,0,0);
				hRadio2=CreateWindow("BUTTON","Radio 2",WS_CHILD | WS_VISIBLE | BS_AUTORADIOBUTTON ,305,126,100,16,hDlg,0,0,0);
				hScrollh=CreateWindow("SCROLLBAR",0,WS_CHILD | WS_VISIBLE | SBS_HORZ,20,270,400,20,hDlg,0,0,0);  
				hScrollv=CreateWindow("SCROLLBAR",0,WS_CHILD | WS_VISIBLE | SBS_VERT,420,30,20,240,hDlg,0,0,0);
				hList=CreateWindowEx(WS_EX_CLIENTEDGE,"LISTBOX",0,WS_CHILD | WS_VISIBLE,130,110,150,104,hDlg,0,0,0);
				hRadios=CreateWindow("BUTTON",0,WS_CHILD | WS_VISIBLE | BS_GROUPBOX,300,91,90,56,hDlg,0,0,0);
				hChecks=CreateWindow("BUTTON",0,WS_CHILD | WS_VISIBLE | BS_GROUPBOX,300,151,90,59,hDlg,0,0,0);
				hCadre=CreateWindow("BUTTON",0,WS_CHILD | WS_VISIBLE | BS_GROUPBOX,130,39,260,48,hDlg,0,0,0);
				hStatic1=CreateWindow("STATIC","Edit :",WS_CHILD | WS_VISIBLE ,130,216,80,16,hDlg,0,0,0);
				hStatic2=CreateWindow("STATIC","ListBox :",WS_CHILD | WS_VISIBLE ,130,93,80,16,hDlg,0,0,0);
				hStatic3=CreateWindow("STATIC","www.cppfrance.com",WS_CHILD | WS_VISIBLE | SS_CENTER,132,49,256,36,hDlg,0,0,0);
				hStatic4=CreateWindow("STATIC","Static :",WS_CHILD | WS_VISIBLE ,130,30,80,16,hDlg,0,0,0);
				//Ajouter deux éléments dans la LISTBOX:
				SendMessage(hList,LB_ADDSTRING,0,(LPARAM)"Premier élément");
				SendMessage(hList,LB_ADDSTRING,0,(LPARAM)"Deuxième élément");
				//Changer la police de notre STATIC principal:
				SendMessage(hStatic3,WM_SETFONT,(WPARAM)hPolice,1);
				//Donner le focus à notre EDIT:
				SetFocus(hEdit);
				return 0;			
			}

		case WM_CLOSE://Fermeture
			    //Suppression des objets créés:
				DeleteObject(hbDialog);
				DeleteObject(hbEdit);
				DeleteObject(hbScrollh);
				DeleteObject(hbScrollv);
				DeleteObject(hbList);
				DeleteObject(hPolice);
				//Fermeture de la Boite de dialogue:
				EndDialog(hDlg,0);
				return 0;

		case WM_CTLCOLORDLG://Couleur de fond de la boite de dialogue
				return (INT_PTR)hbDialog;
		   
		case WM_DRAWITEM://Dessin des boutons
			{
				LPDRAWITEMSTRUCT lpdis = (LPDRAWITEMSTRUCT)lParam;

                if (lpdis->hwndItem==hBouton1)//Bouton jaune
                {
					DessinerBouton(lpdis,"Jaune",RGB(0,0,255),RGB(255,255,0));
				    return TRUE;
                }

				if (lpdis->hwndItem==hBouton2)//Bouton vert
                {     
					DessinerBouton(lpdis,"Vert",RGB(114,95,42),RGB(0,255,0));
                    return TRUE;
                }

				if (lpdis->hwndItem==hBouton3)//Bouton bleu
                {
					DessinerBouton(lpdis,"Bleu",RGB(255,255,0),RGB(0,0,255));		
                    return TRUE;
                }

				if (lpdis->hwndItem==hBouton4)//Bouton rouge
                {
					DessinerBouton(lpdis,"Rouge",RGB(255,255,255),RGB(255,0,0));		
                    return TRUE;
				}

			    if (lpdis->hwndItem==hBouton5)//Bouton blanc
                {
					DessinerBouton(lpdis,"Blanc",RGB(255,0,0),RGB(255,255,255));		                  
                    return TRUE;
                }

		    	if (lpdis->hwndItem==hBouton6)//Bouton noir
                {
					DessinerBouton(lpdis,"Noir",RGB(0,255,255),RGB(0,0,0));		                  
                    return TRUE;
                }

				if (lpdis->hwndItem==hQuitter)//Bouton Quitter
                {
					DessinerBouton(lpdis,"Quitter",RGB(255,255,0),RGB(114,95,42));		                  
                    return TRUE;
                }
                break;
			}

		case WM_CTLCOLORSTATIC://Dessin des STATICs, RADIOs et CHECKBOXes
			{
				if ((HWND)lParam==hCheckbox1) 
				{
					SetTextColor((HDC)wParam,RGB(0,0,255));
					SetBkMode((HDC)wParam, TRANSPARENT);
					return (BOOL)GetStockObject(NULL_BRUSH);
				}

				if ((HWND)lParam==hCheckbox2) 
				{
					SetTextColor((HDC)wParam,RGB(0,0,255));
					SetBkMode((HDC)wParam, TRANSPARENT);
					return (BOOL)GetStockObject(NULL_BRUSH);
				}

				if ((HWND)lParam==hRadio1) 
				{
					SetTextColor((HDC)wParam,RGB(255,0,0));
					SetBkMode((HDC)wParam, TRANSPARENT);
					return (BOOL)GetStockObject(NULL_BRUSH);
				}

				if ((HWND)lParam==hRadio2) 
				{
					SetTextColor((HDC)wParam,RGB(255,0,0));
					SetBkMode((HDC)wParam, TRANSPARENT);
					return (BOOL)GetStockObject(NULL_BRUSH);
				}

				if ((HWND)lParam==hStatic1) 
				{
					SetTextColor((HDC)wParam,RGB(255,255,255));
					SetBkMode((HDC)wParam, TRANSPARENT);
					return (BOOL)GetStockObject(NULL_BRUSH);
				}

				if ((HWND)lParam==hStatic2) 
				{
					SetTextColor((HDC)wParam,RGB(255,255,255));
					SetBkMode((HDC)wParam, TRANSPARENT);
					return (BOOL)GetStockObject(NULL_BRUSH);
				}

				if ((HWND)lParam==hStatic3) 
				{
					SetTextColor((HDC)wParam,RGB(170,200,175));
					SetBkMode((HDC)wParam, TRANSPARENT);
					return (BOOL)GetStockObject(NULL_BRUSH);
				}

				if ((HWND)lParam==hStatic4) 
				{
					SetTextColor((HDC)wParam,RGB(255,255,255));
					SetBkMode((HDC)wParam, TRANSPARENT);
					return (BOOL)GetStockObject(NULL_BRUSH);
				}
				return 0;
			}

		case WM_CTLCOLOREDIT://Dessin du contrôle EDIT
			{
				if ((HWND)lParam==hEdit) 
				{
					SetTextColor((HDC)wParam,RGB(70,110,60));
					SetBkColor((HDC)wParam,RGB(210,200,150));
					return (BOOL) hbEdit;
				}			
				return 0;
			}

		case WM_CTLCOLORSCROLLBAR://Dessin des SCROLLBARs
			{
				if ((HWND)lParam==hScrollh)  return (BOOL) hbScrollh;
				if ((HWND)lParam==hScrollv)  return (BOOL) hbScrollv;
				return 0;
			}

		case WM_CTLCOLORLISTBOX://Dessin de la LISTBOX
			{
				if ((HWND)lParam==hList)
				{
					SetTextColor((HDC)wParam,RGB(255,255,0));
					SetBkColor((HDC)wParam,RGB(120,170,130));
					return (BOOL) hbList;
				}
				return 0;
			}

		case WM_COMMAND://Clic sur un contrôle
			{  
				//Obtenir le device contexte du STATIC principal:
				HDC hdc=GetDC(hStatic3);
				//Déterminer la zone dessinable:
			    RECT rect;
			    GetClientRect(hStatic3,&rect);
				//Effacer contenu du STATIC:
			    FillRect(hdc,&rect,hbDialog);
				//Choisir une couleur au hasard:
			    int couleur=rand()%256*0x10000+rand()%256*0x100+rand()%256;
			    //Définir la couleur du texte:
				SetTextColor(hdc,couleur);
				//Rendre le Static transparent:
			    SetBkMode(hdc,TRANSPARENT);
				//Choisir notre police:
			    HFONT hOrigi=(HFONT)SelectObject(hdc,hPolice);
				//Convertir la couleur en valeur héxadécimale:
			    char valeurhexa[6];
			    itoa(couleur,valeurhexa,16);
		        //Ecrire la valeur dans le STATIC
			    DrawText( hdc, valeurhexa, -1, &rect, DT_CENTER | DT_VCENTER | DT_SINGLELINE );
			    //Restaurer la police originale:
				SelectObject(hdc,hOrigi);
				//Libérer le device context:
			    ReleaseDC(hStatic3,hdc);

				if ((HWND)lParam==hQuitter)//clic sur Quitter
				{
					//Envoi du message de fermeture
					SendMessage(hDlg,WM_CLOSE,0,0);
					break;
				}
		   
			}
	}
	//Retour:
	return 0;
}
/******************************************************************/

/******************************************************************/
/*****************  Fonction WinMain  *****************************/
/******************************************************************/
int APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,LPSTR lpCmdLine,int nCmdShow)
{  
	//Allouer de la mémoire pour notre dialog template:
    LPDLGTEMPLATE lpdt = ( LPDLGTEMPLATE) GlobalAlloc(GPTR, 512); 
    if (!lpdt) return 1;    
    // Définir les propriétés de la boite de dialogue:
    lpdt->style = DS_CENTER | WS_POPUP | WS_MINIMIZEBOX| WS_SYSMENU | DS_MODALFRAME | WS_CAPTION; 
    lpdt->x = lpdt->y  = 0;  lpdt->cx = 230; lpdt->cy = 155;         
    //Lancer la boite de dialogue
    DialogBoxIndirect(hInstance,lpdt,NULL,(DLGPROC)DialogProc);
	//Libération de la mémoire allouée:
    GlobalFree((HGLOBAL)lpdt); 
	//Retour:
	return 0;
}
/******************************************************************/

Fichier Zip

Pour les "Membres Club", vous pouvez télécharger directement un fichier contenu dans le zip sans télécharger le zip en entier !

Télécharger le zip

Commentaires et avis

signaler à un administrateur
Commentaire de racpp le 29/11/2004 16:00:17 administrateur CS

Salut,
Désolé pour la présentation du texte de description du source. A cause de problèmes de connexion au site, j'ai dû taper ce texte dans le Bloc-Notes. J'ai oublié de désactiver l'option de retour à la ligne automatique avant de le copier/coller. Quand j'essaie de le mettre à jour, le serveur me retourne l' "Erreur 500". Dès que le service est de nouveau disponible je réglerai ça.

signaler à un administrateur
Commentaire de eRoZion le 30/11/2004 01:06:46

En tous cas merci pour le code car je pense qu'il va m'être très utile. :)


eRoZion

signaler à un administrateur
Commentaire de HeavenForsaker le 17/06/2006 13:57:58

Bonjour,

J'ai testé le code pour rendre les contrôles transparents:

#                     SetBkMode((HDC)wParam, TRANSPARENT);
#                     return (BOOL)GetStockObject(NULL_BRUSH);

dans le WM_CTLCOLORSTATIC, ça fonctionne avec les statics effectivement mais pas avec les checkBox ou les radio, j'obtiens un fond tout noir avec les checkbox. Vu que ces 2 derniers font parti de la classe "BUTTON", je pensais qu'il fallais les traiter dans le WM_CTLCOLORBTN, mais ça ne fonctionne pas non plus.

Je ne comprend pas aussi pourquoi tu test à chaque fois le handle du controle par exemple pour WM_CTLCOLORSTATIC, tu fais le test pour chaques controles :
"if ((HWND)lParam==hCheckbox1)"
Alors que WM_CTLCOLORSTATIC n'est reçu que pour les contrôles static ? si ont veux effectuer le traitement de transparence sur tous les statics on a pas besoin de tous ces tests.

Voila, j'ai testé ça avec une fenêtre principale normale(non dlg), et avec le style XP (fichier manifest). Si tu as une idée du problème...il se pourra que ça soit du au styleXP.

Bye.

signaler à un administrateur
Commentaire de racpp le 23/06/2006 16:19:13 administrateur CS

Salut,
Le message WM_CTLCOLORBTN ne marche pas car les boutons sont plus complexes. Ils ont plusieurs états possibles: enfoncé, relaché, ayant le focus ou pas etc.
Le message WM_CTLCOLORSTATIC doit être utilisé avec les controles suivants:
Les Statics.
les Edits en lecture seule ou désactivé.
Les GroupBox.
Les CheckBox.
Les Boutons radio.

Donc, les CheckBox sont traités exactement comme les Statics.
Si on ne traite que la transparence, on n'aura pas besoin de tester les HWND car un seul et même traitement suffit. Par contre, si on veut donner au controle une couleur de texte ou d'arrière plan différente on est obligé de passer pas ces tests.
A propos de ton problème, je l'ai déjà vu sur certains ordinateurs. Je n'ai pas trop cherché à savoir pourquoi car la solution est simple. On ajoute la fonction SetBkColor comme ceci par exemple pour un arrière plan rouge.
SetBkColor((HDC)wParam,RGB(255,0,0));

signaler à un administrateur
Commentaire de HeavenForsaker le 24/06/2006 12:18:27

Merci RACPP pour les précisions,

Mes checkbox se trouvent sur un TabCtrl au style XP qui possède un fond avec un léger dégradé de couleur, par conséquent il faut que mes checkbox soient vraiment transparente. La solution du SetBkColor((HDC)wParam,RGB(255,0,0)); n'est donc pas acceptable dans mon cas.

signaler à un administrateur
Commentaire de NeoUmbrella le 17/09/2006 18:38:55

Salut, j'utilise aussi des checkbox sur un TabCtrl qui possède ce léger dégradé, as tu trouvé un moyen de rendre le fond des checkbox tranparents ?
Merci

signaler à un administrateur
Commentaire de HeavenForsaker le 17/09/2006 20:07:31

non désolé, et c'est pas faute d'avoir cherché...j'ai abandonné l'idée d'incorporer des tabctrl dans mon application à cause de ça :-(

signaler à un administrateur
Commentaire de NeoUmbrella le 17/09/2006 22:13:04

Je vois, merci d'avoir répondu.
Le seul moyen que j'ai trouvé, c'est de mettre un static comme fond du tabctrl pour que la couleur soit uniforme.

signaler à un administrateur
Commentaire de pianopariss le 21/07/2007 16:21:59

Bonjour, j'ai aussi le même problème :-\
Mais même le:
SetBkColor((HDC)hTest, RGB(180, 180, 180));
ne fonctionne pas, par contre si je désactive le StyleXP, ça fonctionne.
Mais je n'ai pas envie de le désactiver.

Si vous auriez une solution,
Merci.

signaler à un administrateur
Commentaire de pianopariss le 22/07/2007 11:20:14

<edit> Non, j'ai trouvé, il suffit de renvoyer:
CreateSolidBrush(RGB(x, x, x));
(Pour une couleur unie).

Merci pour le code, il m'a quand même aidé :)

Ajouter un commentaire



Nos sponsors

Sondage...

CalendriCode

Juillet 2009
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
2728293031  

Consulter la suite du CalendriCode

Comparez les prix Nouvelle version

Photothèque Nouveau !



Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés
Temps d'éxécution de la page : 0,156 sec

Google Coop CodeS-SourceS Google Coop CodeS-SourceS


Certaines images présentes sur le site (notament certains avatars) sont issues des collections IconShock, donc si vous souhaitez utiliser ces icons vous devez les acheter, ne les copiez pas et ne utilisez pas dans vos sites et applications sans les avoir commandé.