Просмотр полной версии : Прямоуголькник с++
Під час переміщення миші при натиснутій лівій кнопці точка розширюється до прямокутника, ліва верхня вершина якого знаходиться в тих самих координатах, де було натиснуто ліву кнопку миші.
Поясняю :)
при нажатой мышке onmousmove
должен прорисоватся прямоугольник из точки которая была создана при OnLButtonDown
собственно я как понимаю алгоритм
создаётся 4 точки с координатами x,y причём x1,y1 будут равны m_pointOld.x и m_pointOld.y
Собственно вопрос как мне разместить остальные координаты ТАК чтобы при OnMousMove из точки которая была создана на OnLButtonDowm создавался прямоугольник и при OnMousMove он расширялся в левый нижний угол
нужен собственно тупо код данной реализации
(при движении мышка идёт прорисовка прямоугольника потом его зарисовка и прорисовка с новыми координатами)
буду благодарен) а то я понимаю как зделать а вот реализовать нормально немогу
вот еще. с цветом
POINT p1;
BOOL b_Drawing;
void CtestrectDlg::OnMouseMove(UINT nFlags, CPoint point)
{
CDC *pdc = GetDC();
RECT rc;
CBrush cbr;
cbr.CreateSolidBrush(RGB(128,128,128));
GetClientRect(&rc);
pdc->FillRect(&rc, &cbr);
if(b_Drawing){
cbr.CreateSolidBrush(RGB(128,128,255));
pdc->SelectObject(&cbr);
pdc->Rectangle(p1.x, p1.y, point.x, point.y);
}
}
void CtestrectDlg::OnLButtonDown(UINT nFlags, CPoint point)
{
p1.x = point.x;
p1.y = point.y;
b_Drawing = TRUE;
}
void CtestrectDlg::OnLButtonUp(UINT nFlags, CPoint point)
{
b_Drawing = FALSE;
}
всёто хоршо)) только не что что нада)
смотре в том коже что ты дал
ты жмёш мышку получаеш коррдинаты
дальше мышка может двигатся В ЛЮБУЮ СТОРОНУ но прямоугольник должен расшырятся в левый нижний угол)
вот так вот))
Смотри
p1.x = point.x;
p1.y = point.y;
получили координату где мы кликнули
Дальше мышку можно двигать а любую сторону (клиентской облости)
(сейчас реализовано то что когда двигаеш прямоугольник вдигается в туже сторону что и движение мышки)
Дальше при движении в любую сторону прямоугольник должен увеличиватся в левй нижний угол вот так
-------
| |
--------
(начало координат)
-------------
| |
| |
| |
-------------
вот так )чтобы при движении в любом направлении прямоугольник увеличивается в определёную сторону
(пробелы смазались но думаю понятно)
это ты имел ввиду?
POINT p1, p2, delta;
BOOL b_Drawing;
void CtestrectDlg::OnMouseMove(UINT nFlags, CPoint point)
{
CDC *pdc = GetDC();
RECT rc;
CBrush cbr;
cbr.CreateSolidBrush(RGB(128,128,128));
GetClientRect(&rc);
pdc->FillRect(&rc, &cbr);
if(b_Drawing){
cbr.CreateSolidBrush(RGB(128,128,255));
pdc->SelectObject(&cbr);
delta.x = abs(delta.x - point.x);
delta.y = abs(delta.y - point.y);
p2.x = p2.x - delta.x;
p2.y = p2.y + delta.y;
pdc->Rectangle(p1.x, p1.y, p2.x, p2.y);
}
delta.x = point.x;
delta.y = point.y;
}
void CtestrectDlg::OnLButtonDown(UINT nFlags, CPoint point)
{
p1.x = point.x;
p1.y = point.y;
p2.x = p1.x;
p2.y = p1.y;
b_Drawing = TRUE;
}
void CtestrectDlg::OnLButtonUp(UINT nFlags, CPoint point)
{
b_Drawing = FALSE;
}
ПРимного благодарен именно то что нада было)) немог до етого алгоритма додуматся))
vBulletin® v3.8.14, Copyright ©2000-2026, vBulletin Solutions, Inc. Перевод: zCarot