Quantcast
Channel: Project Customization and Programming forum
Viewing all articles
Browse latest Browse all 5347

zegar

$
0
0
#include <windows.h>
#include <cstdio>
#define STALA_PRZESUNIECIA 10
struct Rozdzielczosc
{
	unsigned int x, y;
}ekran = {800, 500};

struct Prostokat
{
	unsigned int left, top, right, bottom;
}prostokat, org_prostokat;

struct Myszka
{
	unsigned int x, y;
}mysz;

const COLORREF kolory[] = {RGB(255, 0, 0), RGB(0, 255, 0), RGB(0, 0, 255)};
const int desen[] = {HS_BDIAGONAL, HS_CROSS, HS_DIAGCROSS, HS_FDIAGONAL, HS_FDIAGONAL, HS_HORIZONTAL, HS_VERTICAL};
short int index = -1;
short int index_d = 0;
unsigned int licznik = 0;
bool stan_d = false;

TCHAR nazwaKlasy[] = TEXT("Nazwa klasy okna");
TCHAR nazwaAplikacji[] = TEXT("Aplikacja");

LRESULT CALLBACK WndProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam)
{
	wchar_t buffor[64];

	switch(msg)
	{ 
	case WM_CREATE:
		if(MessageBox(hWnd, L"Ograniczyć obszar działań?", L"Pytanie", MB_YESNO | MB_ICONQUESTION) == IDYES)
		{
			RECT okno;
			GetWindowRect(hWnd, &okno);
			ClipCursor (&okno);
		}
		break;
	case WM_PAINT:
		HDC hdc;
		PAINTSTRUCT info;
		hdc = BeginPaint(hWnd, &info);
		// skalowanie
		RECT r;
		GetClientRect(hWnd, &r);
		SetMapMode(hdc, MM_ANISOTROPIC);
		SetWindowOrgEx(hdc, 0, 0, NULL);
		SetWindowExtEx(hdc, ekran.x, ekran.y, NULL);
		SetViewportOrgEx(hdc, 0, 0, NULL);
		SetViewportExtEx(hdc, r.right, r.bottom, NULL);
		// koniec skalowania
		if(index >= 0 && licznik == 2)
		{
			SaveDC(hdc);

			HBRUSH pedzel;
			if(!stan_d)
				pedzel = CreateSolidBrush(kolory[index]);
			else
				pedzel = CreateHatchBrush(index_d, kolory[index]);
			SelectObject(hdc, pedzel);
			Rectangle(hdc, prostokat.left, prostokat.top, prostokat.right, prostokat.bottom);
			RestoreDC(hdc, -1);
			DeleteObject(pedzel);
		}
		else
			Rectangle(hdc, prostokat.left, prostokat.top, prostokat.right, prostokat.bottom);
		swprintf(buffor, L"Prostokąt [(%u,%u):(%u,%u)]", prostokat.left, prostokat.top, prostokat.right, prostokat.bottom);
		SetWindowText(hWnd, buffor);
		EndPaint(hWnd, &info);
		break;
	case WM_LBUTTONDOWN: 
		mysz.x = (unsigned int)LOWORD(lParam);
		mysz.y = (unsigned int)HIWORD(lParam);
		if(licznik == 0)
		{
			prostokat.left = mysz.x;
			prostokat.top = mysz.y;
			++licznik;
			break;
		}
		else if(licznik == 1)
		{
			prostokat.right = mysz.x;
			prostokat.bottom = mysz.y;
			++licznik;
			break;
		}
		else
		{
			if(wParam & MK_SHIFT)
			{
				prostokat.right = (prostokat.right - prostokat.left) + mysz.x;
				prostokat.bottom = (prostokat.bottom - prostokat.top) + mysz.y;
				prostokat.left = mysz.x;
				prostokat.top = mysz.y;
			}
			else if(wParam & MK_CONTROL)
			{
				if(mysz.x >= prostokat.left && mysz.x <= prostokat.right && mysz.y >= prostokat.top && mysz.y <= prostokat.bottom)
				{
					if(index == 2)
						index = -1;
					else
						++index;
				}
			}
		}
		InvalidateRect(hWnd, NULL, TRUE);
		break;
	case WM_RBUTTONDOWN:
		mysz.x = (unsigned int)LOWORD(lParam);
		mysz.y = (unsigned int)HIWORD(lParam);
		if(wParam & MK_CONTROL)
		{
			if(mysz.x >= prostokat.left && mysz.x <= prostokat.right && mysz.y >= prostokat.top && mysz.y <= prostokat.bottom)
			{
				if(index_d == 5)
				{
					index_d = -1;
					stan_d = false;
				}
				else
				{
					++index_d;
					stan_d = true;
				}
			}
		}
		InvalidateRect(hWnd, NULL, TRUE);
		break;
	case WM_MOUSEMOVE:
		if(licznik == 1)
		{
			prostokat.right = (unsigned int)LOWORD(lParam);
			prostokat.bottom = (unsigned int)HIWORD(lParam);
			InvalidateRect(hWnd, NULL, TRUE);
		}
		break;
	case WM_KEYDOWN:
		switch((int)wParam) 
		{
		case VK_RIGHT:
			prostokat.left += STALA_PRZESUNIECIA;
			prostokat.right += STALA_PRZESUNIECIA;
			break;
		case VK_LEFT:
			prostokat.left -= STALA_PRZESUNIECIA;
			prostokat.right -= STALA_PRZESUNIECIA;
			break;
		case VK_UP:
			prostokat.top -= STALA_PRZESUNIECIA;
			prostokat.bottom -= STALA_PRZESUNIECIA;
			break;
		case VK_DOWN:
			prostokat.top += STALA_PRZESUNIECIA;
			prostokat.bottom += STALA_PRZESUNIECIA;
			break;
		case VK_NUMPAD8:
			prostokat.bottom -= STALA_PRZESUNIECIA;
			break;
		case VK_NUMPAD2:
			prostokat.bottom += STALA_PRZESUNIECIA;
			break;
		case VK_NUMPAD4:
			prostokat.right -= STALA_PRZESUNIECIA;
			break;
		case VK_NUMPAD6:
			prostokat.right += STALA_PRZESUNIECIA;
			break;
		case VK_NUMPAD5:
			prostokat.top -= STALA_PRZESUNIECIA;
			prostokat.bottom += STALA_PRZESUNIECIA;
			prostokat.right += STALA_PRZESUNIECIA;
			prostokat.left -= STALA_PRZESUNIECIA;
			break;
		case VK_NUMPAD0:
			prostokat.top += STALA_PRZESUNIECIA;
			prostokat.bottom -= STALA_PRZESUNIECIA;
			prostokat.right -= STALA_PRZESUNIECIA;
			prostokat.left += STALA_PRZESUNIECIA;
			break;
		}
		InvalidateRect(hWnd, NULL, TRUE);
		break;
	case WM_DESTROY:
		PostQuitMessage(0);
	default:
		return DefWindowProc(hWnd, msg, wParam, lParam);
	}
	return 0;
}

