Добрый день. Прошу не много помощи я сам начал изучать С++ и вот мне предстоит задача сделать упрощенный "Графический редактор" . Не могу понять одной вещи:
-Надо сделать что бы максимальное число создаваемых фигур было не больше 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
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
}