ANTICHAT — форум по информационной безопасности, OSINT и технологиям
ANTICHAT — русскоязычное сообщество по безопасности, OSINT и программированию.
Форум ранее работал на доменах antichat.ru, antichat.com и antichat.club,
и теперь снова доступен на новом адресе —
forum.antichat.xyz.
Форум восстановлен и продолжает развитие: доступны архивные темы, добавляются новые обсуждения и материалы.
⚠️ Старые аккаунты восстановить невозможно — необходимо зарегистрироваться заново.
 |

15.05.2010, 17:54
|
|
Участник форума
Регистрация: 03.11.2009
Сообщений: 102
Провел на форуме: 1319431
Репутация:
22
|
|
Прямоуголькник с++
Під час переміщення миші при натиснутій лівій кнопці точка розширюється до прямокутника, ліва верхня вершина якого знаходиться в тих самих координатах, де було натиснуто ліву кнопку миші.
Поясняю
при нажатой мышке onmousmove
должен прорисоватся прямоугольник из точки которая была создана при OnLButtonDown
собственно я как понимаю алгоритм
создаётся 4 точки с координатами x,y причём x1,y1 будут равны m_pointOld.x и m_pointOld.y
Собственно вопрос как мне разместить остальные координаты ТАК чтобы при OnMousMove из точки которая была создана на OnLButtonDowm создавался прямоугольник и при OnMousMove он расширялся в левый нижний угол
нужен собственно тупо код данной реализации
(при движении мышка идёт прорисовка прямоугольника потом его зарисовка и прорисовка с новыми координатами)
|
|
|

15.05.2010, 18:55
|
|
Участник форума
Регистрация: 03.11.2009
Сообщений: 102
Провел на форуме: 1319431
Репутация:
22
|
|
буду благодарен) а то я понимаю как зделать а вот реализовать нормально немогу
|
|
|

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

15.05.2010, 20:09
|
|
Статус пользователя:
Регистрация: 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
|
|
|

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

15.05.2010, 20:25
|
|
Статус пользователя:
Регистрация: 26.07.2005
Сообщений: 568
Провел на форуме: 1290766
Репутация:
1236
|
|
ща
__________________
 
snow white world wide
Последний раз редактировалось sn0w; 15.05.2010 в 20:32..
|
|
|

15.05.2010, 20:36
|
|
Участник форума
Регистрация: 03.11.2009
Сообщений: 102
Провел на форуме: 1319431
Репутация:
22
|
|
Смотри
p1.x = point.x;
p1.y = point.y;
получили координату где мы кликнули
Дальше мышку можно двигать а любую сторону (клиентской облости)
(сейчас реализовано то что когда двигаеш прямоугольник вдигается в туже сторону что и движение мышки)
Дальше при движении в любую сторону прямоугольник должен увеличиватся в левй нижний угол вот так
-------
| |
--------
(начало координат)
-------------
| |
| |
| |
-------------
вот так )чтобы при движении в любом направлении прямоугольник увеличивается в определёную сторону
(пробелы смазались но думаю понятно)
|
|
|

15.05.2010, 20:49
|
|
Статус пользователя:
Регистрация: 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
|
|
|

15.05.2010, 21:05
|
|
Участник форума
Регистрация: 03.11.2009
Сообщений: 102
Провел на форуме: 1319431
Репутация:
22
|
|
ПРимного благодарен именно то что нада было)) немог до етого алгоритма додуматся))
|
|
|
|
 |
|
Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
|
|
|
|