bool TworzenieKlasyOkna(WNDCLASSEX &wc, HINSTANCE hInstance)
{
	wc.cbClsExtra = 0;
	wc.cbSize = sizeof(WNDCLASSEX);
	wc.cbWndExtra = 0;
	wc.hbrBackground = (HBRUSH)(COLOR_WINDOW + 1);
	wc.hCursor = LoadCursor(NULL, IDC_ARROW);
	wc.hIcon = LoadIcon(NULL, IDI_APPLICATION);
	wc.hIconSm = 0;
	wc.hInstance = hInstance;
	wc.lpfnWndProc = &WndProc;
	wc.lpszClassName = nazwaKlasy;
	wc.lpszMenuName = 0;
	wc.style = CS_HREDRAW | CS_VREDRAW;
	if(!RegisterClassEx(&wc))
	{
		MessageBox(0, TEXT("Błąd rejestracji"), TEXT("Błąd"), MB_OK | MB_ICONERROR | MB_TASKMODAL);
		return true;
	}
	return false;
}

int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nShowCmd)
{
	WNDCLASSEX wc;
	HWND hwnd;
	MSG msg;
	if(TworzenieKlasyOkna(wc, hInstance))
		return 1;
	hwnd = CreateWindowEx(0, nazwaKlasy, nazwaAplikacji, WS_OVERLAPPEDWINDOW | WS_VISIBLE, CW_USEDEFAULT, CW_USEDEFAULT, ekran.x, ekran.y, 0, 0, hInstance, 0);
	if(!hwnd)
	{
		MessageBox(0, TEXT("Błąd okna"), TEXT("Błąd"), MB_OK | MB_ICONERROR | MB_TASKMODAL);
		UnregisterClass(nazwaKlasy, hInstance);
		return 1;
	}
	ShowWindow(hwnd, nShowCmd);
	UpdateWindow(hwnd);
	while(GetMessage(&msg, 0, 0, 0) > 0)
	{
		TranslateMessage(&msg);
		DispatchMessage(&msg);
	}
	UnregisterClass(nazwaKlasy, hInstance);
	return static_cast<int>(msg.wParam);
}

Viewing all articles
Browse latest Browse all 5347

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>