ANTICHAT.XYZ    VIDEO.ANTICHAT.XYZ    НОВЫЕ СООБЩЕНИЯ    ФОРУМ  
Баннер 1   Баннер 2

ANTICHAT — форум по информационной безопасности, OSINT и технологиям

ANTICHAT — русскоязычное сообщество по безопасности, OSINT и программированию. Форум ранее работал на доменах antichat.ru, antichat.com и antichat.club, и теперь снова доступен на новом адресе — forum.antichat.xyz.
Форум восстановлен и продолжает развитие: доступны архивные темы, добавляются новые обсуждения и материалы.
⚠️ Старые аккаунты восстановить невозможно — необходимо зарегистрироваться заново.
Вернуться   Форум АНТИЧАТ > Программирование > С/С++, C#, Delphi, .NET, Asm
   
Ответ
 
Опции темы Поиск в этой теме Опции просмотра

Прямоуголькник с++
  #1  
Старый 15.05.2010, 17:54
Besi
Участник форума
Регистрация: 03.11.2009
Сообщений: 102
Провел на форуме:
1319431

Репутация: 22
Отправить сообщение для Besi с помощью ICQ
По умолчанию Прямоуголькник с++

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

Поясняю

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

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

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

  #2  
Старый 15.05.2010, 18:55
Besi
Участник форума
Регистрация: 03.11.2009
Сообщений: 102
Провел на форуме:
1319431

Репутация: 22
Отправить сообщение для Besi с помощью ICQ
По умолчанию

буду благодарен) а то я понимаю как зделать а вот реализовать нормально немогу
 
Ответить с цитированием

  #3  
Старый 15.05.2010, 19:59
Besi
Участник форума
Регистрация: 03.11.2009
Сообщений: 102
Провел на форуме:
1319431

Репутация: 22
Отправить сообщение для Besi с помощью ICQ
По умолчанию

щас опробуем))
 
Ответить с цитированием

  #4  
Старый 15.05.2010, 20:09
sn0w
Статус пользователя:
Регистрация: 26.07.2005
Сообщений: 568
Провел на форуме:
1290766

Репутация: 1236


По умолчанию

вот еще. с цветом

Код:
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;
}
__________________


snow white world wide
 
Ответить с цитированием

  #5  
Старый 15.05.2010, 20:22
Besi
Участник форума
Регистрация: 03.11.2009
Сообщений: 102
Провел на форуме:
1319431

Репутация: 22
Отправить сообщение для Besi с помощью ICQ
По умолчанию

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

  #6  
Старый 15.05.2010, 20:25
sn0w
Статус пользователя:
Регистрация: 26.07.2005
Сообщений: 568
Провел на форуме:
1290766

Репутация: 1236


По умолчанию

ща
__________________


snow white world wide

Последний раз редактировалось sn0w; 15.05.2010 в 20:32..
 
Ответить с цитированием

  #7  
Старый 15.05.2010, 20:36
Besi
Участник форума
Регистрация: 03.11.2009
Сообщений: 102
Провел на форуме:
1319431

Репутация: 22
Отправить сообщение для Besi с помощью ICQ
По умолчанию

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

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

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

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


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

  #8  
Старый 15.05.2010, 20:49
sn0w
Статус пользователя:
Регистрация: 26.07.2005
Сообщений: 568
Провел на форуме:
1290766

Репутация: 1236


По умолчанию

это ты имел ввиду?

Код:
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;
}
__________________


snow white world wide
 
Ответить с цитированием

  #9  
Старый 15.05.2010, 21:05
Besi
Участник форума
Регистрация: 03.11.2009
Сообщений: 102
Провел на форуме:
1319431

Репутация: 22
Отправить сообщение для Besi с помощью ICQ
По умолчанию

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





Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
 


Быстрый переход




ANTICHAT.XYZ