begin process at 2012 05 29 00:28:13
  Trouver un code source :
 
dans
 
Accueil > Forum > 

Archive C/C++

 > 

Archives

 > 

Au secours

 > 

Colorier un static : HEeeeeeeelp !!!


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

Colorier un static : HEeeeeeeelp !!!

lundi 1 décembre 2003 à 23:22:02 | Colorier un static : HEeeeeeeelp !!!

sprintjeffC

salut @ tous

je me mets a la programmation windows en C/C++ (pas VC++ merci ... quitte à faire du microsoft je préfère VB ;-). Je démarrai pas mal et tout et tout et puis : catastrophe je me heurte à un truc infaisable : attention vous allez rire :

j'arrive pas à colorier un static !!!! :-///

(le truc qui se fait en 2 nano-secondes en vb bravo la productivité ;-)

qqn saura-t-il m'aider ??????????
help !!!!

voici un tout petit bout de code, je voudrais que la couleur de fond du static soit de la même que celle de la fenêtre !!! C pas la mere à boire quand même :-)))

merci 1000x d'avance

sprintjeffc désespéré (à 2 doigts de se remettre au Dr logo ;-)

#include <windows.h> // include pour programmation windows

#define ID_STATIC_1 1 // ID static

HWND ghwnd; // déclaration handle de la fenêtre

// Gestion des évènements sur la fenêtre
LRESULT CALLBACK WinProc(HWND, UINT, WPARAM, LPARAM);

// La main avec windows.h
int WINAPI WinMain(HINSTANCE FirstInstance, HINSTANCE PrevInstance, LPSTR CmdLine, int CmdShow)
{

MSG msg;
WNDCLASSEX wc;

// --------------------------------------------------------------------------------

// Enregistrement classe Window
wc.hInstance = FirstInstance; // instance
wc.lpszClassName = "Window"; // nom de la classe
wc.lpfnWndProc = WinProc; // adresse de la procédure
wc.style = CS_DBLCLKS; // style
wc.cbSize = sizeof(WNDCLASSEX); // taille
wc.hIcon = LoadIcon(NULL, IDI_APPLICATION); // grande icone
wc.hIconSm = LoadIcon(NULL, IDI_APPLICATION); // petite icone
wc.hCursor = LoadCursor(NULL, IDC_ARROW); // curseur
wc.lpszMenuName = NULL; // menu
wc.cbClsExtra = 0;
wc.cbWndExtra = 0;
wc.hbrBackground = (HBRUSH)GetStockObject(LTGRAY_BRUSH); // couleur de fond
if (!RegisterClassEx(&wc))
{
MessageBox(NULL, "Erreur lors de l'initialisation de la classe Window.", "Erreur", MB_OK);
return 0;
}

// --------------------------------------------------------------------------------

// Création de la fenêtre
ghwnd = CreateWindowEx(0, "Window", "Crypteur/décrypteur XOR",
WS_OVERLAPPEDWINDOW,
CW_USEDEFAULT, CW_USEDEFAULT, 530, 260,
HWND_DESKTOP, NULL, FirstInstance, NULL);
if (ghwnd == NULL)
{
MessageBox(NULL, "Erreur lors de la création d'une fenêtre.", "Erreur", MB_OK);
return 0;
}

// Création du static (avec classe prédéfinie)
HWND hstaSTA1 = CreateWindow( "STATIC", "Texte statique",
WS_CHILD | WS_VISIBLE | SS_LEFT,
362, 200, 155, 18,
ghwnd,
(HMENU)ID_STATIC_1,
FirstInstance, NULL );
if (hstaSTA1 == NULL)
{
MessageBox(ghwnd, "Erreur lors de la création d'un static.", "Erreur", MB_OK);
return 0;
}

// --------------------------------------------------------------------------------

// Envoit du texte
SetWindowText(hstaSTA1, " jerome.ferquel@free.fr ");
UpdateWindow(hstaSTA1);

// Affichage de la fenêtre
ShowWindow(ghwnd, SW_SHOW);
UpdateWindow(ghwnd);

// --------------------------------------------------------------------------------

// Boucle qui permet au programme de tourner sans arrêt et de guetter les
// évènement pour les envoyer à la procédure qui les gère (ci dessous)
while (GetMessage(&msg, NULL, 0, 0))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
return msg.wParam;

}

