Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question#ifdef UNICODE #define _T(x) L ## x typedef unsigned short TCHAR; #else #define _T(x) x typedef char TCHAR; #endif #include <windows.h> HINSTANCE _hThisInstance; /* Handle du module */ HWND _hWnd; /* Handle de la fenêtre */ HWND _hStatic; /* Handle sur le static */ LPTSTR _lpAppName = _T("WELCOME"); /* Nom de l'appli */ BOOL _bDisplayed = TRUE; /* Pour alterner l'affichage */ HFONT _hMainFont = NULL; /* Police de base */ HBRUSH _hMainBrush = NULL; /* Brush de la couleur de la fenêtre */ 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) { int bHandled; /* Pour savoir si le message est traité */ long nResult; nResult = 0; bHandled = 0; switch (nMessage) { case WM_CTLCOLORSTATIC: if ((HWND)lParam == _hStatic) { SetTextColor((HDC)wParam, RGB(255, 0, 0)); SetBkColor((HDC)wParam, GetSysColor(COLOR_BTNFACE)); nResult = (long)_hMainBrush; 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; } HFONT __stdcall GetStaticFont() { NONCLIENTMETRICS metrics; /* Récupération des métriques */ HFONT hResult; hResult = NULL; metrics.cbSize = sizeof(NONCLIENTMETRICS); if (! SystemParametersInfo(SPI_GETNONCLIENTMETRICS, sizeof(NONCLIENTMETRICS), &metrics, 0)) goto the_end; metrics.lfCaptionFont.lfHeight = 80; metrics.lfCaptionFont.lfWeight = FW_BOLD; hResult = CreateFontIndirect(&metrics.lfCaptionFont); the_end: return hResult; } HWND __stdcall CreateMyStatic() { HWND hResult; hResult = CreateWindowEx(0, _T("STATIC"), _T("WELCOME"), WS_VISIBLE | WS_CHILD, 10, 10, 450, 100, _hWnd, NULL, _hThisInstance, NULL); if (! hResult) goto the_end; SendMessage(hResult, WM_SETFONT, (long)_hMainFont, 0); the_end: return hResult; } 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 = (HBRUSH)(COLOR_BTNFACE + 1); 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_OVERLAPPED | WS_SYSMENU, CW_USEDEFAULT, CW_USEDEFAULT, 500, 200, HWND_DESKTOP, NULL, _hThisInstance, NULL); if (! _hWnd) goto the_end; _hStatic = CreateMyStatic(); if (! _hStatic) goto the_end; /* Affichage de la fenêtre */ ShowWindow (_hWnd, SW_SHOW); nResult = 1; the_end: return nResult; } VOID CALLBACK TimerCallback(HWND hwnd, UINT uMsg, UINT_PTR idEvent, DWORD dwTime) { if (_bDisplayed) SetWindowText(_hStatic, _T("")); else SetWindowText(_hStatic, _T("WELCOME")); _bDisplayed = ! _bDisplayed; } /** * Main */ int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) { MSG message; /* Messages envoyés à l'application */ UINT nTimer; /* Identifiant du timer */ int nResult; /* Récupération du handle du module */ _hThisInstance = hInstance; _hMainFont = GetStaticFont(); _hMainBrush = CreateSolidBrush(GetSysColor(COLOR_BTNFACE)); if (! CreateMyWindow()) { nResult = Err_ShowLast(_T("Cannot create main window")); goto the_end; } nTimer = SetTimer(NULL, 0, 750, TimerCallback); /* Boucle de traitement des messages */ while (GetMessage(&message, NULL, 0, 0)) { TranslateMessage(&message); DispatchMessage(&message); } nResult = message.wParam; KillTimer(NULL, nTimer); the_end: if (_hMainFont != NULL) DeleteObject(_hMainFont); if (_hMainBrush != NULL) DeleteObject(_hMainBrush); return nResult; }