Добрый день. Прошу не много помощи я сам начал изучать С++ и вот мне предстоит задача сделать упрощенный "Графический редактор" . Не могу понять одной вещи:
-Надо сделать что бы максимальное число создаваемых фигур было не больше 10 ( когда пользователь создает 11 фигуру что бы она не создавалась )
-И подскажите или помогите как сделать что бы активная фигура выделялась другим цветом или более жирной линией )
Код:
#include <windows.h>
#include <math.h>
#include <stdio.h>
LRESULT CALLBACK WndProc(HWND,UINT,WPARAM,LPARAM);
int x[10];
int y[10];
int R[10];
int t[10];
int v[10];
int n=-1, m;
char cC[10];
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)
{
HWND hMainWnd;
char szClassName[]= "MyClass";
MSG msg;
WNDCLASSEX wc;
wc.cbSize = sizeof(wc);
wc.style = CS_HREDRAW|CS_VREDRAW;
wc.lpfnWndProc = WndProc;
wc.cbClsExtra = 0;
wc.cbWndExtra = 0;
wc.hInstance = hInstance;
wc.hIcon = LoadIcon(NULL, IDI_APPLICATION);
wc.hCursor = LoadCursor(NULL,IDC_ARROW);
wc.hbrBackground = HBRUSH(COLOR_WINDOW);
wc.lpszMenuName = NULL;
wc.lpszClassName = szClassName;
wc.hIconSm = LoadIcon(NULL,IDI_APPLICATION);
if(!RegisterClassEx(&wc))
{ MessageBox(NULL,"Cannot register class", "Error", MB_OK);
return 0;}
hMainWnd = CreateWindow(
szClassName, "Test application", WS_OVERLAPPEDWINDOW, CW_USEDEFAULT,0,CW_USEDEFAULT,0,(HWND)NULL, (HMENU)NULL,(HINSTANCE)hInstance, NULL);
if (!hMainWnd) {
MessageBox(NULL, "Cannot create main window", "Error", MB_OK);
return 0; }
ShowWindow(hMainWnd, nCmdShow);
while (GetMessage(&msg, NULL, 0, 0))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
return msg.wParam;
}
LRESULT CALLBACK WndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
HDC hDC;
PAINTSTRUCT ps;
RECT rect;
float pi=3.14;
switch (uMsg)
{
case WM_PAINT:
hDC = BeginPaint(hWnd, &ps);
for (int i=0;i<10;i++)
if (v[i]==1)
{
if(t[i]==2)
{MoveToEx(hDC,x[i]-R[i],y[i],NULL);
LineTo(hDC,x[i],y[i]-R[i]);
LineTo(hDC,x[i]+R[i],y[i]);
LineTo(hDC,x[i],y[i]+R[i]);
LineTo(hDC,x[i]-R[i],y[i]);}
if(t[i]==4)
{MoveToEx(hDC,x[i]-R[i],y[i],NULL);
LineTo(hDC,x[i]+R[i],y[i]);
MoveToEx(hDC,x[i],y[i]+R[i],NULL);
LineTo(hDC,x[i],y[i]-R[i]);}
if(t[i]==6)
{MoveToEx(hDC,R[i],2*R[i],NULL);
LineTo(hDC,3*R[i],2*R[i]);
LineTo(hDC,3*R[i]-R[i]*cos(pi/3),2*R[i]-R[i]*sin(pi/3));
LineTo(hDC,R[i],2*R[i]);}
};
EndPaint(hWnd, &ps);
break;
case WM_LBUTTONDOWN:
x[n]=LOWORD(lParam);
y[n]=HIWORD(lParam);
GetClientRect(hWnd,&rect);
InvalidateRect(hWnd,&rect, -1);
UpdateWindow(hWnd);
break;
case WM_KEYDOWN:
if (wParam==VK_F2)
{n++;
x[n]=100;
y[n]=100;
R[n]=80;
v[n]=1;
t[n]=2;
GetClientRect(hWnd,&rect);
InvalidateRect(hWnd,&rect, -1);
UpdateWindow(hWnd);}
if (wParam==VK_F4)
{n++;
x[n]=100;
y[n]=100;
R[n]=80;
v[n]=1;
t[n]=4;
GetClientRect(hWnd,&rect);
InvalidateRect(hWnd,&rect, -1);
UpdateWindow(hWnd);}
if (wParam==VK_F6)
{n++;
x[n]=100;
y[n]=100;
R[n]=80;
v[n]=1;
t[n]=6;
GetClientRect(hWnd,&rect);
InvalidateRect(hWnd,&rect, -1);
UpdateWindow(hWnd);}
if (wParam==VK_UP)
{
R[n]=R[n]+10;
GetClientRect(hWnd,&rect);
InvalidateRect(hWnd,&rect, -1);
UpdateWindow(hWnd);}
if (wParam==VK_DOWN)
{
R[n]=R[n]-10;
GetClientRect(hWnd,&rect);
InvalidateRect(hWnd,&rect, -1);
UpdateWindow(hWnd);}
if (wParam==VK_LEFT)
{
n--;
GetClientRect(hWnd,&rect);
InvalidateRect(hWnd,&rect, -1);
UpdateWindow(hWnd);}
if (wParam==VK_RIGHT)
{
n++;
GetClientRect(hWnd,&rect);
InvalidateRect(hWnd,&rect, -1);
UpdateWindow(hWnd);}
break;
case WM_CLOSE:
DestroyWindow(hWnd);
break;
case WM_DESTROY:
PostQuitMessage(0);
break;
default:
return DefWindowProc(hWnd, uMsg, wParam, lParam);
}
return 0;
}