PDA

Просмотр полной версии : Прямоуголькник с++


Besi
15.05.2010, 17:54
Під час переміщення миші при натиснутій лівій кнопці точка розширюється до прямокутника, ліва верхня вершина якого знаходиться в тих самих координатах, де було натиснуто ліву кнопку миші.

Поясняю :)

при нажатой мышке onmousmove
должен прорисоватся прямоугольник из точки которая была создана при OnLButtonDown
собственно я как понимаю алгоритм
создаётся 4 точки с координатами x,y причём x1,y1 будут равны m_pointOld.x и m_pointOld.y

Собственно вопрос как мне разместить остальные координаты ТАК чтобы при OnMousMove из точки которая была создана на OnLButtonDowm создавался прямоугольник и при OnMousMove он расширялся в левый нижний угол

нужен собственно тупо код данной реализации
(при движении мышка идёт прорисовка прямоугольника потом его зарисовка и прорисовка с новыми координатами)

Besi
15.05.2010, 18:55
буду благодарен) а то я понимаю как зделать а вот реализовать нормально немогу

Besi
15.05.2010, 19:59
щас опробуем))

sn0w
15.05.2010, 20:09
вот еще. с цветом


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;
}

Besi
15.05.2010, 20:22
всёто хоршо)) только не что что нада)
смотре в том коже что ты дал
ты жмёш мышку получаеш коррдинаты
дальше мышка может двигатся В ЛЮБУЮ СТОРОНУ но прямоугольник должен расшырятся в левый нижний угол)
вот так вот))

sn0w
15.05.2010, 20:25
ща

Besi
15.05.2010, 20:36
Смотри
p1.x = point.x;
p1.y = point.y;
получили координату где мы кликнули

Дальше мышку можно двигать а любую сторону (клиентской облости)
(сейчас реализовано то что когда двигаеш прямоугольник вдигается в туже сторону что и движение мышки)
Дальше при движении в любую сторону прямоугольник должен увеличиватся в левй нижний угол вот так
-------
| |
--------

(начало координат)
-------------
| |
| |
| |
-------------

вот так )чтобы при движении в любом направлении прямоугольник увеличивается в определёную сторону


(пробелы смазались но думаю понятно)

sn0w
15.05.2010, 20:49
это ты имел ввиду?

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;
}

Besi
15.05.2010, 21:05
ПРимного благодарен именно то что нада было)) немог до етого алгоритма додуматся))