1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123
|
// g++ -o test test.c -lgdi32
#include <windows.h>
#define UNICODE
#define _UNICODE
HINSTANCE instance;
#define ID_PUSHBUTTON_1 110
HFONT hfont;
VOID RemplieFenetrePrincipale(HWND fenetrePrincipale)
{
HWND hControle;
// On le remplit avec un premier push button tout bête
hControle=CreateWindow(
TEXT("BUTTON"),
TEXT("\u07d2\u07de\u07cf"),
WS_CHILD|WS_VISIBLE|BS_PUSHBUTTON,
10,10,
100,20,
fenetrePrincipale,
(HMENU)ID_PUSHBUTTON_1,
instance,
NULL);
AddFontResource (TEXT("onts\\DejaVuSans.ttf")); // modifier le chemin
SendMessage( HWND_BROADCAST, WM_FONTCHANGE, 0, 0 );
hfont = CreateFont(0, 0, 0, 0, 0, 0, 0, 0,
SYMBOL_CHARSET,
OUT_DEFAULT_PRECIS,
CLIP_DEFAULT_PRECIS,
DEFAULT_QUALITY,
DEFAULT_PITCH | FF_DECORATIVE,
TEXT("DejaVuSans"));
SendMessage (hControle, WM_SETFONT, (WPARAM)hfont, TRUE);
}
VOID NotificationControle(HWND fenetrePrincipale,UINT message, WPARAM wParam, LPARAM lParam)
{
UINT iId=LOWORD(wParam);
HWND hCtl=(HWND)lParam;
switch(iId)
{
case ID_PUSHBUTTON_1:
MessageBox(fenetrePrincipale,TEXT("Vous avez appuyé sur le premier bouton"),TEXT(""),MB_OK);
break;
}
}
LRESULT CALLBACK procedureFenetrePrincipale(HWND fenetrePrincipale, UINT message, WPARAM wParam, LPARAM lParam)
{
static HWND boutons[2] = {NULL};
switch (message)
{
case WM_CREATE:
RemplieFenetrePrincipale(fenetrePrincipale);
return 0;
case WM_COMMAND:
NotificationControle(fenetrePrincipale,message,wParam,lParam);
return 0;
case WM_DESTROY:
PostQuitMessage(0);
return 0;
default:
return DefWindowProc(fenetrePrincipale,message,wParam,lParam);
}
}
int WINAPI WinMain (HINSTANCE cetteInstance, HINSTANCE precedenteInstance,
LPSTR lignesDeCommande, int modeDAffichage)
{
HWND fenetrePrincipale;
MSG message;
WNDCLASS classeFenetre;
instance = cetteInstance;
classeFenetre.style = 0;
classeFenetre.lpfnWndProc = procedureFenetrePrincipale;
classeFenetre.cbClsExtra = 0;
classeFenetre.cbWndExtra = 0;
classeFenetre.hInstance = NULL;
classeFenetre.hIcon = LoadIcon(NULL, IDI_APPLICATION);
classeFenetre.hCursor = LoadCursor(NULL, IDC_ARROW);
classeFenetre.hbrBackground = (HBRUSH)(1 + COLOR_BTNFACE);
classeFenetre.lpszMenuName = NULL;
classeFenetre.lpszClassName = TEXT("classeF");
// On prévoit quand même le cas où ça échoue
if(!RegisterClass(&classeFenetre))
return FALSE;
fenetrePrincipale=CreateWindow(
TEXT("classeF"),
TEXT("Ma premiere fenetre winAPI !"),
WS_OVERLAPPEDWINDOW,
CW_USEDEFAULT,CW_USEDEFAULT,
130,80,
NULL,
NULL,
cetteInstance,
NULL);
if (!fenetrePrincipale)
return FALSE;
ShowWindow(fenetrePrincipale,modeDAffichage);
UpdateWindow(fenetrePrincipale);
while(GetMessage(&message,NULL,0,0))
{
TranslateMessage(&message);
DispatchMessage(&message);
}
return message.wParam;
} |
Partager