Witam. Mam pewien kod, ale nie wiem w jakim programie go skompilować.
Kod.
// ColorPicker - pobieracz kolorów
#include <string>
#include <sstream>
#define WIN32_LEAN_AND_MEAN
#include <windows.h>
#include <windowsx.h>
// dane okna
std::string g_strKlasaOkna = "od0dogk_ColorPicker_Window";
HWND g_hwndOkno = NULL;
// uchwyt do kontekstu ekranu
HDC g_hdcEkran = NULL;
// pobrany kolor
COLORREF g_clKolor = RGB(255, 255, 255); // początkowo biały
//------------------- procedura zdarzeniowa okna------------------------
LRESULT CALLBACK WindowEventProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
switch (uMsg)
{
case WM_LBUTTONDOWN:
// łapiemy myszkę
SetCapture (hWnd);
// ustawiamy kursor w kształcie celownika
SetCursor (LoadCursor(NULL, IDC_CROSS));
return 0;
case WM_MOUSEMOVE:
// sprawdzamy, czy myszka jest złapana
if (GetCapture() == hWnd)
{
// odczytujemy współrzędne kursora
POINT ptKursor;
ptKursor.x = GET_X_LPARAM(lParam);
ptKursor.y = GET_Y_LPARAM(lParam);
// przeliczamy je na koordynaty ekranowe
ClientToScreen (hWnd, &ptKursor);
// pobieramy kolor z miejsca kursora
g_clKolor = GetPixel(g_hdcEkran,
ptKursor.x, ptKursor.y);
// wymuszamy odświeżenie okna programu,
// aby pokazać pobrany kolor
InvalidateRect (hWnd, NULL, TRUE);
}
return 0;
case WM_LBUTTONUP:
// uwalniamy mysz
ReleaseCapture();
// ustawiamy kursor strzałki
SetCursor (LoadCursor(NULL, IDC_ARROW));
return 0;
case WM_PAINT:
{
// odrysowanie zawartości okna
{
PAINTSTRUCT ps;
HDC hdcOkno;
// zaczynamy
hdcOkno = BeginPaint(hWnd, &ps);
// pobieramy obszar klienta okna
RECT rcObszarKlienta;
GetClientRect (hWnd, &rcObszarKlienta);
// wypełniamy go pobranym kolorem
// w tym celu najpierw tworzymy odpowiedni pędzel,
// a potem wypełniamy prostokąt obszaru klienta
// potem usuwamy pędzel
HBRUSH hbrPedzel = CreateSolidBrush(g_clKolor);
FillRect (hdcOkno, &rcObszarKlienta, hbrPedzel);
DeleteObject (hbrPedzel);
// kończymy rysowanie
EndPaint (hWnd, &ps);
}
// pokazanie składowych koloru
{
// pobieramy te składowe i konwertujemy na napis
std::stringstream Strumien;
Strumien << "RGB: " << (int) GetRValue(g_clKolor)
<< ", " << (int) GetGValue(g_clKolor)
<< ", " << (int) GetBValue(g_clKolor);
// ustawiamy ten napis jako tytuł okna programu
SetWindowText (hWnd, Strumien.str().c_str());
}
return 0;
}
case WM_DESTROY:
// zwalniamy kontekst ekranu
ReleaseDC (NULL, g_hdcEkran);
// kończymy program
PostQuitMessage (0);
return 0;
}
return DefWindowProc(hWnd, uMsg, wParam, lParam);
}
//----------------------- funkcja WinMain()----------------------------
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE, LPSTR, int nCmdShow)
{
/* rejestrujemy klasę okna */
WNDCLAS*** KlasaOkna;
// wypełniamy strukturę WNDCLAS***
ZeroMemory (&KlasaOkna, sizeof(WNDCLAS***));
KlasaOkna.cbSize = sizeof(WNDCLAS***);
KlasaOkna.hInstance = hInstance;
KlasaOkna.lpfnWndProc = WindowEventProc;
KlasaOkna.lpszClassName = g_strKlasaOkna.c_str();
KlasaOkna.hCursor = LoadCursor(NULL, IDC_ARROW);
KlasaOkna.hIcon = LoadIcon(NULL, IDI_APPLICATION);
// rejestrujemy klasę okna
RegisterClas*** (&KlasaOkna);
/* tworzymy okno */
// tworzymy okno funkcją CreateWindowEx
g_hwndOkno = CreateWindowEx(WS_EX_TOOLWINDOW,
g_strKlasaOkna.c_str(),
NULL,
WS_OVERLAPPED | WS_BORDER
| WS_CAPTION | WS_SYSMENU,
0, 0,
125,
80,
NULL,
NULL,
hInstance,
NULL);
// pokazujemy nasze okno i je od razu odświeżamy
ShowWindow (g_hwndOkno, nCmdShow);
UpdateWindow (g_hwndOkno);
/* pobieramy kontekst urządzenia ekranu */
g_hdcEkran = GetDC(NULL);
/* pętla komunikatów */
MSG msgKomunikat;
while (GetMessage(&msgKomunikat, NULL, 0, 0))
{
TranslateMessage (&msgKomunikat);
DispatchMessage (&msgKomunikat);
}
// zwracamy kod wyjścia
return static_cast<int>(msgKomunikat.wParam);
}
Z góry dziękuje