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

FAQ Win32

FAQ Win32Consultez toutes les FAQ

Nombre d'auteurs : 11, nombre de questions : 72, dernière mise à jour : 16 juin 2021 

 
OuvrirSommaireNotions fondamentales

WINAPI est une macro qui représente la convention d'appel utilisée par les APIs de Windows. Actuellement, c'est la convention d'appel standard (__stdcall) qui est utilisée (à ne pas confondre avec la convention d'appel "par défaut" utilisée en C (__cdecl)).

Mis à jour le 25 mars 2009  par Melem

Une fonction callback est une fonction définie par l'application et qui sera automatiquement appelée par le système quand certains événements se produisent. Une callback n'est jamais appelée par l'application elle-même.

Créé le 28 juillet 2008  par Melem

CALLBACK est une macro qui représente la convention d'appel que doivent utiliser les fonctions callback. Actuellement, c'est la convention d'appel standard (__stdcall) qui est utilisée (à ne pas confondre avec la convention d'appel "par défaut" utilisée en C (__cdecl)).

Mis à jour le 25 mars 2009  par Melem

ANSI est un jeu de caractères qui utilise 8 bits pour coder un caractère (à ne pas confondre avec l'ANSI - American National Standards Institute - bien que ce code tire son nom de cet organisme). C'est une extension Microsoft au code ASCII qui n'utilise que 7 bits par caractère. Dans l'environnement graphique de Windows, les caractères sont codés en utilisant le code ANSI.

Unicode est une norme qui attribue un code (un index) unique au monde à n'importe quel caractère (latin, hébreu, arabe, grec, symbole mathématique, etc.) en utilisant 16 bits par caractère. Il existe cependant plusieurs encodages Unicode (un encodage Unicode est un système d'encodage dans lequel chaque caractère est représenté par un code qui correspond d'une manière dépendante de ce système au code de ce même caractère dans la table des caractères Unicode). Le jeu de caractères complet de Windows (utilisé en interne) est constitué de caractères Unicode. Il y a donc toujours une conversion ANSI vers Unicode ou Unicode vers ANSI chaque fois que l'on fournit ou l'on demande une chaîne ANSI à Windows, la conversion de Unicode vers ANSI n'étant pas systématiquement sans perte. Les applications sont également capables de passer ou de lire une chaîne Unicode à Windows, en utilisant des fonctions spécifiques.

Mis à jour le 25 mars 2009  par Melem

CHAR (char) représente un caractère ANSI (8 bits) et WCHAR (wchar_t) un caractère Unicode (16 bits).

Créé le 28 juillet 2008  par Melem

La macro UNICODE permet de contrôler la compilation des fichiers sources utilisant les fonctions de l'API Windows. Par exemple, quand UNICODE est définie :

  • TCHAR est remplacé par WCHAR sinon simplement par CHAR
  • TEXT("Bonjour") est remplacé par L"Bonjour" sinon simplement par "Bonjour"
  • MessageBox(..., TEXT("Bonjour"), ...) est remplacé par MessageBoxW(..., L"Bonjour", ...) sinon par MessageBoxA(..., "Bonjour", ...)
  • etc.


La macro _UNICODE joue le même rôle que la macro UNICODE mais pour les "fonctions" de tchar.h (qui est un fichier de la bibliothèque d'exécution du C et non un fichier de l'API Windows). Par exemple, quand _UNICODE est définie :

  • _TCHAR est remplacé par wchar_t sinon simplement par char
  • _TEXT("Bonjour") est remplacé par L"Bonjour" sinon simplement par "Bonjour"
  • _tprintf(_TEXT("Bonjour.\n")) est remplacé par wprintf(L"Bonjour.\n") sinon par printf("Bonjour.\n")
  • etc.


Ces macros servant donc à contrôler les versions des fonctions à utiliser, il est déconseillé de définir l'une sans l'autre. A noter que sous Visual Studio 2005 et plus récents, ces macros sont par défaut définies pour tout nouveau projet.

Mis à jour le 25 mars 2009  par Melem, Médinoc

Les pages de code sont une notion datant au moins de MS-DOS. À cet époque-là, on n'avait que huit bits pour représenter les caractères, mais bien plus de 255 en tout. On ne pouvait donc en supporter que 255 à la fois, il fallait donc choisir. Ces choix furent regroupés dans divers "character sets" (ou charsets), et sous les environnement Microsoft, ces ensembles de caractères sont répertoriés dans les Pages de Codes numérotées. Sous un Windows moderne, ces pages de code sont toujours utilisées lors de la traduction d'une chaîne de caractères dite "ANSI" vers une chaîne de caractères Unicode. Parmi les pages de code les plus connues figurent:

  • La page de code n°437, antique page de codes de DOS. Elles comporte beaucoup de caractères de "dessin", mais n'est pas adaptée aux accents Français.
  • La page de code n°850 est la version européenne de la page de code 437. Elle est adaptée au Français, et encore utilisée de nos jours dans les Consoles de Windows. En contrepartie, elle contient moins de caractères de dessin, et cela peut se voir sur des applications consoles qui étaient prévues pour la page de codes 437.
  • La page de code n°1252, utilisée dans les applications Windows graphiques en occident.
Créé le 25 mars 2009  par Médinoc

Windows ne garde pas en mémoire une, mais deux "pages de code courantes" : une utilisée dans la console, une pour les applications graphiques.

  • La page de code utilisée pour les consoles est appelée "la page de code OEM courante". Il s'agit généralement, selon la région, de la page 437 ou 850.
  • La page de code utilisée pour les applications graphiques est appelée "la page de code ANSI courante". En Occident, il s'agit généralement de la page de code 1252.


Cette différence se voit généralement quand on tente "naïvement" d'afficher des caractères accentués dans une application console : Visual Studio utilise la page de code ANSI courante, donc les caractères tapés dans le fichier source suivent cette page de code. Sur la console, ils sont affichés avec la page de code OEM, d'où incompatibilité.

Créé le 25 mars 2009  par Médinoc

Un handle est un numéro qui permet d'identifier un objet sous Windows, un pointeur est une variable qui contient une adresse. Un handle n'est donc pas un pointeur. Il n'est pas cependant exclus que dans certains cas, un handle représente effectivement une adresse. Un HINSTANCE par exemple représente l'adresse de base du processus.

En fait, un handle (HANDLE, HISNTANCE, HWND, HICON, etc.) est défini par Windows à l'aide d'un type pointeur, void * par exemple. Cela permet de mieux spécialiser les types au besoin mais ne signifie en aucun cas que handles et pointeurs sont les mêmes.

Créé le 28 juillet 2008  par Melem

Un handle global est un handle utilisable par tous les processus. Par exemple, lorsqu'une application crée une fenêtre, Windows assigne un handle à cette fenêtre. Ce handle peut être utilisé par toutes les applications pour manipuler cette fenêtre. Un handle de fenêtre est donc global. A l'opposé, quand une application ouvre un fichier par exemple, Windows assigne également un handle à ce fichier mais ce handle n'a de sens que pour l'application qui a ouvert le fichier. Ce handle n'est donc pas global, il est spécifique du processus. En général, les handles globaux sont ceux qui servent à identifier un objet de l'interface utilisateur (comme une fenêtre par exemple) et les handles locaux (appartenant seulement au processus ayant créé l'objet) ceux qui servent à identifier un objet du noyau (fichiers, sockets, processus, threads, etc.).

Créé le 28 juillet 2008  par Melem

Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright © 2013 Developpez.com Developpez LLC. Tous droits réservés Developpez LLC. Aucune reproduction, même partielle, ne peut être faite de ce site ni de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts.