| ||
auteur : Melem | ||
WM_CLOSE est envoyé à l'application quand Windows reçoit une demande de fermeture d'une fenêtre de cette application. WM_DESTROY, pour sa part, est envoyé pour indiquer qu'une fenêtre de l'application a été détruite (mais pas encore totalement puisqu'à ce stade,
les fenêtres enfants par exemple, s'il y en a, n'ont pas encore été détruites).
|
| ||
auteur : Melem | ||
Non. Cela indique tout simplement à l'application de se comporter comme si la fenêtre avait été détruite. Pour détruire une fenêtre, il faut appeler DestroyWindow (la "fin" de CreateWindow). A noter que cette fonction est implicitement appelée dans certains cas, par exemple
quand on laisse à DefWindowProc le soin de traiter le message WM_CLOSE. Ne pas oublier non plus que DestroyWindow est récursive, c'est-à-dire que la destruction d'une fenêtre entraîne la destruction de toutes ses fenêtres enfants (mais également la destruction du menu, etc.).
|
| ||
auteur : Melem | ||
Les messages Windows sont ni plus ni moins que des entiers donc n'importe quel entier peut définir un message, par exemple #define WM_MONMESSAGE 0xBFFF. On ne peut pas cependant utiliser vraiment n'importe quelle valeur car certaines sont déjà utilisées par Windows. Windows garantit que les messages systèmes ont tous des valeurs comprises entre 0 et WM_USER - 1. Les valeurs comprises entre WM_USER et WM_APP - 1 sont réservées à être utilisées par une application pour définir des messages spécifiques d'une classe de fenêtre privée (chaque classe interprète donc un message à sa façon, c'est-à-dire que X peut avoir un sens pour une classe donnée et un autre ou aucun sens pour une classe). Certaines classes de fenêtre prédéfinies (boîtes de dialogue, contrôles, etc.) utilisent également des messages dans cette plage et enfin, les valeurs comprises entre WM_APP et 0xBFFF sont réservées à être utilisées par une application pour définir ses propres messages. Il y a aussi la fonction RegisterWindowMessage qui permet de créer un message possédant une valeur garantie être unique dans tout le système. Cette valeur sera comprise entre 0xC000 et 0xFFFF. |
| ||
auteur : Melem | ||
En utilisant SetWindowLong (qui ne doit être utilisée que dans les versions 32 bits) ou SetWindowLongPtr (utilisable aussi bien sous 32 que 64 bits).
|
| ||
auteur : Melem | ||
Une boîte de dialogue est une fenêtre appartenant à la classe "#32770" bref : une fenêtre, mais une fenêtre n'est pas toujours une boîte de dialogue. Une fenêtre peut être : une fenêtre, un bouton,
une boîte de dialogue, un menu, etc.
|
| ||
auteur : Melem | ||
Vous utilisez les contrôles standards. Pour avoir l'effet attendu, vous devez utiliser les contrôles de votre version de Windows, appelés contrôles communs.
| ||
lien : Les contrôles communs |
| ||
auteur : Melem | ||
Si c'est une image bitmap, c'est plutôt trivial avec DrawState ou BitBlt par exemple. Si l'image n'est pas nécessairement un bitmap, il va falloir utiliser une API de plus haut niveau que la GDI. GDI+ par exemple
mais cette API est plutôt destinée aux programmeurs C++. Voici donc une méthode qui peut être utilisée avec n'importe quel langage de programmation sous Windows.
On crée un objet COM encapsulant l'image qu'on veut afficher à l'aide de OleLoadPicture ou OleLoadPicturePath (inclure olectl.h) si l'image sera chargé depuis un fichier puis on appelle la méthode Render de l'interface IPicture de cet objet.
L'image est représentée en interne dans un système de coordonnées dans lequel les axes x et y sont orientés respectivement vers la droite et vers le haut, vu de l'utilisateur.
La méthode la plus naturelle pour copier l'image vers un DC est donc de spécifier les points (x1, y1) et (x2, y2) qui correspondent respectivement au coin inférieur gauche et
au coin supérieur droit du rectangle destiné à contenir l'image. Ainsi, on peut avoir une seule fonction compatible avec tous les modes possibles (MM_TEXT, MM_HIMETRIC, modes personnalisés, etc.). Le code pour charger une image est le suivant, en supposant qu'on veut charger l'image depuis un fichier (c:\image.jpg) :
Et pour l'afficher :
Ces codes sont très spécifiques au langage C mais facilement traductible en C++ ou autre langage. N'oubliez pas de mettre CoInitialize(NULL) et CoUninitialize() respectivement en début et en fin de votre programme car cela est requis par COM. Vous devez également libérer l'objet image avant l'appel de CoUninitialize : pIPicture->lpVtbl->Release(pIPicture). | ||
lien : Qu'est-ce que COM ? |