#ifdef UNICODE #define _T(x) L ## x typedef unsigned short TCHAR; #else #define _T(x) x typedef char TCHAR; #endif #define _WIN32_WINNT 0x0500 #define WINVER 0x0500 #include <windows.h> HINSTANCE _hThisInstance; /* Handle du module */ HWND _hWnd; /* Handle de la fenêtre */ LPTSTR _lpAppName = _T("Gradient"); /* Nom de l'appli */ TRIVERTEX _lpVertices[2]; /* Les deux coins du rectanles et leurs couleurs */ GRADIENT_RECT _gradientRect; /* Le rectangle de dégradé formé des 2 vertices */ WORD __stdcall Err_ShowLast(TCHAR* lpTitle) { DWORD nLastError; LPTSTR lpMessageBuffer; nLastError = GetLastError(); FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM, NULL, nLastError, MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), (TCHAR*)(void*)&lpMessageBuffer, 0, NULL); MessageBox(NULL, lpMessageBuffer, lpTitle, MB_OK | MB_ICONERROR); LocalFree(lpMessageBuffer); return 1; } LRESULT CALLBACK WindowProcedure(HWND hWnd, UINT nMessage, WPARAM wParam, LPARAM lParam) { RECT clientRect; /* Zone de la fenêtre à dessiner */ HDC hDc; /* DC de dessin */ int bHandled; /* Pour savoir si le message est traité */ long nResult; nResult = 0; bHandled = 0; switch (nMessage) { case WM_SIZE: InvalidateRect(hWnd, NULL, TRUE); bHandled = 1; break; case WM_ERASEBKGND: hDc = (HDC)wParam; GetClientRect(hWnd, &clientRect); _lpVertices[1].x = clientRect.right; _lpVertices[1].y = clientRect.bottom; GradientFill(hDc, _lpVertices, 2, &_gradientRect, 1, GRADIENT_FILL_RECT_V); nResult = 1; bHandled = 1; break; case WM_DESTROY: /* On signale que le thread va s'arrêter */ PostQuitMessage(0); bHandled = 1; break; } if (! bHandled) nResult = DefWindowProc(hWnd, nMessage, wParam, lParam); return nResult; } BOOL __stdcall CreateMyWindow() { WNDCLASSEX wincl; /* Classe de la fenêtre utilisée */ int nResult; nResult = 0; /* Création de la classe de fenêtre */ wincl.cbSize = sizeof(WNDCLASSEX); wincl.style = 0; wincl.lpfnWndProc = WindowProcedure; wincl.cbClsExtra = 0; wincl.cbWndExtra = 0; wincl.hInstance = _hThisInstance; wincl.hIcon = LoadIcon(NULL, IDI_APPLICATION); wincl.hCursor = LoadCursor(NULL, IDC_ARROW); wincl.hbrBackground = NULL; wincl.lpszMenuName = 0; wincl.lpszClassName = _lpAppName; wincl.hIconSm = NULL; /* Enregistrement de la classe */ if (! RegisterClassEx(&wincl)) goto the_end; /* Création de la fenêtre */ _hWnd = CreateWindowEx(0, _lpAppName, _lpAppName, WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT, 500, 200, HWND_DESKTOP, NULL, _hThisInstance, NULL); if (! _hWnd) goto the_end; /* Affichage de la fenêtre */ ShowWindow (_hWnd, SW_SHOW); nResult = 1; the_end: return nResult; } /** * Main */ int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) { MSG message; /* Messages envoyés à l'application */ int nResult; /* Récupération du handle du module */ _hThisInstance = hInstance; _lpVertices[0].x = 0; _lpVertices[0].y = 0; _lpVertices[0].Red = 0xC800; _lpVertices[0].Green = 0xE100; _lpVertices[0].Blue = 0xFF00; _lpVertices[0].Alpha = 0x0000; _lpVertices[1].x = 0; _lpVertices[1].y = 0; _lpVertices[1].Red = 0x7D00; _lpVertices[1].Green = 0xA500; _lpVertices[1].Blue = 0xE100; _lpVertices[1].Alpha = 0x0000; _gradientRect.UpperLeft = 0; _gradientRect.LowerRight = 1; if (! CreateMyWindow()) { nResult = Err_ShowLast(_T("Cannot create main window")); goto the_end; } /* Boucle de traitement des messages */ while (GetMessage(&message, NULL, 0, 0)) { TranslateMessage(&message); DispatchMessage(&message); } nResult = message.wParam; the_end: return nResult; }
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question