Les déclarations :
// indispensable
#include
// contient l'hwnd de la fenêtre
HWND hWnd;
// l'instance
HINSTANCE hInstance_sz;
// la fonction de retour, celle qui va recevoir les messages en provenance du système (ouverture, fermeture,...)
LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);
La fonction de retour WndProc :
// Cette fonction est appelée par Windows (c'est via celle-ci que tous les messages sont envoyés à la fenêtre)
LRESULT CALLBACK WndProc(HWND hWnd, UINT uMsg, WPARAM wParam,LPARAM lParam)
{
switch (uMsg)
{
case WM_SYSCOMMAND:
{
switch (wParam)
{
case SC_SCREENSAVE:
case SC_MONITORPOWER:
return 0;
}
break;
}
case WM_CLOSE:
{
PostQuitMessage(0);
break;
}
}
return DefWindowProc(hWnd,uMsg,wParam,lParam);
}
La fonction DefWindowProc fournit un traîtement par défaut pour tous les messages que le programme ne traîte pas. Elle certifie que tous les messages sont traîtés.
Pour plus de renseignements sur cette fonction : DefWindowProc sur Microsoft.com
La fonction de “nettoyage”. Elle nous permet de centraliser toutes les tâches à effectuer avant que le programme ne se termine (vider la mémoire, etc…) :
// fermeture du programme (on vide la mémoire + autres opérations en fonction de vos besoins)
void Shutdown()
{
// rien pour le moment
}
Et enfin la fonction la plus importante : WinMain
C’est la fonctione exécutée lors du lancement du programme :
// WinMain : fonction exécutée lors du lancement du programme
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)
{
// contient les message reçus lors du démarrage
MSG msg;
// on crée la fenêtre
WNDCLASSEX wc;
hInstance_sz = hInstance;
// instance
wc.hInstance = hInstance_sz;
// le nom de la classe
wc.lpszClassName = "Nom du programme";
// adresse de la fonction qui va recevoir les messages
wc.lpfnWndProc = WndProc;
// style (?)
wc.style = CS_DBLCLKS;
// la taille
wc.cbSize = sizeof(WNDCLASSEX);
// la grande icône
wc.hIcon = LoadIcon(NULL, IDI_APPLICATION);
// la petite
wc.hIconSm = LoadIcon(NULL, IDI_APPLICATION);
// le curseur
wc.hCursor = LoadCursor(NULL, IDC_ARROW);
// le menu
wc.lpszMenuName = NULL;
// ?
wc.cbClsExtra = 0;
// ?
wc.cbWndExtra = 0;
// la couleur de fond de la fenêtre
wc.hbrBackground = (HBRUSH)CreateSolidBrush(GetSysColor(COLOR_MENU));
// on enregistre la classe (celle contenant toutes les infos pour créer notre fenêtre)
if (!RegisterClassEx(&wc))
return 0; // si échoue, on quitte ici
// et on crée notre fenêtre
hWnd = CreateWindowEx(WS_EX_OVERLAPPEDWINDOW, "Titre de la fenêtre", "Server Ox: echecs en ligne", WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT, 300, 200, HWND_DESKTOP, NULL, hInstance_sz, NULL);
// on la montre
ShowWindow(hWnd,SW_SHOW);
// ok, on lance la boucle
while (GetMessage(&msg, NULL, 0, 0))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
//la boucle est terminée, on ferme tout
Shutdown();
return (msg.wParam);
}
Recent Comments