La lib pour fenetre win32

Soyez le premier à donner votre avis sur cette source.

Snippet vu 6 071 fois - Téléchargée 35 fois

Contenu du snippet

c une lib qui facilite la mise de boutons, edit et static ainsi un gettext() et dotre
vou pouvez lameliorez

Source / Exemple :


#include <windows.h>

#define Label_ID   100
#define Text_ID    200
#define Command_ID 300

void CreateStatic(int, char*, int, int, int, int,HWND);
void CreateEdit(int, char*, int, int, int, int, bool, bool, bool, bool,HWND);
void CreateCommand(int, char*, int, int, int, int,HWND);
char *GetText(HWND);
void SetFont(HWND);

HINSTANCE hInst;
HWND label[100], edit[100], command[100];

void CreateStatic(int Index, char* Text, int Left, int Top, int Width, int Height,HWND fen)
{
int ID = Label_ID + Index;
label[Index] = CreateWindowEx(0, "STATIC", Text, WS_VISIBLE|WS_CHILD,Left, Top, Width, Height, fen, (HMENU)ID, hInst, NULL);
SetFont(label[Index]);
}

void CreateEdit(int Index, char* Text, int Left, int Top, int Width, int Height, bool MultiLine, bool HScroll, bool VScroll, bool Locked,HWND fen)
{
int ID = Text_ID + Index;
edit[Index] = CreateWindowEx(WS_EX_OVERLAPPEDWINDOW, "EDIT", Text, WS_VISIBLE|WS_CHILD|ES_WANTRETURN|ES_LEFT|(MultiLine ? ES_MULTILINE|ES_AUTOVSCROLL : 0)|(HScroll ? WS_HSCROLL|ES_AUTOHSCROLL : 0)|(VScroll ? WS_VSCROLL : 0)|(Locked ? ES_READONLY : 0), Left, Top, Width, Height, fen, (HMENU)ID, hInst, NULL);
SetFont(edit[Index]);
}

void CreateCommand(int Index, char* Text, int Left, int Top, int Width, int Height,HWND fen)
{
int ID = Command_ID + Index;
command[Index] = CreateWindowEx(0, "BUTTON", Text, WS_VISIBLE|WS_CHILD|BS_PUSHBUTTON|BS_NOTIFY|BS_TEXT,Left, Top, Width, Height, fen, (HMENU)ID, hInst, NULL);
SetFont(command[Index]);
}

void SetFont(HWND hWnd)
{
SendMessage(hWnd, WM_SETFONT, (WPARAM)GetStockObject(DEFAULT_GUI_FONT), MAKELPARAM(TRUE, 0));
}

char *GetText(HWND hWnd)
{
char *Text = "";
unsigned int TextLen = 0;
TextLen = GetWindowTextLength(hWnd);
if(TextLen){
  Text = new char[(TextLen + 2)];
  TextLen = GetWindowText(hWnd, Text, (TextLen + 1));
}
return Text;
}

Conclusion :


pour lutiliser, voici un exemple :

#include <fenetre.h>

#define Command_ID 300

LRESULT CALLBACK WinProc(HWND, UINT, WPARAM, LPARAM);
void Command_Click(int);

