Programmation en C avec Windows API: Comment dessiner un bouton de commande

Eh bien, je construis un projet collégial en C. GUI n’a pas encore été enseigné mais je veux que mon programme soit meilleur, donc j’apprends l’API Windows.

Je suis ce tutoriel ici: http://www.winprog.org/tutorial/start.html et c’est assez bon. Il explique beaucoup de choses mais je ne suis pas capable de trouver une chose (même cherché Google mais tout est orienté vers C ++ ou C #):

Comment dessiner un bouton de commande à l’intérieur de la fenêtre dessinée (que j’ai appris) et comment accepter les événements pour cela?

Pouvez-vous s’il vous plaît répondre ou me diriger vers une bonne page qui explique comment je peux créer un bouton de commande en utilisant uniquement les API Windows et C. No C ++ s’il vous plaît.

Merci pour votre temps! 🙂

C’est un tutoriel que je recommande fortement sur les fonctions de l’interface utilisateur de l’API Win32. C’est excellent. Grosso modo, dans votre fonction de rappel ( LRESULT CALLBACK WndProc( HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam ) vous avez plusieurs options que vous pouvez intercepter:

 switch(msg) { case WM_CREATE: break; case WM_COMMAND: break; /* .. */ } 

Ce que vous devez faire sur WM_CREATE est quelque chose comme ceci:

 HWND hWnd_button = CreateWindow(TEXT("button"), TEXT("Quit"), WS_VISIBLE | WS_CHILD , 20, 50, 80, 25, hwnd, (HMENU) 1, NULL, NULL); 

La raison pour laquelle j’ai stocké le HWND de ce bouton est que si vous voulez modifier le bouton ultérieurement, vous aurez besoin de ce Handle comme argument pour SendMessage() . Maintenant, en haut, attrapez un clic. Lorsque l’utilisateur clique sur le bouton, il envoie WM_COMMAND à la fenêtre parente avec l’argument HMENU (1 dans ce cas) dans wParam . Cela fonctionne pour tous les contrôles que vous créez (menus, cases à cocher, etc. – s’ils affichent des options plus compliquées, ils peuvent être présents dans lParam ). Alors:

 case WM_COMMAND: if (LOWORD(wParam) == 1) { DestroyWindow(); /* or SendMessage(hwnd, WM_CLOSE,0,0); see commments */ } break; 

Attrape cette option particulière. Dans le if gère cet événement de bouton.

Utilisez simplement CreateWindow avec le nom de classe "BUTTON" , le style BS_PUSHBUTTON et la fenêtre parente comme fenêtre dessinée existante. Les coordonnées x et y sélectionnent la position du bouton en haut à gauche dans la fenêtre. Le nom de la fenêtre est le texte du bouton. N’oubliez pas non plus d’appeler ShowWindow sur le handle renvoyé.

edit: Pour accepter les événements, commencez par définir une valeur d’ID telle que:

#define ID_MYBUTTON 1

Transmettez ensuite cela dans le paramètre de menu de l’appel CreateWindow. Dans votre message principal de Windows, vous pouvez maintenant trouver un message en testant:

if(message == WM_COMMAND && HIWORD(wParam) == BN_CLICKED && LOWORD(wParam) == ID_MYBUTTON) { /* button was clicked */ }