Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- // Compteur cliquable : clic = +1, Shift + clic = remise à zéro.
- // Compilation : cl.exe /EHsc compteur.cpp /link /SUBSYSTEM:WINDOWS
- #include <windows.h>
- int compteur = 0;
- HICON CreateCounterIcon()
- {
- HDC hdc = GetDC(NULL);
- HDC memDC = CreateCompatibleDC(hdc);
- HBITMAP color = CreateCompatibleBitmap(hdc, 32, 32);
- HBITMAP old = (HBITMAP)SelectObject(memDC, color);
- HBRUSH black = CreateSolidBrush(RGB(0, 0, 0));
- RECT r = { 0, 0, 32, 32 };
- FillRect(memDC, &r, black);
- DeleteObject(black);
- HFONT font = CreateFontW(29, 0, 0, 0, FW_BOLD, FALSE, FALSE, FALSE, DEFAULT_CHARSET, OUT_DEFAULT_PRECIS, CLIP_DEFAULT_PRECIS, DEFAULT_QUALITY, DEFAULT_PITCH, L"Arial");
- HFONT oldFont = (HFONT)SelectObject(memDC, font);
- SetBkMode(memDC, TRANSPARENT);
- SetTextColor(memDC, RGB(255, 255, 255));
- DrawTextW(memDC, L"C", -1, &r, DT_CENTER | DT_VCENTER | DT_SINGLELINE);
- SelectObject(memDC, oldFont);
- DeleteObject(font);
- SelectObject(memDC, old);
- HBITMAP mask = CreateBitmap(32, 32, 1, 1, NULL);
- ICONINFO ii = {};
- ii.fIcon = TRUE;
- ii.hbmMask = mask;
- ii.hbmColor = color;
- HICON icon = CreateIconIndirect(&ii);
- DeleteObject(mask);
- DeleteObject(color);
- DeleteDC(memDC);
- ReleaseDC(NULL, hdc);
- return icon;
- }
- LRESULT CALLBACK WindowProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
- {
- switch (uMsg)
- {
- case WM_LBUTTONDOWN:
- if (wParam & MK_SHIFT) compteur = 0; else compteur++;
- InvalidateRect(hwnd, NULL, TRUE);
- return 0;
- case WM_PAINT:
- {
- PAINTSTRUCT ps;
- HDC hdc = BeginPaint(hwnd, &ps);
- RECT rect;
- GetClientRect(hwnd, &rect);
- HBRUSH blackBrush = CreateSolidBrush(RGB(0, 0, 0));
- FillRect(hdc, &rect, blackBrush);
- DeleteObject(blackBrush);
- HFONT font = CreateFontW(48, 0, 0, 0, FW_NORMAL, FALSE, FALSE, FALSE, DEFAULT_CHARSET, OUT_DEFAULT_PRECIS, CLIP_DEFAULT_PRECIS, DEFAULT_QUALITY, DEFAULT_PITCH | FF_DONTCARE, L"Arial");
- HFONT oldFont = (HFONT)SelectObject(hdc, font);
- wchar_t texte[32];
- wsprintfW(texte, L"%d", compteur);
- SetBkMode(hdc, TRANSPARENT);
- SetTextColor(hdc, RGB(255, 255, 255));
- DrawTextW(hdc, texte, -1, &rect, DT_CENTER | DT_VCENTER | DT_SINGLELINE);
- SelectObject(hdc, oldFont);
- DeleteObject(font);
- EndPaint(hwnd, &ps);
- return 0;
- }
- case WM_DESTROY:
- PostQuitMessage(0);
- return 0;
- }
- return DefWindowProcW(hwnd, uMsg, wParam, lParam);
- }
- int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE, LPSTR, int nCmdShow)
- {
- const wchar_t CLASS_NAME[] = L"CompteurWin32";
- HICON icon = CreateCounterIcon();
- WNDCLASSW wc = {};
- wc.lpfnWndProc = WindowProc;
- wc.hInstance = hInstance;
- wc.lpszClassName = CLASS_NAME;
- wc.hCursor = LoadCursorW(NULL, IDC_ARROW);
- wc.hIcon = icon;
- wc.hbrBackground = (HBRUSH)GetStockObject(BLACK_BRUSH);
- RegisterClassW(&wc);
- HWND hwnd = CreateWindowExW(0, CLASS_NAME, L"Compteur", WS_OVERLAPPED | WS_CAPTION | WS_SYSMENU, CW_USEDEFAULT, CW_USEDEFAULT, 40, 80, NULL, NULL, hInstance, NULL);
- if (!hwnd) return 0;
- SendMessageW(hwnd, WM_SETICON, ICON_BIG, (LPARAM)icon);
- SendMessageW(hwnd, WM_SETICON, ICON_SMALL, (LPARAM)icon);
- ShowWindow(hwnd, nCmdShow);
- UpdateWindow(hwnd);
- MSG msg = {};
- while (GetMessageW(&msg, NULL, 0, 0))
- {
- TranslateMessage(&msg);
- DispatchMessageW(&msg);
- }
- DestroyIcon(icon);
- return 0;
- }
Advertisement