Salut,
Couleur -> SetTextColor/SetBkColor dans WM_CTLCOLORSTATIC.
Clignotement -> SetTimer + SetWindowText
Taille -> CreateFontIndirect
Toutes ces fonctions sont documentées dans la msdn.
Appli GUI en C sans MFC:
#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;
}