IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Visual C++ Discussion :

[CToolBar] passer en 256 couleurs


Sujet :

Visual C++

  1. #1
    Membre du Club
    Inscrit en
    Avril 2005
    Messages
    125
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 125
    Points : 56
    Points
    56
    Par défaut [CToolBar] passer en 256 couleurs
    Bonjour,

    je cherche à moderniser la toolbar de mon application.

    J'ai inséré des images couleurs (limitées à 256 couleurs). Le rendu est affreux, on ne reconnait plus du tout l'image de base.

    La plupart des couleurs ont disparu. La CToolBar est en 16 couleurs, existe-t-il une solution pour qu'elle en intègre davantage ?


    PS : visual C++ 6.0

    Merci de vos réponse.

  2. #2
    Membre confirmé
    Profil pro
    Développeur indépendant
    Inscrit en
    Août 2004
    Messages
    373
    Détails du profil
    Informations personnelles :
    Âge : 55
    Localisation : France

    Informations professionnelles :
    Activité : Développeur indépendant
    Secteur : Transports

    Informations forums :
    Inscription : Août 2004
    Messages : 373
    Points : 512
    Points
    512
    Par défaut voila..
    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
     
    //**************************************************************************************
    	// comment charger des toolbars menus en couleurs 24 bits.?? voila...
    // cet exemple utilise une toolbar à 11 icones, de dimension 32x30pixels pour chaque icone.
    //les 3 fichiers bitmap en .bmp 24 bits sont inclus dans le projet en tant que 
    //resources bmp IDR_TOOLBAR, IDR_TOOLBAR1, IDR_TOOLBAR2 
    // chaque fichier bitmap fait 352*30 
    // IDR_MAINFRAME est la resource bitmap de la toolbar en 16 couleur créé par vc++6
    //**************************************************************************************
     
    // declarations à mettre dans le mainfrm.h
    CImageList m_ilToolBar;
    CImageList m_ilToolBar1;
    CImageList m_ilToolBar2;
    CToolBar m_wndToolBar;
    dans le mainfrm.cpp, oncreate:
    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
     
    // creation de l'objet CToolBar
    	if (!m_wndToolBar.CreateEx(this, TBSTYLE_FLAT, WS_CHILD | WS_VISIBLE | CBRS_TOP| CBRS_TOOLTIPS | CBRS_FLYBY | CBRS_SIZE_DYNAMIC  //TBSTYLE_FLAT, WS_CHILD |WS_VISIBLE | CBRS_TOP  | CBRS_TOOLTIPS | CBRS_FLYBY | CBRS_SIZE_DYNAMIC
    		 ) ||
    		!m_wndToolBar.LoadToolBar(IDR_MAINFRAME))
    	{
    		TRACE0("Failed to create toolbar\n");
    		return -1;      // fail to create
    	}
     
    // charger la resource d'image par defaut	
    HBITMAP hbm=(HBITMAP)::LoadImage(AfxGetInstanceHandle(),MAKEINTRESOURCE(IDR_TOOLBAR),
    		IMAGE_BITMAP,
    		0,0, 
    		LR_CREATEDIBSECTION|LR_LOADMAP3DCOLORS);
    	CBitmap bm;
    	bm.Attach(hbm);
    // charger la resource d'image pour le survol
    	HBITMAP hbm1=(HBITMAP)::LoadImage(AfxGetInstanceHandle(),MAKEINTRESOURCE(IDR_TOOLBAR1),
    	IMAGE_BITMAP,
    	0,0, 
    	LR_CREATEDIBSECTION|LR_LOADMAP3DCOLORS);
    	CBitmap bm1;
    	bm1.Attach(hbm1);
    // charger la resource d'image pour l'etat desactivé	
    	HBITMAP hbm2=(HBITMAP)::LoadImage(AfxGetInstanceHandle(),MAKEINTRESOURCE(IDR_TOOLBAR2),
    	IMAGE_BITMAP,
    	0,0, 
    	LR_CREATEDIBSECTION|LR_LOADMAP3DCOLORS);
    	CBitmap bm2;
    	bm2.Attach(hbm2);
     
    // on créé les limages listes et on leur associe les resources en 24 bits.
    	m_ilToolBar.Create(32,30,ILC_COLOR24,20,20);
    	m_ilToolBar.Add(&bm,(CBitmap*)NULL);
    	m_ilToolBar1.Create(32,30,ILC_COLOR24,20,20);
    	m_ilToolBar1.Add(&bm1,(CBitmap*)NULL);
    	m_ilToolBar2.Create(32,30,ILC_COLOR24,20,20);
    	m_ilToolBar2.Add(&bm2,(CBitmap*)NULL);
     
     
    	// image par defaut
    	m_wndToolBar.GetToolBarCtrl().SetImageList(&m_ilToolBar);
    	// image lors du survol souris
    	m_wndToolBar.GetToolBarCtrl().SetHotImageList(&m_ilToolBar1);
                 // image en mode desactivé
    	m_wndToolBar.GetToolBarCtrl().SetDisabledImageList(&m_ilToolBar2);
     
    	// setting des textes a inclure sous les vignettes.
    	// a declarer obligatoirement avant le CToolBar::SetSizes
    	m_wndToolBar.SetButtonText(0,(LPCTSTR)""); //Saisie");
     
    // ici les contenus textes sont vides, mais l'exemple est valide, pret à servir.
    	m_wndToolBar.SetButtonText(1,(LPCTSTR)""); //Chercher");
    	m_wndToolBar.SetButtonText(2,(LPCTSTR)""); //Tarifs");
    	m_wndToolBar.SetButtonText(3,(LPCTSTR)""); //Clients");
    	m_wndToolBar.SetButtonText(4,(LPCTSTR)""); //Transporteur");
    	m_wndToolBar.SetButtonText(5,(LPCTSTR)""); //Expediteur");
    	m_wndToolBar.SetButtonText(6,(LPCTSTR)""); //Config");
    	m_wndToolBar.SetButtonText(7,(LPCTSTR)""); //à propos..");
    	m_wndToolBar.SetButtonText(9,(LPCTSTR)""); //Lacher");
    	m_wndToolBar.SetButtonText(10,(LPCSTR)""); //Anomalies");
    	m_wndToolBar.SetButtonText(11,(LPCTSTR)""); //EDI");
     
    	// redimensionnement des zones de la toolbar pour prise en compte des zones texte
    	m_wndToolBar.SetSizes(CSize::CSize(40,38),CSize::CSize(32,30)); // pour rajouter la hauteur pour les textes descriptifs, on peut mettre le dernier argument à 75 par exemple. **************************************************************************************
    // mise en place de la toolbar en 24 bits couleur achevée...
    profites et savoure, ca s'est pas trouvé tout seul..
    tiens, farscape, celui la faudrait l'integrer dans la faq, je viens de voir qu'il y était pas..

  3. #3
    Membre du Club
    Inscrit en
    Avril 2005
    Messages
    125
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 125
    Points : 56
    Points
    56
    Par défaut
    Merci de ta réponse eomer212. Ca fonctionne en effet.

    Voici ce que j'ai fait pour adapter ta solution :

    - Dans GIMP, j'ai créé un "bandeau" en couleur 24bits avec toutes les icones les unes à côtés des autres. Hauteur = 32, largeur = 608 (19 icones).

    - J'ai positionné l'image mainframe_24bits.bmp dans le répertoire "\res" de mon application

    - Dans les propriétés de ma toolbar j'ai remplacé le "res\mainframe.bmp" par "res\mainframe_24bits.bmp".


    Ca marche impeccable.

    J'ai ensuite converti la "mainframe_24bits.bmp" en niveau de gris, je l'ai appelé "mainframe_24bits_inactive.bmp". Je l'ai positionnée dans le répertoire "\res".

    Ce dont je ne suis pas certain d'avoir bien fait :

    J'ai créé une nouvelle toolbar que j'ai appelée IDR_MAINFRAIME_INACTIVE. Je l'ai liée (dans les propriétés) à "res\mainframe_24bits_inactive.bmp"

    Cela fonctionne, quand les icones sont inactives, elles sont grises.


    Mon nouveau souci :
    quand je double clique sur la ressource IDR_MAINFRAME un message d'erreur :
    The bitmap has been imported correctly, however because it contains more than 256 colors, it cannot be loaded in the bitmap editor.
    Cela me pariat assez logique. Sauf que je souhaiterais savoir comment gérer la ma toolbar désormais. Par exemple, comment ajouter un nouveau bouton, ou un séparateur entre deux boutons puisque je n'ai plus accès à l'interface.

    Merci de ta réponse "eomer212" si tu repasses par la !

  4. #4
    Membre confirmé
    Profil pro
    Développeur indépendant
    Inscrit en
    Août 2004
    Messages
    373
    Détails du profil
    Informations personnelles :
    Âge : 55
    Localisation : France

    Informations professionnelles :
    Activité : Développeur indépendant
    Secteur : Transports

    Informations forums :
    Inscription : Août 2004
    Messages : 373
    Points : 512
    Points
    512
    Par défaut ajouter une icone
    quand tu ajoutes une icone, tu le fait d'abord dans ta toolbar IDR_MAINFRAME, pour qu'elle puisse gerer les messages necessaires, click, survol, actif, inacxtif. etc..

    ca , ca gere le 16 bits.
    pour ajouter les icones correspondantes en 24 bits, il faut le faire à la main en redimenssionnant les resources 24bits correspondantes.
    question, pourquoi une deuxieme toolbar.?

    rappel: tu cree une toolbar 16 bits, et le truc c'est de mapper des images en 24 bits par dessus, grace aux cimagelists.
    il n'y a qu'une seule ctoolbar.. mais trois images lists pour les trois etats.

  5. #5
    Membre du Club
    Inscrit en
    Avril 2005
    Messages
    125
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 125
    Points : 56
    Points
    56
    Par défaut
    Effectivement, je n'ai pas besoin de plusieurs Toolbar.

    J'avais mal intégré les images : je les avais liées directement dans les propriétés de la ressource toolbar au lieu de les intégrer en tant que bitmap et laisser le code surcharger tout ça.

    Pour ceux que cela intéresse (avant que cela soit intégré dans la FAQ), voici la démarche que j'ai suivie:

    Dans les ressources "Toolbar", il faut avoir créé une barre d'outils avec tout ce qui va bien (Nombre de boutons, dimension, place...)

    Sous un logiciel de dessin (j'ai utilisé GIMP), réaliser une image bmp dont les propriétés sont les suivante :
    - hauteur = hauteur d'un bouton (pour moi 32 pixels)
    - largeur = nombre de boutons * largeur d'un bouton (pour moi 19 boutons --> 608 pixels)

    Enregsitrer cette image en couleur 24 bits (je l'ai positionnée dans le répertoire "res" de mon projet C++).

    Dans les ressources, fait un clic droit sur "Bitmap" et "import". Aller chercher l'image bmp et la nommer (exemple ici, IDR_TOOLBAR).

    Insérer le code de eomer212 et le tour est joué.

    Je n'ai pas utilisé IDR_TOOLBAR1, je l'ai donc remplacé dans le code par IDR_TOOLBAR.

    Pour IDR_TOOLBAR2, j'ai simplement converti mon image en mode "niveau de gris", enregistré sour un autre nom (.bmp) et inséré dans les bitmaps en tant que IDR_TOOLBAR2.

    Pour ajouter un nouveau bouton, il suffit de l'ajouter dans la ressource ToolBar (comme avant), puis de retravailler l'image bmp pour ajouter un bouton visuel. Le tour est joué.

    Merci et bravo eomer212

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Bitmap 256 couleurs
    Par XavierBreuer dans le forum C++Builder
    Réponses: 5
    Dernier message: 05/05/2006, 14h15
  2. Palette 256 couleurs
    Par kivan666 dans le forum Graphisme
    Réponses: 9
    Dernier message: 01/04/2006, 23h39
  3. Réponses: 1
    Dernier message: 30/12/2005, 17h14
  4. Vitesse de transfert en mode VESA 800*600 256 couleurs
    Par chep dans le forum Assembleur
    Réponses: 9
    Dernier message: 28/05/2004, 11h53
  5. DirectDraw: Créer des surfaces 256 couleurs
    Par Magus (Dave) dans le forum DirectX
    Réponses: 5
    Dernier message: 14/10/2002, 22h28

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo