Последние записи
- TChromium (CEF3), сохранение изображений
- Как в Delphi XE обнулить таймер?
- Изменить цвет шрифта TextBox на форме
- Ресайз PNG без потери прозрачности
- Вывод на печать графического файла
- Взаимодействие через командную строку
- Перенести программу из Delphi в Lazarus
- Определить текущую ОС
- Автоматическая смена языка (раскладки клавиатуры)
- Сравнение языков на массивах. Часть 2
Интенсив по Python: Работа с API и фреймворками 24-26 ИЮНЯ 2022. Знаете Python, но хотите расширить свои навыки?
Slurm подготовили для вас особенный продукт! Оставить заявку по ссылке - https://slurm.club/3MeqNEk
Online-курс Java с оплатой после трудоустройства. Каждый выпускник получает предложение о работе
И зарплату на 30% выше ожидаемой, подробнее на сайте академии, ссылка - ttps://clck.ru/fCrQw
11th
Окт
Рисование многоугольника мышкой
Posted by bullvinkle under Пост-обзор
Доброго дня!
Вот всё пытаюсь сделать рисование многоугольника мышкой. Моя логика такая:
static int n=0;
POINT pt[10];
1. Нажатием левой клавиши запоминаю первую точку
case WM_LBUTTONDOWN:
x=LOWORD(lParam); //coordinates 1
y=HIWORD(lParam);
break;
2. Отжатием – запоминаю вторую и последующие
case WM_LBUTTONUP:
hdc=GetDC(hWnd);
x2=LOWORD(lParam); //coordinates 2
y2=HIWORD(lParam);
SelectObject(hdc, hPen);
SelectObject(hdc1, hPen);
if (n==0) {pt[0].x=x; pt[0].y=y;}
n++;
pt[n].x=x2;
pt[n].y=y2;
ReleaseDC (hWnd,hdc);
break;
3. Нажатием правой клавиши рисую получившуюся фигуру:
case WM_RBUTTONDOWN:
hdc=GetDC(hWnd);
SelectObject(hdc, hPen);
SelectObject(hdc1, hPen);
Polygon(hdc,pt,n);
Polygon(hdc1,pt,n);
n=0;
ReleaseDC (hWnd,hdc);
break;
Но не работает. Что я делаю не так?
ТС сам нашел решение:
case WM_LBUTTONDOWN:
x=LOWORD(lParam); //coordinates 1
y=HIWORD(lParam);
if (n==0) {
x0=x;
y0=y;
}
break;
case WM_LBUTTONUP:
hdc=GetDC(hWnd);
x2=LOWORD(lParam); //coordinates 2
y2=HIWORD(lParam);
SelectObject(hdc, hPen);
SelectObject(hdc1, hPen);
//choise++;
//if (choise==6) {choise=1;}
choise=5;
switch (choise) {
case 1:
Rectangle (hdc,x,y, x2,y2);
Rectangle (hdc1,x,y, x2,y2);
break;
case 2:
Ellipse (hdc,x,y, x2,y2);
Ellipse (hdc1,x,y, x2,y2);
break;
case 3:
MoveToEx(hdc,x,y,0);
LineTo (hdc,x2,y2);
MoveToEx(hdc1,x,y,0);
LineTo (hdc1,x2,y2);
break;
case 4:
case 5:
if (n==0)
{
pt[0].x=x;
pt[0].y=y;
pt[1].x=x2;
pt[1].y=y2;
n=1;
MoveToEx(hdc,x,y,0);
LineTo (hdc,x2,y2);
MoveToEx(hdc1,x,y,0);
LineTo (hdc1,x2,y2);
}
else
{
MoveToEx(hdc,x0,y0,0);
LineTo (hdc,x2,y2);
MoveToEx(hdc1,x0,y0,0);
LineTo (hdc1,x2,y2);
pt[n].x=x2;
pt[n].y=y2;
}
n++;
x0=x2; y0=y2; //захоўваем пачатак наступнага адрэзка
break;
}
ReleaseDC (hWnd,hdc);
break;
case WM_RBUTTONDOWN:
hdc=GetDC(hWnd);
SelectObject(hdc, hPen2);
SelectObject(hdc1, hPen2);
if (choise==4) {
Polygon(hdc,pt,n);
Polygon(hdc1,pt,n);
}
if (choise==5) {
Polyline(hdc,pt,n);
Polyline(hdc1,pt,n);
}
ReleaseDC (hWnd,hdc);
break;
Похожие статьи
Купить рекламу на сайте за 1000 руб
пишите сюда - alarforum@yandex.ru
Да и по любым другим вопросам пишите на почту
пеллетные котлы
Пеллетный котел Emtas
Наши форумы по программированию:
- Форум Web программирование (веб)
- Delphi форумы
- Форумы C (Си)
- Форум .NET Frameworks (точка нет фреймворки)
- Форум Java (джава)
- Форум низкоуровневое программирование
- Форум VBA (вба)
- Форум OpenGL
- Форум DirectX
- Форум CAD проектирование
- Форум по операционным системам
- Форум Software (Софт)
- Форум Hardware (Компьютерное железо)