15
Апр
2021

Ломаная и многоугольник, которые соединяют все точки обозначеные нажатием мыши

Пользователь на рабочей области нажимает кнопку мыши несколько раз. Затем нажимает одну из кнопок. В зависимости от нажатой кнопки должна нарисоваться или ломаная, соединяющая все точки обозначены нажатием мышки, или многоугольник (замкнутый контур)

Пожалуйста помогите дописать, не знаю как дальше

Код:

#include "framework.h"
#include "task1.h"
#define MAX_LOADSTRING 100
 // Глобальные переменные:
 HINSTANCE hInst;                                // текущий экземпляр
 WCHAR szTitle[MAX_LOADSTRING];                  // текст строки заголовка
 WCHAR szWindowClass[MAX_LOADSTRING];            // имя класса главного окна

// Отправить объявления функций, включенных в этот модуль кода:
ATOM                MyRegisterClass(HINSTANCE hInstance);
BOOL                InitInstance(HINSTANCE, int);
LRESULT CALLBACK    WndProc(HWND, UINT, WPARAM, LPARAM);
INT_PTR CALLBACK    About(HWND, UINT, WPARAM, LPARAM);
int APIENTRY wWinMain(_In_ HINSTANCE hInstance,
                 _In_opt_ HINSTANCE hPrevInstance,
                 _In_ LPWSTR    lpCmdLine,
                 _In_ int       nCmdShow)
{
   UNREFERENCED_PARAMETER(hPrevInstance);
   UNREFERENCED_PARAMETER(lpCmdLine);



// Инициализация глобальных строк
LoadStringW(hInstance, IDS_APP_TITLE, szTitle, MAX_LOADSTRING);
LoadStringW(hInstance, IDC_MSP2, szWindowClass, MAX_LOADSTRING);
MyRegisterClass(hInstance);

// Выполнить инициализацию приложения:
if (!InitInstance (hInstance, nCmdShow))
{
    return FALSE;
}

HACCEL hAccelTable = LoadAccelerators(hInstance, MAKEINTRESOURCE(IDC_MSP2));

MSG msg;

// Цикл основного сообщения:
while (GetMessage(&msg, nullptr, 0, 0))
{
    if (!TranslateAccelerator(msg.hwnd, hAccelTable, &msg))
    {
        TranslateMessage(&msg);
        DispatchMessage(&msg);
    }
}

return (int) msg.wParam;
 }



 ATOM MyRegisterClass(HINSTANCE hInstance)
{
   WNDCLASSEXW wcex;

wcex.cbSize = sizeof(WNDCLASSEX);

wcex.style          = CS_HREDRAW | CS_VREDRAW;
wcex.lpfnWndProc    = WndProc;
wcex.cbClsExtra     = 0;
wcex.cbWndExtra     = 0;
wcex.hInstance      = hInstance;
wcex.hIcon          = LoadIcon(hInstance, MAKEINTRESOURCE(IDI_MSP2));
wcex.hCursor        = LoadCursor(nullptr, IDC_ARROW);
wcex.hbrBackground  = (HBRUSH)(COLOR_WINDOW+1);
wcex.lpszMenuName   = MAKEINTRESOURCEW(IDC_MSP2);
wcex.lpszClassName  = szWindowClass;
wcex.hIconSm        = LoadIcon(wcex.hInstance, MAKEINTRESOURCE(IDI_SMALL));

return RegisterClassExW(&wcex);
 }

BOOL InitInstance(HINSTANCE hInstance, int nCmdShow)
{
    hInst = hInstance;

    HWND hWnd = CreateWindowW(szWindowClass, szTitle, WS_OVERLAPPEDWINDOW,
    CW_USEDEFAULT, 0, CW_USEDEFAULT, 0, nullptr, nullptr, hInstance, nullptr);

if (!hWnd)
{
  return FALSE;
}

  ShowWindow(hWnd, nCmdShow);
  UpdateWindow(hWnd);

return TRUE;}


//  ФУНКЦИЯ: WndProc(HWND, UINT, WPARAM, LPARAM)

#define ID_BUTTONLine 1
#define ID_BUTTONPolygon 2
LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) {
PAINTSTRUCT ps;
HDC hdc;
HBRUSH hBrush;
HGDIOBJ prev;
static int i = 0;
static POINT a[100];
static RECT rc;

switch (message) /* handle the messages */
{

case WM_SIZE:
    InvalidateRect(hWnd, &rc, true);
    UpdateWindow(hWnd);
    break;

case WM_PAINT:
    hdc = BeginPaint(hWnd, &ps);
    hBrush = CreateSolidBrush(RGB(0, 255, 0));
    prev = SelectObject(hdc, hBrush);
    for (int j = 0; j < i; j++)
        Ellipse(hdc, a[j].x, a[j].y, a[j].x + 10, a[j].y + 10);
    SelectObject(hdc, SelectObject(hdc, prev));

    EndPaint(hWnd, &ps);
    break;

case WM_LBUTTONDOWN:
    if (i < 5) {
        a[i].x = LOWORD(lParam);
        a[i++].y = HIWORD(lParam);
        InvalidateRect(hWnd, &rc, true);
        UpdateWindow(hWnd);

    }
    break;

case WM_CREATE:
    GetClientRect(hWnd, &rc);
    CreateWindow(TEXT("BUTTON"), TEXT("Line"),
        WS_VISIBLE | WS_CHILD,
        10, 10, 200, 30,
        hWnd, (HMENU)ID_BUTTONLine, NULL, NULL);

    CreateWindow(TEXT("BUTTON"), TEXT("Polygon"),
        WS_VISIBLE | WS_CHILD,
        220, 10, 200, 30,
        hWnd, (HMENU)ID_BUTTONPolygon, NULL, NULL);
    break;
case WM_COMMAND:
   
    if (LOWORD(wParam) == ID_BUTTONLine)
    {
     /////
    }
    break;

    if (LOWORD(wParam) == ID_BUTTONPolygon)
    {
     /////
    }
    break;


case WM_DESTROY:
    PostQuitMessage(0); 
    break;
default: 
    return DefWindowProc(hWnd, message, wParam, lParam);
}
return 0;

}

Источник: https://ru.stackoverflow.com/questions/1270618/%D0%9B%D0%BE%D0%BC%D0%B0%D0%BD%D0%B0%D1%8F-%D0%B8-%D0%BC%D0%BD%D0%BE%D0%B3%D0%BE%D1%83%D0%B3%D0%BE%D0%BB%D1%8C%D0%BD%D0%B8%D0%BA-%D0%BA%D0%BE%D1%82%D0%BE%D1%80%D1%8B%D0%B5-%D1%81%D0%BE%D0%B5%D0%B4%D0%B8%D0%BD%D1%8F%D1%8E%D1%82-%D0%B2%D1%81%D0%B5-%D1%82%D0%BE%D1%87%D0%BA%D0%B8-%D0%BE%D0%B1%D0%BE%D0%B7%D0%BD%D0%B0%D1%87%D0%B5%D0%BD%D1%8B%D0%B5-%D0%BD%D0%B0%D0%B6%D0%B0%D1%82%D0%B8%D0%B5%D0%BC-%D0%BC%D1%8B%D1%88%D0%B8

Тебе может это понравится...

Добавить комментарий