int WINAPI WinMain(HINSTANCE instance1, HINSTANCE instance2, LPSTR lps, int nShow)
{
MSG message;
WNDCLASSEX fen;

// Création de la classe
fen.hInstance = instance1; // Instance
fen.lpszClassName = "fenetre"; // Nom de la classe
fen.lpfnWndProc = WinProc; // Adresse de la procédure
fen.style = CS_DBLCLKS; // Style
fen.cbSize = sizeof(WNDCLASSEX); // Taille
fen.hIcon = LoadIcon(instance1,"MAIN"); // Grande icone
fen.hIconSm = LoadIcon(NULL,NULL); // Petite icone
fen.hCursor = LoadCursor(NULL, IDC_ARROW); // Curseur
fen.lpszMenuName = NULL; // Menu
fen.cbClsExtra = 0;
fen.cbWndExtra = 0;
fen.hbrBackground = (HBRUSH)(COLOR_3DFACE+1);
if(!RegisterClassEx(&fen)) return 0;

HWND fenetre = CreateWindowEx(0,"fenetre","Exemple de fenetre",WS_POPUP|WS_CAPTION|WS_SYSMENU|WS_VISIBLE|WS_MINIMIZEBOX,220,20,400,350,HWND_DESKTOP,NULL,hInst,NULL);
if(fenetre == NULL) return 0;

CreateStatic(1,"Un static",50,10,60,21,fenetre);
CreateEdit(2,"Un edit",50,40,60,21, 0,0,0,0,fenetre);
CreateCommand(3,"Un bouton",50,70,60,21,fenetre);

ShowWindow(fenetre, SW_SHOW);
UpdateWindow(fenetre);

while (GetMessage(&message, NULL, 0, 0))
{
TranslateMessage(&message);
DispatchMessage(&message);
}

return message.wParam;
}

LRESULT CALLBACK WinProc(HWND fenetre2, UINT message2, WPARAM wParam, LPARAM lParam)
{
switch (message2)
{
case WM_DESTROY:
PostQuitMessage(0);
break;

case WM_CLOSE:
DestroyWindow(fenetre2);
break;

case WM_COMMAND:
if(HIWORD(wParam) == BN_CLICKED)Command_Click(LOWORD(wParam) - Command_ID);
break;

default:
return DefWindowProc(fenetre2,message2,wParam,lParam);
break;
}
return 0;
}

void Command_Click(int Index)
{
switch(Index)
{
case 1:
break;
}
}

A voir également

Ajouter un commentaire Commentaires
Krox68 Messages postés 157 Date d'inscription jeudi 17 octobre 2002 Statut Membre Dernière intervention 11 septembre 2004 1
9 sept. 2003 à 18:44
voila voila,
jatten les commentaires des dieux de l'API win32...
BruNews Messages postés 21041 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
9 sept. 2003 à 18:55
Pourquoi empiler tous ces parametres vers une fonction qui les empilera a son tour pour CreateWindowEx(), autant les lui passer directement. Je ne cerne pas bien l'inreret de la chose.
Anacr0x Messages postés 515 Date d'inscription dimanche 25 mai 2003 Statut Membre Dernière intervention 27 avril 2006 2
9 sept. 2003 à 21:18
ca simplifie pas beaucou la création de fenetre quand mem... une fois que ta un squelette de pret, c presque du copier collé... Et puis ca limite beaucoup les choix de style et autre.
Enfin bon, peut-etre que ca interesse des personnes, a vrai dire j'en sé rien
Utilisateur anonyme
1 mars 2004 à 11:29
Si qqn a besoin d'une lib qui simplifie vraiment qqch, y'a la WLib :

http://freecodz.net/articles/WLib.html

Pas encore trés complète mais ca devient presque du VB (non visuel lol)
janko_math Messages postés 4 Date d'inscription jeudi 8 avril 2004 Statut Membre Dernière intervention 12 juin 2004
12 juin 2004 à 04:47
vbnul: c sympa ta classe, ca ressemble au classe qui exixte deja.
Mais pourkoi dans ta classe window faire des tableaux sur de listes box et des button. T'aurai meilleur temps de créer une classe abstraite dont heriterait ces deux derniers.
Apres tu fais un tableu de cette classe abstraite, et par polymorphisme c'est reglé.
Et aprés ca te permet d'ajouter plein d'autre objet de nature différente.
Et plutot qu'un tableau tu devrais faire une liste chainée, ca te permetterait d'avoir un controle entierement dynamique de tes fenetres.
Et pour que ce soit parfait tu devrai faire la boucle principal de ta fenetre dans un Thread ou alors faire un Timer sur la boucle pour qu'elle cheque les messages toutes les 100 millisecondes ou plus, ca suffit.
Voila le genre d'amelioration que tu peut apporter.
Base toi sur les modeles qui existent en java tu verras c bien fait.

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.