// Evènements sur la fenêtre
LRESULT CALLBACK WinProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
{

char chRretour;

switch (msg)
{

// Fermeture du programme
case WM_DESTROY:

// Ferme le programme
PostQuitMessage(0);
break;

// Fermeture de la fenêtre via le menu système ou la croix(X) noir
case WM_CLOSE:

// Décharge la fenêtre
DestroyWindow(hwnd);
break;

case WM_CTLCOLORSTATIC :
//MessageBox(ghwnd, "coucou", "Debug", MB_OK);
//Je l'aisse cette entrée car qqn sur le forum m'a dit que ça se passait ici ...
break;

default:

return DefWindowProc(hwnd, msg, wParam, lParam);
break;

}

return 0;

}
lundi 1 décembre 2003 à 23:45:58 | Re : Colorier un static : HEeeeeeeelp !!!

BruNews

Administrateur CodeS-SourceS
Faut pas confondre VC++ et MFC.
A part cela ce qui t'interesse est dans ma source "CHOIX DE COULEURS".
BruNews, ciao...
mardi 2 décembre 2003 à 10:57:55 | Re : Colorier un static : HEeeeeeeelp !!!

Anacr0x

tu as 2 possibilité pour avoir une couleur uniforme :
1/ Tu met au tt début un static vide qui couvre tte la surface de l'appli (c plus de la bidouille qu'autre chose mais ça marche)
2/ Tu rajoute dans ton switch :
case WM_CTLCOLORSTATIC:
SetBkMode((HDC) wParam, TRANSPARENT);
return (BOOL)(HBRUSH)(COLOR_WINDOW);

voila, jsuis plus très sur mais ca devrait marcher
mardi 2 décembre 2003 à 22:45:23 | Re : Colorier un static : HEeeeeeeelp !!!

sprintjeffC

merci brunews mais ton source choix des couleurs est absolument inexploitable, tout juste bon à décourager un débutant. la 1er qualité d'un code c d'etre bien commenté ...

anacr0x : ça marche po ... :-///

pour le coup du static grand comme la fenêtre y a qd même un pbm si l'utilisateur agrandit la fenêtre !

merci qd même

sprinjeff
mercredi 3 décembre 2003 à 15:53:53 | Re : Colorier un static : HEeeeeeeelp !!!

Anacr0x

bizar ke ca marche pas, j'ai vérifié, et moi je mettais :

// ca au tt début
HBRUSH hBrush=(HBRUSH)(COLOR_WINDOW);

// pi la création de la classe
WNDCLASSEX wc;
wc.hInstance = MainInstance;
// etc etc...
wc.hbrBackground = hBrush; // la jmet la meme couleur que pour les static


// pi ds le switch
case WM_CTLCOLORSTATIC:
SetBkMode((HDC) wParam, TRANSPARENT);
return (BOOL) hBrush;


Et ca devrait marcher...

Enfin, pour le static, soit tu bloque le redimensionement, soit tu prévoit un static assez grand (+ de 1024x768 koi)
mercredi 3 décembre 2003 à 21:56:24 | Re : Colorier un static : HEeeeeeeelp !!!

sprintjeffC


TU ES GRAND CA MARCHE !!! (faut donner toutes les instructions je vais pas les trouver tout seul ;-) En fait j'ai utilisé la fonction getstockobject pour balancer le même gris dans la fenêtre et les static !!!

merci 100Ox

Kdo => voici le code de mon petit crypteur quasi achevé grâce à toi :

// To do :
// - icône dans fenêtre
// - voir remarques brunews

// Rappel normes de nommage des variables
// Dsl je suis VB-iste à la base ;-)
// - 'g' si variable niveau global, 'm' si niveau module, rien si local
// - sur 3 caratères : rappel type variable
// - sur n caracteres : non de la variable
// Ex : mhwndMaFenetre = handle pour window niveau module MaFenetre
// Si nommage utilisé une seule fois le préfixe suffit (ex : mhwnd)
// Tableaux : gtoi = global table of integers

#include <windows.h> // include pour programmation windows
#include <string.h> // pour strcpy, ...
#include <stdlib.h> // pour atoi, ...

#define ID_EDITBOX_1 1 // ID editbox
#define ID_EDITBOX_2 2
#define ID_EDITBOX_3 3
#define ID_BUTTON_1 1 // ID boutons
#define ID_BUTTON_2 2
#define ID_STATIC_1 1 // ID static
#define ID_STATIC_2 2

HWND ghwnd; // déclaration handle fenêtre
HWND ghedbEDB1; // déclaration handle editbox
HWND ghedbEDB2;
HWND ghedbEDB3;

// Astuce pour colorier les static
HBRUSH hbr =(HBRUSH)GetStockObject(LTGRAY_BRUSH);

// Gestion des évènements sur la fenêtre
LRESULT CALLBACK WinProc(HWND, UINT, WPARAM, LPARAM);
// Fonction de cryptage, décryptage
char fCrypte (char chCryptage);

// La main avec windows.h
int WINAPI WinMain(HINSTANCE FirstInstance, HINSTANCE PrevInstance, LPSTR CmdLine, int CmdShow)
{

MSG msg;
WNDCLASSEX wc;

// --------------------------------------------------------------------------------

// Enregistrement classe Window
wc.hInstance = FirstInstance; // instance
wc.lpszClassName = "Window"; // nom de la classe
wc.lpfnWndProc = WinProc; // adresse de la procédure
wc.style = CS_DBLCLKS; // style
wc.cbSize = sizeof(WNDCLASSEX); // taille
wc.hIcon = LoadIcon(NULL, IDI_APPLICATION); // grande icone
wc.hIconSm = LoadIcon(NULL, IDI_APPLICATION); // petite icone
wc.hCursor = LoadCursor(NULL, IDC_ARROW); // curseur
wc.lpszMenuName = NULL; // menu
wc.cbClsExtra = 0;
wc.cbWndExtra = 0;
wc.hbrBackground = hbr; // couleur de fond
if (!RegisterClassEx(&wc))
{
MessageBox(NULL, "Erreur lors de l'initialisation de la classe Window.", "Erreur", MB_OK);
return 0;
}

// --------------------------------------------------------------------------------

// Création de la fenêtre
ghwnd = CreateWindowEx(0, "Window", "Crypteur/décrypteur XOR",
WS_OVERLAPPEDWINDOW,
CW_USEDEFAULT, CW_USEDEFAULT, 530, 260,
HWND_DESKTOP, NULL, FirstInstance, NULL);
if (ghwnd == NULL)
{
MessageBox(NULL, "Erreur lors de la création d'une fenêtre.", "Erreur", MB_OK);
return 0;
}

// Création des editbox (avec classe prédéfinie)
ghedbEDB1 = CreateWindowEx(WS_EX_OVERLAPPEDWINDOW, "EDIT", "",
WS_VISIBLE|WS_CHILD|ES_AUTOHSCROLL|ES_NOHIDESEL,
10, 10, 500, 25,
ghwnd, (HMENU)ID_EDITBOX_1, FirstInstance, NULL);
ghedbEDB2 = CreateWindowEx(WS_EX_OVERLAPPEDWINDOW, "EDIT", "",
WS_VISIBLE|WS_CHILD|ES_AUTOHSCROLL|ES_NOHIDESEL,
10, 50, 500, 25,
ghwnd, (HMENU)ID_EDITBOX_2, FirstInstance, NULL);
ghedbEDB3 = CreateWindowEx(WS_EX_OVERLAPPEDWINDOW, "EDIT", "",
WS_VISIBLE|WS_CHILD|ES_AUTOHSCROLL|ES_NOHIDESEL,
340, 120, 130, 25,
ghwnd, (HMENU)ID_EDITBOX_3, FirstInstance, NULL);
if (ghedbEDB1 == NULL && ghedbEDB2 == NULL && ghedbEDB3 == NULL)
{
MessageBox(ghwnd, "Erreur lors de la création d'une editbox.", "Erreur", MB_OK);
return 0;
}

// Création des boutons (avec classe prédéfinie)
HWND hbtnBTN1 = CreateWindowEx(0, "BUTTON", "",
WS_VISIBLE|WS_CHILD|BS_PUSHBUTTON|BS_NOTIFY|BS_TEXT,
40, 120, 100, 50,
ghwnd, (HMENU)ID_BUTTON_1, FirstInstance, NULL);
HWND hbtnBTN2 = CreateWindowEx(0, "BUTTON", "",
WS_VISIBLE|WS_CHILD|BS_PUSHBUTTON|BS_NOTIFY|BS_TEXT,
160, 120, 100, 50,
ghwnd, (HMENU)ID_BUTTON_2, FirstInstance, NULL);
if (hbtnBTN1 == NULL && hbtnBTN2 == NULL)
{
MessageBox(ghwnd, "Erreur lors de la création d'un bouton.", "Erreur", MB_OK);
return 0;
}

// Création des static (avec classe prédéfinie)
HWND hstaSTA1 = CreateWindow("STATIC", "",
WS_CHILD | WS_VISIBLE | SS_LEFT,
290, 120, 50, 18,
ghwnd,
(HMENU)ID_STATIC_1,
FirstInstance, NULL );
HWND hstaSTA2 = CreateWindow("STATIC", "",
WS_CHILD | WS_VISIBLE | SS_LEFT,
358, 200, 150, 18,
ghwnd,
(HMENU)ID_STATIC_1,
FirstInstance, NULL );
if (hstaSTA1 == NULL || hstaSTA2 == NULL)
{
MessageBox(ghwnd, "Erreur lors de la création d'un static.", "Erreur", MB_OK);
return 0;
}

// --------------------------------------------------------------------------------

// Envoi de texte sur les objets
SetWindowText(ghedbEDB1, "Taper ici le texte à crypter/décrypter de 5000 caractères maximum ...");
UpdateWindow(ghedbEDB1);
SetWindowText(ghedbEDB3, "int.int.int ...");
UpdateWindow(ghedbEDB3);
SetWindowText(hbtnBTN1, "Crypter");
UpdateWindow(hbtnBTN1);
SetWindowText(hbtnBTN2, "Décrypter");
UpdateWindow(hbtnBTN2);
SetWindowText(hstaSTA1, " Clef : ");
UpdateWindow(hstaSTA1);
SetWindowText(hstaSTA2, " jerome.ferquel@free.fr ");
UpdateWindow(hstaSTA2);

// Affichage de la fenêtre
ShowWindow(ghwnd, SW_SHOW);
UpdateWindow(ghwnd);

// Met le focus sur l'editbox 1
SetFocus(ghedbEDB1);

// --------------------------------------------------------------------------------

// Boucle qui permet au programme de tourner sans arrêt et de guetter les
// évènement pour les envoyer à la procédure qui les gère (ci dessous)
while (GetMessage(&msg, NULL, 0, 0))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
return msg.wParam;

}

