begin process at 2012 05 28 07:57:49
  Trouver un code source :
 
dans
 
Accueil > Forum > 

Archive C/C++

 > 

Archives

 > 

Au secours

 > 

CheckListBox en couleur


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

CheckListBox en couleur

jeudi 5 juin 2003 à 14:29:27 | CheckListBox en couleur

garslouche

Bonjour,
je voudrais modifier la couleur de fond d'une CCheckListBox.
J'ai bien essayé d'utiliser OnCtlColor mais ça ne marche pas (alors qu'avec un CListBox normale ça marche...)

Sinon j'ai pensé réécrire DrawItem mais c'est un peu lourd pour changer une couleur, et pis de toutes façons ça ne colorie pas le fond de la liste : seulement les items...

Bref je suis à court d'idées...quelqu'un pour me dépanner ?
mercredi 27 octobre 2004 à 19:10:11 | Re : CheckListBox en couleur

magic_Nono

Membre Club
voici ma classe pour les couleurs des boutons

Fortement inspirée d'une de Vecchio que je remercie encore au passage
ça devrais t'aider....

++

// bbutton.cpp : implementation file
//Boutons avec couleur...
//vecchio
#include "stdafx.h"
#include "bbutton.hpp"

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif


const COLORREF CLR_BTN_WHITE = RGB(255, 255, 255);
const COLORREF CLR_BTN_BLACK = RGB(0, 0, 0);
const COLORREF CLR_BTN_DGREY = RGB(128, 128, 128);
const COLORREF CLR_BTN_GREY = RGB(192, 192, 192);
const COLORREF CLR_BTN_LLGREY = RGB(223, 223, 223);

const int BUTTON_IN = 0x01;
const int BUTTON_OUT = 0x02;
const int BUTTON_BLACK_BORDER = 0x04;

/////////////////////////////////////////////////////////////////////////////
// BButton

BButton::BButton()
{
m_textColor = GetSysColor(COLOR_BTNTEXT);
m_backgroundColor = GetSysColor(COLOR_BTNFACE);
m_disabledBackgroundColor = m_backgroundColor;
m_light = GetSysColor(COLOR_3DLIGHT);
m_highlight = GetSysColor(COLOR_BTNHIGHLIGHT);
m_shadow = GetSysColor(COLOR_BTNSHADOW);
m_darkShadow = GetSysColor(COLOR_3DDKSHADOW);
}

BButton::~BButton()
{
}



void BButton::SetColor(COLORREF new_text_colour, COLORREF new_background_colour)
{
m_textColor = new_text_colour;
m_backgroundColor = new_background_colour;
m_disabledBackgroundColor = GetSysColor(COLOR_BTNFACE);

Invalidate(FALSE);
}

void BButton::SetColor(COLORREF new_text_colour, COLORREF new_background_colour, COLORREF new_disabled_background_colour)
{
m_textColor = new_text_colour;
m_backgroundColor = new_background_colour;
m_disabledBackgroundColor = new_disabled_background_colour;

Invalidate(FALSE);
}

void BButton::ResetColor()
{
m_textColor = GetSysColor(COLOR_BTNTEXT);
m_backgroundColor = GetSysColor(COLOR_BTNFACE);
m_disabledBackgroundColor = m_backgroundColor;
m_light = GetSysColor(COLOR_3DLIGHT);
m_highlight = GetSysColor(COLOR_BTNHIGHLIGHT);
m_shadow = GetSysColor(COLOR_BTNSHADOW);
m_darkShadow = GetSysColor(COLOR_3DDKSHADOW);

Invalidate(FALSE);
}

BEGIN_MESSAGE_MAP(BButton, CButton)
//{{AFX_MSG_MAP(BButton)
// NOTE - the ClassWizard will add and remove mapping macros here.
//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// BButton message handlers

void BButton::DrawItem(LPDRAWITEMSTRUCT lpDrawItemStruct)
{
CDC *dc;
CRect focus_rect, button_rect, text_rect, offset_text_rect;
UINT state;

dc = CDC::FromHandle(lpDrawItemStruct->hDC);
state = lpDrawItemStruct->itemState;

focus_rect.CopyRect(&lpDrawItemStruct->rcItem);
button_rect.CopyRect(&lpDrawItemStruct->rcItem);

text_rect = button_rect;
text_rect.OffsetRect(-1, -1);
offset_text_rect = text_rect;
offset_text_rect.OffsetRect(1, 1);

// Set the focus rectangle to just past the border decoration
focus_rect.left += 4;
focus_rect.right -= 4;
focus_rect.top += 4;
focus_rect.bottom -= 4;

// Retrieve the button's caption
const int bufSize = 512;
TCHAR buffer[bufSize];
GetWindowText(buffer, bufSize);

if (state & ODS_DISABLED)
{
DrawFilledRect(dc, button_rect, m_disabledBackgroundColor);
}
else
{
DrawFilledRect(dc, button_rect, m_backgroundColor);
}

if (state & ODS_SELECTED)
{
DrawFrame(dc, button_rect, BUTTON_IN);
}
else
{
if ((state & ODS_DEFAULT) || (state & ODS_FOCUS))
{
DrawFrame(dc, button_rect, BUTTON_OUT | BUTTON_BLACK_BORDER);
}
else
{
DrawFrame(dc, button_rect, BUTTON_OUT);
}
}

if (state & ODS_DISABLED)
{
DrawButtonText(dc, offset_text_rect, buffer, CLR_BTN_WHITE);
DrawButtonText(dc, text_rect, buffer, CLR_BTN_DGREY);
}
else
{
if (state & ODS_SELECTED)
{
DrawButtonText(dc, offset_text_rect, buffer, m_textColor);
}
else
{
DrawButtonText(dc, text_rect, buffer, m_textColor);
}
}

if (state & ODS_FOCUS)
{
DrawFocusRect(lpDrawItemStruct->hDC, (LPRECT)&focus_rect);
}
}

void BButton::DrawFrame(CDC *dc, CRect r, int state)
{
COLORREF color;

if (state & BUTTON_BLACK_BORDER)
{
color = CLR_BTN_BLACK;

DrawLine(dc, r.left, r.top, r.right, r.top, color); // Across top
DrawLine(dc, r.left, r.top, r.left, r.bottom, color); // Down left

DrawLine(dc, r.left, r.bottom - 1, r.right, r.bottom - 1, color); // Across bottom
DrawLine(dc, r.right - 1, r.top, r.right - 1, r.bottom, color); // Down right

r.InflateRect(-1, -1);
}

if (state & BUTTON_OUT)
{
color = m_highlight;

DrawLine(dc, r.left, r.top, r.right, r.top, color); // Across top
DrawLine(dc, r.left, r.top, r.left, r.bottom, color); // Down left

color = m_darkShadow;

DrawLine(dc, r.left, r.bottom - 1, r.right, r.bottom - 1, color); // Across bottom
DrawLine(dc, r.right - 1, r.top, r.right - 1, r.bottom, color); // Down right

r.InflateRect(-1, -1);

color = m_light;

DrawLine(dc, r.left, r.top, r.right, r.top, color); // Across top
DrawLine(dc, r.left, r.top, r.left, r.bottom, color); // Down left

color = m_shadow;

DrawLine(dc, r.left, r.bottom - 1, r.right, r.bottom - 1, color); // Across bottom
DrawLine(dc, r.right - 1, r.top, r.right - 1, r.bottom, color); // Down right
}

if (state & BUTTON_IN)
{
color = m_darkShadow;

DrawLine(dc, r.left, r.top, r.right, r.top, color); // Across top
DrawLine(dc, r.left, r.top, r.left, r.bottom, color); // Down left
DrawLine(dc, r.left, r.bottom - 1, r.right, r.bottom - 1, color); // Across bottom
DrawLine(dc, r.right - 1, r.top, r.right - 1, r.bottom, color); // Down right

r.InflateRect(-1, -1);

color = m_shadow;

DrawLine(dc, r.left, r.top, r.right, r.top, color); // Across top
DrawLine(dc, r.left, r.top, r.left, r.bottom, color); // Down left
DrawLine(dc, r.left, r.bottom - 1, r.right, r.bottom - 1, color); // Across bottom
DrawLine(dc, r.right - 1, r.top, r.right - 1, r.bottom, color); // Down right
}
}

void BButton::DrawFilledRect(CDC *dc, CRect r, COLORREF color)
{
CBrush B;

B.CreateSolidBrush(color);
dc->FillRect(r, &B);
}

void BButton::DrawLine(CDC *dc, long sx, long sy, long ex, long ey, COLORREF color)
{
CPen new_pen;
CPen *old_pen;

new_pen.CreatePen(PS_SOLID, 1, color);
old_pen = dc->SelectObject(&new_pen);
dc->MoveTo(sx, sy);
dc->LineTo(ex, ey);
dc->SelectObject(old_pen);
new_pen.DeleteObject();
}


void BButton::DrawButtonText(CDC *dc, CRect r, const char *Buf, COLORREF m_textColor)
{
COLORREF previous_colour;

previous_colour = dc->SetTextColor(m_textColor);
dc->SetBkMode(TRANSPARENT);
dc->DrawText(Buf, strlen(Buf), r, DT_CENTER | DT_VCENTER | DT_SINGLELINE);
dc->SetTextColor(previous_colour);
}


Magic Nono: l'informagicien!


Cette discussion est classée dans : couleur, fond, marche, checklistbox


Répondre à ce message

Sujets en rapport avec ce message

Couleur de fond (DEV-C++) [ par Jcedric42 ] Salut tous,J'aimerez avoir comment il faut faire pour metre une couleur d'arriere plan en sortie MS-DOS,avec Dev-C++ .Merci D'avance couleur de fond CListCtrl [ par julok2 ] Bonjour,est-il possible de définir dans une CListCtrl ( j'utilise VC++6.0 et les MFC) une couleur de fond différente pour chaque case?Merci bien ListCtrl couleur de fond des cases [ par gus2647 ] Bonjour, Je viens de creer une listctrl et j aimerais changer le bkgcolor de la case en fonction de la valeur quelle contient (vert si positif, rouge couleur de fond d'une DialogBox [ par glipper ] Bonjour,Je cherche un moyen de changer la couleur de fond d'une dialogbox simplement ! A defaut d'une solution simple, serait-il possible d'avoir une Couleur de fond... [ par DeAtHCrAsH ] Comment faire pour modifier la couleur de fond d'un dialog ?--=[SheLL]=-- couleur de fond boite de dialogue [ par dambeaufort ] Bonjour, Pourriez vous m'indiquer une méthode afin de changer la couleur de fond d'une boite de dialog. Je travaille en MFC sous visual C++.Si vous po Modifier la couleur de fond d'une barre de statut [ par erwanr1 ] Bonjour, je souhaite modifier le background d'une zone de ma barre de statut.j'essaie avec SB_SETBKCOLOR mais cela ne fonctionne pasMerci de votre a changer la couleur du fond de la view [ par glaive ] je veux changer la couleur de fond de la view, je travaille en MFCet je n'est pas une base dans les API de windowsmerci d'avanceglaive l'epée de la ju Couleur des objets [ par Mastersam ] Bonjour,Voilà j'ai créé une fenêtre et je mets des boutons (ceux d'xp arrondis) et des textes. Mais je n'ai pas la même couleur sur le fond de la fenê couleur des controles [ par ebooserge ] salut a tous, voila j'ai un p'tit pb. j'arrive a modifier la couleur de fond d'une fentre mais lorsque j'essaie de le faire pour un controle contenu d


Nos sponsors


Sondage...

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

A découvrir



 
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

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 25,069 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales