Прямоуголькник с++

Discussion in 'С/С++, C#, Rust, Swift, Go, Java, Perl, Ruby' started by Besi, 15 May 2010.

  1. Besi

    Besi Member

    Joined:
    3 Nov 2009
    Messages:
    0
    Likes Received:
    8
    Reputations:
    5
    Під час переміщення миші при натиснутій лівій кнопці точка розширюється до прямокутника, ліва верхня вершина якого знаходиться в тих самих координатах, де було натиснуто ліву кнопку миші.

    Поясняю :)

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

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

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

    Besi Member

    Joined:
    3 Nov 2009
    Messages:
    0
    Likes Received:
    8
    Reputations:
    5
    буду благодарен) а то я понимаю как зделать а вот реализовать нормально немогу
     
  3. Besi

    Besi Member

    Joined:
    3 Nov 2009
    Messages:
    0
    Likes Received:
    8
    Reputations:
    5
    щас опробуем))
     
  4. sn0w

    sn0w Статус пользователя:

    Joined:
    26 Jul 2005
    Messages:
    1,021
    Likes Received:
    1,200
    Reputations:
    327
    вот еще. с цветом

    Code:
    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;
    }
     
    1 person likes this.
  5. Besi

    Besi Member

    Joined:
    3 Nov 2009
    Messages:
    0
    Likes Received:
    8
    Reputations:
    5
    всёто хоршо)) только не что что нада)
    смотре в том коже что ты дал
    ты жмёш мышку получаеш коррдинаты
    дальше мышка может двигатся В ЛЮБУЮ СТОРОНУ но прямоугольник должен расшырятся в левый нижний угол)
    вот так вот))
     
  6. sn0w

    sn0w Статус пользователя:

    Joined:
    26 Jul 2005
    Messages:
    1,021
    Likes Received:
    1,200
    Reputations:
    327
    ща
     
    #6 sn0w, 15 May 2010
    Last edited: 15 May 2010
  7. Besi

    Besi Member

    Joined:
    3 Nov 2009
    Messages:
    0
    Likes Received:
    8
    Reputations:
    5
    Смотри
    p1.x = point.x;
    p1.y = point.y;
    получили координату где мы кликнули

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

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

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


    (пробелы смазались но думаю понятно)
     
    1 person likes this.
  8. sn0w

    sn0w Статус пользователя:

    Joined:
    26 Jul 2005
    Messages:
    1,021
    Likes Received:
    1,200
    Reputations:
    327
    это ты имел ввиду?

    Code:
    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;
    }
     
    3 people like this.
  9. Besi

    Besi Member

    Joined:
    3 Nov 2009
    Messages:
    0
    Likes Received:
    8
    Reputations:
    5
    ПРимного благодарен именно то что нада было)) немог до етого алгоритма додуматся))