// Evènements sur la fenêtre
LRESULT CALLBACK WinProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
{

char chRretour;

switch (msg)
{

// Fermeture du programme
case WM_DESTROY:

// Ferme le programme
PostQuitMessage(0);
break;

// Fermeture de la fenêtre via le menu système ou la croix(X) noir
case WM_CLOSE:

// Décharge la fenêtre
DestroyWindow(hwnd);
break;

// Réception des évènements sur les objets
case WM_COMMAND:

// editbox
if (LOWORD(wParam) == ID_EDITBOX_1 || LOWORD(wParam) == ID_EDITBOX_2 )
{
switch (HIWORD(wParam))
{

case EN_ERRSPACE:

MessageBox(ghwnd, "Mémoire insuffisante sur la station !!!", "Erreur", MB_OK);
break;

case EN_MAXTEXT:

MessageBox(ghwnd, "Le nombre maximum de caractères dans une editbox a été atteint !!!", "Erreur", MB_OK);
break;

case EN_CHANGE:
//MessageBox(ghwnd, "Le contenu d'une editbox à changé.", "EN_CHANGE", MB_OK);
break;

default:

break;

}

}

// Bouton Crypter
// Vérifie que c'est bien le bouton et vérifie qu'on à cliqué dessus
if ((LOWORD(wParam) == ID_BUTTON_1) && (HIWORD(wParam) == BN_CLICKED))
{
if(fCrypte(1) != 1)
{
MessageBox(ghwnd, "Zut ... le cryptage a planté ???", "Crytpage", MB_OK);
}
break;
}

// Bouton Décrypter
// Vérifie que c'est bien le bouton et vérifie qu'on à cliqué dessus
if ((LOWORD(wParam) == ID_BUTTON_2) && (HIWORD(wParam) == BN_CLICKED))
{
if(fCrypte(2) != 1)
{
MessageBox(ghwnd, "Zut ... le décryptage a planté ???", "Décrytpage", MB_OK);
}
}

break;

case WM_CTLCOLORSTATIC :
// Coloration des static
SetBkMode((HDC) wParam, TRANSPARENT);
return (BOOL) hbr;
break;

default:

return DefWindowProc(hwnd, msg, wParam, lParam);
break;

}

return 0;

}

char fCrypte (char chCryptage)
{

int i, iLongueur, iIndiceMax, iNbEltClef;
int toiClef[50];
char sIn[5000] = " ";
char sOut[5000] = " ";
char sClef[500] = " ";
char sTmpClef[500] = " ";
char *sTmp1;

// Récupère la chaine à crypter
GetWindowText(ghedbEDB1, sIn, 5000);
// Récupère la clé de cryptage
GetWindowText(ghedbEDB3, sTmpClef, 500);

// Contrôles
if (strcmp(sTmpClef,"int.int.int ...") == 0)
{
MessageBox(ghwnd, "Il faut saisir une clef (ex : 2.456.8.7.78) ...", "M'enfin ???", MB_OK|MB_ICONINFORMATION);
return 1;
}
if (strlen(sTmpClef) >= 500)
{
MessageBox(ghwnd, "500 caractères max dans la clef (séparateur compris) ... tronquée au delà !!!", "Warning ...", MB_OK|MB_ICONINFORMATION);
}

// Chargement clé
// On la charge à l'envers car strrchr analyse en commençant par la fin
strcpy(sClef, ".");
strcat(sClef, sTmpClef);
iNbEltClef = 0;
while (*sClef != 0 && iNbEltClef <= 50)
{
sTmp1 = strrchr(sClef, 46); // 46 = code ascii décimal de '.'
sTmp1 = sTmp1+1;
toiClef[iNbEltClef] = atoi(sTmp1);
sTmp1 = sTmp1-1;
*sTmp1 = 0;
iNbEltClef++;
}
if (iNbEltClef > 50)
{
MessageBox(ghwnd, "50 eléments dans la clef ça me semblait pourtant suffisant !!!", "Overflow ...", MB_OK|MB_ICONINFORMATION);
return 0;
}

// Applique le XOR avec la clé
iLongueur = strlen(sIn);
iIndiceMax = iLongueur - 1;
for(i=0; i<iLongueur; i++)
{
if (chCryptage == 1)
{
sOut[i]= sIn[iIndiceMax-i] ^ toiClef[i%iNbEltClef];
}
else // =2, décryptage
{
sOut[iIndiceMax-i]= sIn[i] ^ toiClef[i%iNbEltClef];
}
}

// Met le résultat dans l'editbox 2
SetWindowText(ghedbEDB2, sOut);
UpdateWindow(ghedbEDB2);

return 1;

}
mercredi 3 décembre 2003 à 22:08:02 | Re : Colorier un static : HEeeeeeeelp !!!

Anacr0x

Effectivement, je suis grand !! 1m92 quand même (^_^)
bon d'accord c nul ce jeux de mot... (g honte)

