Vous vous apprêtez à lire un tutoriel rédigé par un membre de ce site. Malgré tout le soin que ce membre a pu apporter au tutoriel, nous ne pouvons pas garantir que les informations contenues sur cette page sont exactes à 100%. Merci de garder cela en tête lorsque vous lirez cette page ;o)
Vous trouverez ici une mini-documentation remplie au fur et à mesure de l'avancement du tuto.
Voici la liste de toutes les fonctions de l'API Windows que vous avez découvertes dans ce tutoriel.
Pour chaque fonction, j'explique le rôle, ses paramètres et sa valeur de retour.
WinMain
Code : C1
2
3
4
5
6 | int WinMain(
HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPSTR lpCmdLine,
int nCmdShow
);
|
Description
Cette fonction est le point d'entrée de tout programme Windows, c'est elle qui est appelée en premier dans votre programme. C'est en quelque sorte l'équivalent du
main en programme console.
Paramètres
Code : C
Ce paramètre est l'instance de votre programme, c'est-à-dire une sorte d'identifiant unique qui représente votre programme. Ce paramètre est très important, puisqu'il est utilisé dans de nombreuses fonctions ou structures comme
WNDCLASS ou
CreateWindow.
Code : C
Ce paramètre est obsolète depuis la fin de Windows 16-bit, il est toujours mis à
NULL.
Code : C
Ce paramètre est une chaîne de caractères qui contient une copie
conforme de la ligne de commande. Ainsi, contrairement aux programmes console, la ligne de commande n'est pas découpée en arguments mais conservée telle quelle.
Code : C
Ce paramètre a un lien avec
ShowWindow, puisqu'il représente l'état dans lequel doit être affichée la fenêtre du programme : maximisée, minimisée,...
Valeur de retour
Si le
WinMain se termine avant la boucle des messages (voir
GetMessage), alors elle doit retourner 0.
Sinon, lorsqu'elle reçoit le message
WM_QUIT, elle doit renvoyer la valeur contenue dans
wParam (voir l'exemple dans la première partie).
RegisterClass
Code : C1
2
3 | ATOM RegisterClass(
CONST WNDCLASS *lpWndClass
);
|
Description
Cette fonction enregistre une classe de fenêtre pour une utilisation avec
CreateWindow ou
CreateWindowEx.
Cette fonction a maintenant été remplacée par une autre, plus puissante :
RegisterClassEx, mais elle peut très bien continuer à être utilisée.
Paramètres
Le seul paramètre de cette fonction est un pointeur vers une structure de type
WNDCLASS. Pour plus de précision, voir la description de la structure
WNDCLASS.
Valeur de retour
Si la fonction réussit, la valeur retournée est un identifiant unique qui représente cette classe.
Si elle échoue, elle renvoie 0.
CreateWindow
Code : C 1
2
3
4
5
6
7
8
9
10
11
12
13 | HWND CreateWindow(
LPCTSTR lpClassName,
LPCTSTR lpWindowName,
DWORD dwStyle,
int x,
int y,
int nWidth,
int nHeight,
HWND hWndParent,
HMENU hMenu,
HINSTANCE hInstance,
LPVOID lpParam
);
|
Description
Cette fonction, comme son nom l'indique, sert à créer une fenêtre.
Sous Windows, il faut prendre le terme fenêtre au sens large : un contrôle (par exemple un bouton) est aussi une fenêtre.
Paramètres
Code : C
Ce paramètre est le nom d'une classe précédemment enregistrée avec
RegisterClass.
Il existe certaines classes prédéfinies pour les contrôles comme
"BUTTON" pour un bouton.
Voir la liste en annexe.
Code : C
Ce paramètre est le nom de la fenêtre lorsque l'on crée une "vraie" fenêtre.
Lorsqu'il s'agit d'un contrôle, ce paramètre peut être utile (ou non). Voilà une liste non exhaustive :
- Bouton : texte du bouton
- Liste : inutile
- Zone d'édition : texte initial
Code : C
Ce paramètre représente le style de la fenêtre, il résulte en fait de la combinaison de nombreuses styles.
Vous pourrez trouver une liste en annexe.
Il existe une série de styles qui s'appliquent à toutes les fenêtres, et d'autres qui ne s'appliquent qu'à certains contrôles.
Code : C1
2
3
4 | int x,
int y,
int nWidth,
int nHeight
|
Ces paramètres représentent la position et la taille initiales de la fenêtre.
Si x=
CW_USEDEFAULT, alors le système choisit automatiquement la position de la fenêtre.
CW_USEDEFAULT n'est autorisée que si la fenêtre a le style WS_OVERLAPPED, ou un style qui inclut WS_OVERLAPPED comme WS_OVERLAPPEDWINDOW.
Si nWidth=
CW_USEDEFAULT, alors le système choisit automatiquement la taille par défaut de la fenêtre.
La même remarque que ci-dessus s'applique ici.
Code : C
Ce paramètre est l'identifiant du parent de la fenêtre à créer.
Si ce paramètre vaut
NULL, la fenêtre a pour parent le Bureau.
Code : C
Ce paramètre, lors de la création d'une "vraie" fenêtre, est l'identifiant d'un menu qui s'affichera en haut de la fenêtre (vous savez comme 'Fichier', 'Édition', 'Aide', ...).
Lors de la création d'un contrôle, celui-ci représente un entier utilisé pour identifier le contrôle sans son
HWND.
Par exemple:
Code : C1 | HMENU identifiantControle=(HMENU)1000;
|
Il est conseillé de lui donner une valeur supérieure à 100 pour éviter les conflits avec le système.
Si ce paramètre vaut
NULL, la fenêtre n'a pas de menu, ou pas d'identifiant selon le cas.
Code : C
Ce paramètre est l'instance du programme qui crée la fenêtre ; ici en l'occurrence, le vôtre qui est passé en paramètre à
WinMain.
Code : C
Ce paramètre est un pointeur vers ce que vous voulez, il est utilisé pour passer un paramètre supplémentaire lors de la création de la fenêtre.
Voir la notification
WM_CREATE en annexe.
Valeur de retour
Cette fonction renvoie un
handle (poignée) sur votre fenêtre, c'est-à-dire une sorte d'identifiant unique, qui vous servira à communiquer avec votre fenêtre pour (par exemple) créer des contrôles dans votre fenêtre, ou changer sa taille.
Si la valeur de retour vaut
NULL, alors la création a échoué.
ShowWindow
Code : C1
2
3
4 | BOOL ShowWindow(
HWND hWnd,
int nCmdShow
);
|
Description
Cette fonction sert à modifier la visibilité d'une fenêtre.
Paramètres
Code : C
Ce paramètre est le
handle sur la fenêtre dont vous voulez modifier la visibilité.
Vous l'obtenez lors de l'appel à
CreateWindow par exemple.
Code : C
Ce paramètre peut prendre plusieurs valeurs selon la visibilité que vous voulez appliquer.
- SW_HIDE : cache la fenêtre (celle-ci deviendra invisible à l'utilisateur).
- SW_MAXIMIZE : la fenêtre prendra la taille de l'écran.
- SW_MINIMIZE : la fenêtre sera réduite en barre des tâches.
- SW_RESTORE : l'inverse de WS_MINIMIZE, la fenêtre retrouvera son état précédent.
- SW_SHOW : rend la fenêtre visible.
- SW_SHOWDEFAULT : trop compliqué pour l'instant, il faut avoir une connaissance plus approfondie de Windows pour le comprendre.
- SW_SHOWMAXIMIZED : c'est équivalent à SW_SHOW + SW_MAXIMIZE.
- SW_SHOWMINIMIZED : c'est équivalent à SW_SHOW + SW_MINIMIZE
- SW_SHOWMINNOACTIVE : idem que SW_SHOWMINIMIZED, mais la fenêtre n'est pas activée.
- SW_SHOWNA : idem que SW_SHOW mais la fenêtre n'est pas activée.
- SW_SHOWNOACTIVATE : idem que SW_SHOWNORMAL, mais la fenêtre n'est pas activée.
- SW_SHOWNORMAL : active et montre la fenêtre, si celle-ci est minimisée, cela équivaut à SW_RESTORE.
Je fais une petite remarque :
vous avez sûrement remarqué que j'utilise le mot activé en parlant des fenêtres.
Qu'est-ce que cela veut dire ?
Simplement sous Windows, il y a UNE seule fenêtre active à un moment donné, on appelle ça le focus. C'est elle qui reçoit les événements venant du clavier et de la souris.
Valeur de retour
Cette fonction renvoie
TRUE si elle a réussi, et
FALSE si elle a échoué.
UpdateWindow
Code : C1
2
3 | BOOL UpdateWindow(
HWND hWnd
);
|
Description
Cette fonction met à jour la zone client de la fenêtre, en la forçant à être redessinée en envoyant un message
WM_PAINT directement à la fenêtre, au lieu de placer le message dans la file des messages.
Paramètres
Code : C
handle de la fenêtre dont la zone client est à redessiner.
Valeur de retour
La fonction renvoie
TRUE en cas de succès, et
FALSE en cas d'échec.
GetMessage
Code : C1
2
3
4
5
6 | BOOL GetMessage(
LPMSG lpMsg,
HWND hWnd,
UINT wMsgFilterMin,
UINT wMsgFilterMax
);
|
Description
Cette fonction récupère un message dans la file du
thread appelant.
La précision est importante, car si votre programme possède plusieurs thread, il faut faire attention à qui gère l'interface.
Paramètres
Code : C
Ce paramètre est un pointeur vers une structure de type
MSG (voir annexe) qui contiendra, après l'appel à la fonction, le message récupéré.
Code : C
Ce paramètre représente l'identifiant de la fenêtre dont on veut récupérer le message.
S'il ce paramètre vaut
NULL, alors la fonction récupère un message qui appartient à n'importe quelle fenêtre créée par le
thread.
L'intérêt de paramètre est de permettre une granularité plus fine sur les messages que l'on veut faire passer.
Code : C1 | UINT wMsgFilterMin,UINT wMsgFilterMax
|
Ces paramètres représentent respectivement les identifiants des messages les plus "bas" et les plus "hauts" à faire passer.
Si ces paramètres valent 0, tous les messages sont passés.
Valeurs particulières :
- WM_KEYFIRST, WM_KEYLAST pour tous les événements clavier.
- WM_MOUSEFIRST, WM_MOUSELAST pour tous les événements souris.
Valeur de retour
Cette fonction retourne
TRUE si elle réussit, et
FALSE si elle échoue.
translatemessage
Code : C1
2
3 | BOOL TranslateMessage(
const MSG *lpMsg
);
|
Description
Cette fonction est uniquement utile pour les messages de type clavier, elle traduit les événements de type Touche Virtuelle (voir note) en événement de types Caractère (voir note), et poste le message obtenu dans la file des messages.
Qu'est-ce que c'est donc que ça ?
En fait, lorsque vous appuyez sur une touche, le clavier envoie à Windows un nombre qui est le numéro physique de la touche, ensuite Windows traduit ce numéro en nombre qui est le numéro logique ou virtuel de la touche (les VK_*).
Le problème, c'est que pour les éditeurs de textes, ce n'est pas pratique de savoir quelle touche a été enfoncée ; ce qui les intéressent, c'est le caractère correspondant à cette touche.
C'est pourquoi cette fonction fait la traduction.
Paramètres
Code : C
Ce paramètre est un pointeur vers le message récupéré par
GetMessage.
Valeur de retour
Si le message a été traduit, cette fonction renvoie
TRUE.
Si le message est
WM_KEYDOWN,
WM_KEYUP,
WM_SYSKEYDOWN ou
WM_SYSKEYUP, cette fonction renvoie
TRUE.
Sinon, elle renvoie
FALSE.
DispatchMessage
Code : C1
2
3 | LRESULT DispatchMessage(
const MSG *lpmsg
);
|
Description
Cette fonction envoie le message à la fonction de
callback de la fenêtre concernée.
En quelque sorte, c'est elle qui appelle votre fonction qui gère les messages.
Paramètres
Code : C
Ce paramètre est un pointeur vers le message récupéré par
GetMessage.
Valeur de retour
Cette fonction renvoie la valeur retournée par votre fonction de
callback.
Par exemple, si dans votre de fonction de gestion des messages vous faites : "return 1000;",
alors, cette fonction retournera 1000.
WindowProc
Code : C1
2
3
4
5
6 | LRESULT CALLBACK WindowProc
HWND hwnd,
UINT uMsg,
WPARAM wParam,
LPARAM lParam
);
|
Description
Ceci n'est pas vraiment une fonction de l'API Windows à proprement parler : c'est la fonction de gestion des messages envoyée à votre (vos) fenêtre(s).
Paramètres
Code : C
Ceci est le
handle de la fenêtre concernée par le message.
Code : C
Ceci est l'identifiant du message.
Code : C1
2 | WPARAM wParam,
LPARAM lParam
|
Ces paramètres sont entièrement dépendant du message envoyé.
Voir l'annexe sur les messages.
Valeur de retour
Ceci est la valeur retournée par vous-mêmes, ou la fonction
DefWindowProc.
DefWindowProc
Code : C1
2
3
4
5
6 | LRESULT DefWindowProc(
HWND hWnd,
UINT Msg,
WPARAM wParam,
LPARAM lParam
);
|
Description
Cette fonction appelle la fonction de gestion des messages par défaut du système. Elle est utile lorsque vous ne gérez pas vous-mêmes le message.
En pratique, à chaque fois que vous ne gérez pas un message, vous appelez cette fonction.
Paramètres
Vous devez passer les paramètres de votre fonction de gestion des messages (voir
WindowProc)
tels quels..
Valeur de retour
Ceci est la valeur retournée par la fonction de gestion des messages. Vous
devez retourner cette valeur :
Code : C1 | return DefWindowProc(hwnd,uMsg,wParam,lParam);
|
SendMessage
Code : C1
2
3
4
5
6 | LRESULT SendMessage(
HWND hWnd,
UINT Msg,
WPARAM wParam,
LPARAM lParam
)
|
Description
Cette fonction permet d'envoyer un message à une fenêtre ou à un contrôle. C'est-à-dire qu'elle va appeler la fonction de gestion des messages de la fenêtre avec les paramètres que vous spécifiez.
Par exemple, si vous faites :
Code : C1 | SendMessage(hwnd,WM_QUIT,0,0);
|
Ceci va appeler une fonction de type
WindowProc, associée à
hwnd, avec exactement les mêmes paramètres que vous avez spécifiés.
Paramètres
Ce sont les même que pour
WindowProc sauf que
hWnd est l'identifiant de la fenêtre
à laquelle vous envoyez le message.
Valeur de retour
Cette fonction renvoie la valeur retournée par la fonction de gestion des messages.
MessageBox
Code : C1
2
3
4
5
6 | int MessageBox(
HWND hWnd,
LPCTSTR lpText,
LPCTSTR lpCaption,
UINT uType
);
|
Description
Cette fonction extrêmement pratique permet d'afficher une petite fenêtre avec du texte dedans pour informer l'utilisateur, ou lui demander quelque chose.
Par exemple, lorsque vous fermez votre éditeur de texte préféré, vous obtenez un message :
Voulez-vous sauvegarder votre travail ?
Et un choix Oui / Non. Eh bien vous pouvez faire ceci avec MessageBox.
Paramètres
Code : C
Ce paramètre est le
handle de la fenêtre qui sera le parent du message affiché.
Mais quel intérêt ?
Vous savez que quand ce message s'affiche dans votre éditeur de texte préféré, vous ne pouvez plus activer votre éditeur de texte, sinon vous obtenez un 'Beeeeeep'.
Eh bien c'est parce que le parent du message est la fenêtre de votre éditeur de texte.
Code : C
Ce paramètre est la chaîne de caractères à afficher dans le message.
Si dans la chaîne de caractères vous mettez '\n', alors cela passera à la ligne suivante comme dans la console.
Code : C
Ce paramètre est la chaîne de caractères à afficher comme titre de la fenêtre.
Si dans la chaîne de caractères vous mettez '\n', le résultat est indéfini.
Code : C
Ce paramètre est le type de message à afficher.
Il peut être la combinaison de plusieurs paramètres grâce au OU binaire(|).
Le premier groupe de paramètres spécifie les boutons à afficher :
- MB_ABORTRETRYIGNORE : trois boutons : 'Abandonner', 'Réessayer', 'Ignorer'.
- MB_OK : un bouton : 'Ok'.
- MB_OKCANCEL : deux boutons : 'Ok', 'Annuler'.
- MB_RETRYCANCEL : deux boutons : 'Réessayer', 'Annuler'.
- MB_YESNO : deux boutons : 'Oui', 'Non'.
- MB_YESNOCANCEL : trois boutons : 'Oui', 'Non', 'Annuler'.
Le deuxième groupe spécifie l'icône à afficher :
- MB_ICONEXCLAMATION : un point d'exclamation.
- MB_ICONWARNING : un point d'exclamation.
- MB_ICONINFORMATION : un i dans un cercle.
- MB_ICONASTERISK : un i dans un cercle.
- MB_ICONQUESTION : un point d'exclamation (ce paramètre est déconseillé par Microsoft).
- MB_ICONSTOP : une icône STOP.
- MB_ICONERROR : une icône d'erreur.
- MB_ICONHAND : une icône de main.
Le troisième groupe spécifie le bouton par défaut.
C'est quoi le bouton par défaut ?
Vous savez, quand vous avez un message et que vous appuyez sur Entrée, cela "appuie" sur le bouton qui apparaît différent des autres.
- MB_DEFBUTTON1 : le premier bouton de la liste.
- MB_DEFBUTTON2 : le deuxième bouton de la liste.
- MB_DEFBUTTON3 : le troisième bouton de la liste.
- MB_DEFBUTTON4 : le quatrième bouton de la liste.
Le quatrième groupe spécifie le type de fenêtre :
- MB_APPLMODAL : l'utilisateur doit répondre, mais peut activer les autres fenêtres du Bureau, sauf la fenêtre parent du message.
- MB_SYSTEMMODAL : même chose que MB_APPLMODAL, mais si la fenêtre parent n'est pas la fenêtre au premier plan, elle le devient, et y reste jusqu'à ce que l'utilisateur réponde.
- MB_TASKMODAL : même chose que MB_APPLMODAL, mais si la fenêtre parent vaut NULL, toutes les fenêtres du thread appelant sont désactivées en attendant la réponse.
Le dernier groupe spécifie d'autres options :
- MB_RIGHT : le texte est justifié à droite.
- MB_RTLREADING : le texte est affiché de droite à gauche.
- MB_SETFOREGROUND : le fenêtre du message passe au premier plan.
- MB_TOPMOST : la fenêtre du message passe au premier plan, et le reste jusqu'à ce que l'utilisateur réponde.
Valeur de retour
Si la fonction échoue, elle renvoie 0.
Si elle réussit, elle renvoie:
- IDABORT : l'utilisateur a pressé 'Abandonner'.
- IDCANCEL : l'utilisateur a pressé 'Annuler'.
- IDCONTINUE : l'utilisateur a pressé 'Continuer'.
- IDIGNORE : l'utilisateur a pressé 'Ignorer'.
- IDNO : l'utilisateur a pressé 'Non'.
- IDOK : l'utilisateur à pressé 'Ok'.
- IDRETRY : l'utilisateur à pressé 'Réessayer'.
- IDTRYAGAIN : l'utilisateur à pressé 'Essayer encore'.
- IDYES : l'utilisateur à pressé 'Oui'.
CreateMenu
Code : C
Description
Cette fonction permet de créer un menu. Ce menu est initialement vide.
Paramètres
Valeur de retour
Le
handle du menu en cas de succès, et
NULL en cas d'échec.
AppendMenu
Code : C1
2
3
4
5
6 | BOOL AppendMenu(
HMENU hMenu,
UINT uFlags,
UINT_PTR uIDNewItem,
LPCTSTR lpNewItem
);
|
Description
Cette fonction permet d'ajouter un élément à un menu existant.
Par élément, on entend aussi bien un libellé (texte) qu'une case à cocher, une image ou un sous-menu.
Paramètres
Code : C
Le
handle du menu auquel on va ajouter l'élément.
Code : C
Ce paramètre peut être la combinaison d'un ou plusieurs de ces paramètres :
- MF_BITMAP : utilise une image comme élément ; dans ce cas, lpNewItem contiendra alors le handle de l'image.
- MF_CHECKED : place une case à cocher à gauche de l'élément.
- MF_DISABLED : désactive l'élément, il ne peut être sélectionné ; mais ce paramètre ne le fait pas apparaître comme grisé.
- MF_ENABLED : active l'élément, il peut être sélectionné et n'est pas grisé.
- MF_GRAYED : désactive l'élément et le fait apparaître grisé.
- MF_MENUBARBREAK : place l'élément dans une nouvelle colonne.
- MF_MENUBREAK : même chose que MF_MENUBARBREAK
- MF_OWNERDRAW : l'élément est dessiné par l'utilisateur.
- MF_POPUP : l'élément ouvre un menu déroulant.
- MF_SEPARATOR : l'élément est un séparateur, il ne peut être sélectionné ni mis en surbrillance ; dans ce cas, lpNewItem et uIDNewItem sont ignorés.
- MF_STRING : l'élément est un libellé (texte) ; dans ce cas, lpNewItem est pointeur sur le texte à afficher.
- MF_UNCHECKED : l'élément n'a pas de case à cocher à sa gauche (c'est le comportement par défaut).
Les groupes suivants ne peuvent être utilisés ensemble :
- MF_BITMAP, MF_STRING et MF_OWNERDRAW
- MF_CHECKED et MF_UNCHECKED
- MF_DISABLED, MF_ENABLED et MF_GRAYED
- MF_MENUBARBREAK et MF_MENUBREAK
Code : C
Spécifie soit l'identifiant du menu, ou si
uFlags est mis à
MF_POPUP, le
handle du sous-menu.
Code : C
Ce paramètre dépend de la valeur de
lpNewItem :
- MF_BITMAP : handle du bitmap.
- MF_OWNERDRAW : pointeur vers des données utilisateur, utilisables lors du dessin grâce au paramètre lParam.
- MF_STRING : pointeur sur la chaîne de caractère à afficher.
Valeur de retour
La fonction renvoie
TRUE en cas de succès, et
FALSE en cas d'échec.
SetMenu
Code : C1
2
3
4 | BOOL SetMenu(
HWND hWnd,
HMENU hMenu
);
|
Description
Cette fonction permet de définir le menu associé à une fenêtre.
Paramètres
Code : C
handle de la fenêtre à laquelle on assigne un nouveau menu.
Code : C
handle du nouveau menu, ou
NULL pour que la fenêtre n'ait plus de menu associé.
Valeur de retour
Elle renvoie
TRUE en cas de succès, et
FALSE en cas d'erreur.
En aucun cas cette fonction ne détruit le menu associé, vous devez appelez destroymenu pour accomplir cette tâche.
EnableMenuItem
Code : C1
2
3
4
5 | BOOL EnableMenuItem(
HMENU hMenu,
UINT uIDEnableItem,
UINT uEnable
);
|
Description
Cette fonction permet d'activer, désactiver et griser un élément d'un menu.
Paramètres
Code : C
handle du menu auquel appartient l'élément à modifier.
Code : C
Ce paramètre est l'indice ou l'identifiant de l'élément du menu à modifier selon le paramètre
uEnable.
Code : C
Ce paramètre peut prendre une ou plusieurs de ces valeurs :
- MF_BYCOMMAND : le paramètre uIDEnableItem spécifie l'identifiant de l'élément (comportement par défaut).
- MF_BYPOSITION : le paramètre uIDEnableItem spécifie l'indice de l'élément (relatif à 0).
- MF_DISABLED : désactive l'élément (celui-ci ne sera pas grisé).
- MF_ENABLED : active l'élément et supprime son attribut grisé.
- MF_GRAYED : désactive et grise l'élément.
Valeur de retour
La fonction retourne l'état précédent de l'élément modifié (
MF_DISABLED,
MF_ENABLED ou
MF_GRAYED), ou -1 en cas d'échec.
CheckMenuItem
Code : C1
2
3
4
5 | DWORD CheckMenuItem(
HMENU hmenu,
UINT uIDCheckItem,
UINT uCheck
);
|
Description
Cette fonction permet de définir l'état de la boîte à cocher de l'élément d'un menu.
Paramètres
Code : C
handle de l'élément auquel appartient le menu.
Code : C
Ce paramètre est l'indice ou l'identifiant de l'élément du menu à modifier selon le paramètre
uEnable.
Code : C
Ce paramètre peut prendre une ou plusieurs de ces valeurs :
- MF_BYCOMMAND : le paramètre uIDEnableItem spécifie l'identifiant de l'élément (comportement par défaut).
- MF_BYPOSITION : le paramètre uIDEnableItem spécifie l'indice de l'élément (relatif à 0).
- MF_CHECKED : coche la boîte à cocher de l'élément.
- MF_UNCHECKED : décoche la boîte à cocher de l'élément.
Valeur de retour
La fonction retourne l'état précédent de l'élément modifié (
MF_CHECKED ou
MF_UNCHECKED), ou -1 en cas d'échec.
LoadMenu
Code : C1
2
3
4 | HMENU LoadMenu(
HINSTANCE hInstance,
LPCTSTR lpMenuName
);
|
Description
Cette fonction permet de charger un menu contenu dans une ressource de l'exécutable.
Paramètres
Code : C
Instance du programme qui contient la ressource à charger.
Code : C
Nom de la ressource à charger.
Peut être une chaîne de caractères, ou un identifiant formé avec la macro
MAKEINTRESOURCE.
Valeur de retour
Elle renvoie le
handle du menu en cas de succès, et
NULL en cas d'échec.
CreateDialog
Code : C1
2
3
4
5
6 | HWND CreateDialog(
HINSTANCE hInstance,
LPCTSTR lpTemplate,
HWND hWndParent,
DLGPROC lpDialogFunc
);
|
Description
Cette fonction permet de créer une boîte de dialogue stockée en ressource dans l'exécutable.
Paramètres
Code : C
Instance du programme auquel appartient la ressource.
Code : C
Nom de la ressource de type boîte de dialogue.
Peut être un pointeur sur une chaîne de caractères, ou une valeur formée par la macro
MAKEINTRESOURCE.
Code : C
handle de la fenêtre parent de la boîte de dialogue.
Code : C
Pointeur vers la fonction de gestion des messages de la boîte de dialogue.
Valeur de retour
Cette fonction renvoie le
handle de la boite de dialogue, ou
NULL en cas d'échec.
DialogBox
Code : C1
2
3
4
5
6 | INT_PTR DialogBox(
HINSTANCE hInstance,
LPCTSTR lpTemplate,
HWND hWndParent,
DLGPROC lpDialogFunc
);
|
Cette fonction (qui en fait est une macro) fait la même chose que
CreateDialogBox, sauf qu'elle ne rend le contrôle que lors de la destruction de la boîte de dialogue avec la fonction
EndDialog.
Paramètres
Ceux sont les mêmes que pour la fonction
CreateDialogBox.
Valeur de retour
Cette fonction renvoie la valeur passée au paramètre
nResult de la fonction
EndDialog.
EndDialog
Code : C1
2
3
4 | BOOL EndDialog(
HWND hDlg,
INT_PTR nResult
);
|
Description
Cette fonction détruit la boîte de dialogue, et rend le contrôle au
thread lorsque celle-ci a été créée avec la fonction
DialogBox qui est bloquante.
Paramètres
Code : C
handle de la boîte de dialogue à détruire.
Code : C
Spécifie une valeur à retourner à l'application lors de la destruction.
Cette fonction ne détruit pas instantanément la boîte de dialogue, mais attend que la fonction qui a créé la boîte de dialogue rende le contrôle.
Voici la liste de tous les messages de l'API Windows que vous avez découverts dans ce tutoriel, et qui sont envoyés à la fonction de gestion des messages .
Pour chaque message, j'expliquerai sa signification ainsi que celle des paramètres wParam et lParam et de la valeur retournée.
WM_CREATE
Description
Ce message est envoyé lors de la création d'une fenêtre avec CreateWindow et CreateWindowEx.
wParam
Ce paramètre est inutilisé.
lParam
Pointeur vers une structure de type CREATESTRUCT.
Voir Annexe sur les structures.
Valeur de retour
Retournez 0 pour continuer la création de la fenêtre, ou -1 pour annuler la création.
WM_DESTROY
Description
Ce message est envoyé lorsqu'une fenêtre va être détruite.
wParam
Ce paramètre est inutilisé.
lParam
Ce paramètre est inutilisé.
Valeur de retour
Retournez 0.
WM_COMMAND
Description
Ce message est utilisé lorsque l'utilisateur interagit avec un contrôle.
wParam
Le mot haut (récupérable avec HIWORD) est le code de notification du contrôle. Celui-ci est spécifique à chaque classe de contrôle. Il vaut 1 si le message vient d'un raccourci clavier, et 0 si le message vient d'un menu.
Le mot bas (récupérable avec LOWORD) est l'identifiant de la fenêtre spécifié lors de la création avec CreateWindow et le paramètre hMenu.
lParam
handle du contrôle (fils de la fenêtre qui reçoit le message) qui a envoyé le message.
Il vaut NULL si ce n'est pas un contrôle.
Valeur de retour
Retournez 0.
Voici la liste de toutes les structures de l'API Windows que vous avez découvertes dans ce tutoriel.
Pour chaque structure, j'expliquerai le rôle de chacun des membres.
WNDCLASS
Code : C 1
2
3
4
5
6
7
8
9
10
11
12 | typedef struct {
UINT style;
WNDPROC lpfnWndProc;
int cbClsExtra;
int cbWndExtra;
HINSTANCE hInstance;
HICON hIcon;
HCURSOR hCursor;
HBRUSH hbrBackground;
LPCTSTR lpszMenuName;
LPCTSTR lpszClassName;
} WNDCLASS, *PWNDCLASS;
|
Description
Cette structure est utilisée lors de la création d'une classe de fenêtre.
Elle est passée en paramètre à
RegisterClass.
Membres
Code : C
Spécifie les styles de la classe, ce peut être une combinaison avec le OU binaire (|) de n'importe quel paramètre :
- CS_BYTEALIGNCLIENT : aligne la zone client des fenêtres sur la frontière d'un octet. Ce style affecte la taille et la position horizontale des fenêtres.
- CS_BYTEALIGNWINDOW : même chose que CS_BYTEALIGNCLIENT, mais concernant la zone fenêtre, et non pas sa zone client.
- CS_CLASSDC : les fenêtres de cette classe partagent toutes le même DC (device context) utilisé lorsque l'on dessine dans les fenêtres.
- CS_DBLCLKS : les fenêtres reçoivent des événements de type double-clic.
- CS_GLOBALCLASS : cette classe est globale au système et non pas locale au programme.
- CS_HREDRAW : redessine la fenêtre en cas de changement de largeur des fenêtres.
- CS_NOCLOSE : la fenêtre ne peut pas être fermée.
- CS_OWNDC : chaque fenêtre à son propre DC.
- CS_PARENTDC : permet d'optimiser le dessin dans le DC en récupérant le DC du parent et en empêchant le dessin en dehors de sa surface.
- CS_SAVEBITS : lorsqu'une portion de fenêtre est cachée par une autre, sauvegarde cette portion puis la restaure ultérieurement au lieu de redessiner.
- CS_VREDRAW : redessine la fenêtre en cas de changement de hauteur.
Mais qu'est-ce qu'un DC ?
Un DC (Device Context) est utilisé lors du dessin dans la zone client d'une fenêtre.
Par exemple, lorsque vous créez des boutons dans une fenêtre, ceux-ci sont dessinés dans des DC, puis ces DC sont copiés sur le DC du parent qui est ensuite affiché.
On peut voir un DC comme une zone de dessin.
Le paramètre CS_PARENTDC permet, au lieu de copier les DC des fils dans celui du parent (ce qui est lent), de dessiner directement le fils dans le DC du parent.
Les DC sont principalement utilisé avec les fonctions du GDI qui permettent de dessiner des rectangles, carrés, du texte, des polygones, etc.
Code : C
Ce membre est un pointeur vers la fonction de gestion des messages arrivant à toutes les fenêtres de cette classe.
Code : C
Spécifie le nombre d'octets supplémentaires à allouer dans la structure de la classe.
Cela permet de stocker des données supplémentaires associées à cette classe.
Code : C
Spécifie le nombre d'octets supplémentaires à allouer dans la structure d'une fenêtre.
Cela permet de stocker des données supplémentaires associées à chaque fenêtre.
Code : C
Instance du programme qui crée la classe.
Cette variable est passée en paramètre au
WinMain.
Code : C
handle de l'icône à afficher dans la barre de titre des fenêtres de cette classe.
Code : C
handle du curseur à afficher quand le pointeur de la souris est au-dessus de la fenêtre.
Code : C
Brosse à utiliser pour dessiner le fond de la fenêtre (c'est en rapport avec le
GDI).
Il y en a quelques-unes prédéfinies :
- COLOR_ACTIVEBORDER
- COLOR_ACTIVECAPTION
- COLOR_APPWORKSPACE
- COLOR_BACKGROUND
- COLOR_BTNFACE
- COLOR_BTNSHADOW
- COLOR_BTNTEXT
- COLOR_CAPTIONTEXT
- COLOR_GRAYTEXT
- COLOR_HIGHLIGHT
- COLOR_HIGHLIGHTTEXT
- COLOR_INACTIVEBORDER
- COLOR_INACTIVECAPTION
- COLOR_MENU
- COLOR_MENUTEXT
- COLOR_SCROLLBAR
- COLOR_WINDOW
- COLOR_WINDOWFRAME
- COLOR_WINDOWTEXT
Si ce paramètre est
NULL, le programme doit dessiner lui-même le fond de la fenêtre lors des notification
WM_PAINT ou
WM_ERASEBKGND.
Code : C
Nom de la ressource à utiliser comme menu pour les fenêtres de la classe (voir note).
Code : C
Nom de la classe. Il doit être unique dans le programme pour que la classe soit enregistrée avec succès.
Qu'est-ce qu'une ressource ?
Une ressource est une donnée spéciale intégrée à l'exécutable avec un nom.
Par exemple, on peut intégrer une image, un menu, un raccourci clavier, une fenêtre, etc.
Chaque ressource est identifiée par un nom qui peut être une chaîne de caractères ou un identifiant.
Les ressources peuvent aussi être intégrées à l'exécutable avec un fichier .rc.
MSG
Code : C1
2
3
4
5
6
7
8 | typedef struct {
HWND hwnd;
UINT message;
WPARAM wParam;
LPARAM lParam;
DWORD time;
POINT pt;
} MSG, *PMSG;
|
Description
Cette structure représente un message dans la file des messages envoyés à une fenêtre.
Membres
Code : C
Ceci est le
handle de la fenêtre qui doit recevoir le message.
Code : C
Identifiant du message (c'est le même que celui passé à la fonction de gestion des messages).
Code : C1
2 | WPARAM wParam
LPARAM lParam
|
Ce sont des paramètres supplémentaires passés à la fonction de gestion des messages.
Code : C
L'heure à laquelle le message a été posté.
Code : C
Position du curseur lorsque le message a été posté.
CREATESTRUCT
Code : C 1
2
3
4
5
6
7
8
9
10
11
12
13
14 | typedef struct tagCREATESTRUCT {
LPVOID lpCreateParams;
HINSTANCE hInstance;
HMENU hMenu;
HWND hwndParent;
int cy;
int cx;
int y;
int x;
LONG style;
LPCTSTR lpszName;
LPCTSTR lpszClass;
DWORD dwExStyle;
} CREATESTRUCT, *LPCREATESTRUCT;
|
Description
Cette structure est passée en paramètre avec le message
WM_CREATE.
Elle permet de connaître les paramètres exacts avec lesquels la fenêtre a été créée.
Membres
Les membres sont
exactement les mêmes que pour
CreateWindow.
Seules précisions :
int x
int y
int cx
int cy
Si, lors de la création, vous avez spécifié
CW_USEDEFAULT ou 0, la valeur vaudra alors la taille
réelle de la fenêtre.
RECT
Code : C1
2
3
4
5
6 | typedef struct _RECT {
LONG left;
LONG top;
LONG right;
LONG bottom;
} RECT;
|
Description
Cette structure permet de stocker différents paramètres qui ont à voir avec des rectangles comme des dimensions, des marges ou des positions...
Membres
Code : C
Coordonnée en abscisse du coin supérieur gauche.
Code : C
Coordonnée en ordonnée du coin supérieur gauche.
Code : C
Coordonnée en abscisse du coin inférieur droit.
Code : C
Coordonnée en ordonnée du coin inférieur droit.