Форум АНТИЧАТ

Форум АНТИЧАТ (https://forum.antichat.xyz/index.php)
-   С/С++, C#, Delphi, .NET, Asm (https://forum.antichat.xyz/forumdisplay.php?f=24)
-   -   Прямоуголькник с++ (https://forum.antichat.xyz/showthread.php?t=204256)

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

ПРимного благодарен именно то что нада было)) немог до етого алгоритма додуматся))


Время: 09:54