Petite rectification sur ton code, au lieu de :
if ((LOWORD(wParam) == ID_BUTTON_2) && (HIWORD(wParam) == BN_CLICKED))

met :
if(wParam==ID_BUTTON_2)
ca suffit (c'est d'ailleur BruNews qui m'avais montré ça)

et comme tu en as beaucoup, tu peut meme remettre un switch pour wParam, ca sera encore plus simple
mercredi 3 décembre 2003 à 22:19:38 | Re : Colorier un static : HEeeeeeeelp !!!

BruNews

Administrateur CodeS-SourceS
En plus d'etre grand, il imprime bien Anacr0x.
BruNews, ciao...
mercredi 3 décembre 2003 à 22:32:12 | Re : Colorier un static : HEeeeeeeelp !!!

sprintjeffC


mais oui toi aussi tu es grand brunews ;-))) tu me l'avais donné la manip et j'avais bien l'intention de l'appliquer !!!

pour une fois qu'en C/C++ & API windows on peut remplacer une instruction de 30 caractère par une autre de 10, quel bonheur ;-)

en + ce soir g reussi à coller une icône dans ma fenêtre c vraiment un grand soir !!! merci les gars arf ...

+
Sprintjeff
mercredi 3 décembre 2003 à 22:34:04 | Re : Colorier un static : HEeeeeeeelp !!!

Anacr0x

Merci BruNews, c pas tt les jours qu'on a le droit a un petit compliment de ta part, ca me fait plaisir

Mais en même temps, heureusement que jme souvient de ce que j'apprend en prog, ca serait inquiétant sinon, je risquerait de régrésser !

1 2

Cette discussion est classée dans : static, fenêtre, hwnd, msg, wc


Répondre à ce message

Sujets en rapport avec ce message

ressources et API !!!! [ par Xs ] salut !voila, pour me simplifier la tache, j'utlise les ressources pour creer une boite de dialog (sous VC++ 6).mais j'obtiens, lors de la compilation pb avec le plein écran de DirectX que je veux enlever [ par Diabolus ] Bonjour à tous !Je souhaiterai créer une fenêtre en mode normal et tout ce que j'arrive à faire c'est du plein écran. J'aimerai enlever le plein écran dev sans MFC [ par c2millet ] Voilà j'essaie de faire un prog sans MFC et je voudrais changer la couleur de text d'un bouton ainsi que ça couleur de fond.Si qqun peu m'aider mercim bmp dans static [ par Arnaud16022 ] bonjourvoila je veux mettre un bmp dans un static.dans le fichier rc ya:SniperImg BITMAP "C:/sniper.bmp"et dans le main ya (en simplifie)#include LRES SenMessage [ par stgi02 ] bonjour, j' aimerai envoyer un message dans ma fenêtre principale mais j'ai un problème avec la fonction SendMessage ( HWND hWnd,UINT Msg,WPARAM Wpar Fenetre windows en cpp [ par FeelCode ] bon j'essaye de cree une fenetre windows tout simple mai j'ai un probleme de convertion voir le code plus bas.//************************************** Lancement d'un programme via un service [ par laetitiavincent ] Bonjour tout le mondeVoilà mon problème : j'ai fait un petit prog qui, lorsqu'il y a fermeture de session ou de windows, il me lancer une fonction  to 2 Questions : icone fenetre & Taille... [ par clabe ] Bonjour, Je voudrais savoir comment je pourrais tout d'abord changer l'icone dans la barre de titre de ma fenetre... Ensuite j'aurais aimé savoir comm Problème graphique avec C [ par le1scorpion1noir ] salut a tous je peux savoir c'est quoi le meilleur logiciel pour programmer en C puis y t il une différence entre le C et le C++ ? je débute et j ess Problème avec fichier manifest [ par Sceyllia ] Bonjour à tous, J'aurais besoin de l'avis de connaisseurs en c/c++ pour m'éclairer sur le soucis que j'ai depuis quelques semaines concernant ce morc


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 : 0,546 sec (3)

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