Форум программистов, компьютерный форум CyberForum.ru
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
TyLinka
32 / 32 / 11
Регистрация: 02.02.2012
Сообщений: 177
#1

Перемещение элемента - C++

28.10.2013, 14:05. Просмотров 479. Ответов 8
Метки нет (Все метки)

Подскажите, пожалуйста, с помощью каких функций можно задать перемещение (по кругу например) нарисованного элемента в picturebox?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
28.10.2013, 14:05
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Перемещение элемента (C++):

stl, перемещение элемента из вектора в стек - C++
Всем привет. Как переместить из вектора в вектор понятно std::remove_copy_if( vector1.begin(), vector1.end(),...

АТД список. Перемещение заданного элемента на первую позицию - C++
Здравствуйте!! Подскажите пожалуйста как переместить элемент списка на первую позицию? Например: есть список o o t o t,...

Определить номера минимального элемента массива и элемента, являющегося минимальным без учета этого элемента. - C++
Дан массив. Определить номера минимального элемента массива и элемента, являющегося мини-мальным без учета этого элемента.

Вставка элемента в заданную позицию, удаление элемента по заданной позиции, поиск заданного элемента - C++
Добавить в класс "Односвязный список" следующие функции: вставка элемента в заданную позицию, удаление элемента по заданной позиции, поиск...

Определить координаты левого нижнего элемента и правого верхнего элемента в матрице - C++
Задание №18 a) Статическая память. Двумерный массив. Дан массив целых чисел. В массиве есть отрицательные числа. Определить координаты...

Сделать добавление элемента в массив и удаление элемента из массива используя STL - C++
Всем привет. Помогите пожалуйста написать. Нужно использовать STL. Необходимо сделать добавление элемента в массив и удаление элемента из...

8
Hunter13ua
46 / 46 / 5
Регистрация: 25.10.2011
Сообщений: 183
28.10.2013, 14:18 #2
Я так полагаю, что в элементе есть таки параметры, как его координаты (х,y). Меняя их - сможете двигать объект. По кругу - нужна математическая формула круга. Желательно в параметрическом виде. Тогда запросто сможете вычислять новые координаты.
1
TyLinka
32 / 32 / 11
Регистрация: 02.02.2012
Сообщений: 177
28.10.2013, 15:13  [ТС] #3
Цитата Сообщение от Hunter13ua Посмотреть сообщение
Я так полагаю, что в элементе есть таки параметры, как его координаты (х,y). Меняя их - сможете двигать объект. По кругу - нужна математическая формула круга. Желательно в параметрическом виде. Тогда запросто сможете вычислять новые координаты.
Я тоже так думаю, просто не знаю эффективен ли будет алгоритм: в цикле рисовать и стирать эллипс, может есть какой-то более красивый метод?

Добавлено через 19 минут
и можно ли ещё как-нибудь затормозить движение объекта, если делать в цикле?
0
zss
Модератор
Эксперт С++
6403 / 5969 / 1945
Регистрация: 18.12.2011
Сообщений: 15,387
Завершенные тесты: 1
28.10.2013, 15:14 #4
если picturebox - это окно,
то перемещать его можно функцией MoveWindow(...)
А моменты перемещения отлавливать с помощью сообщения WM_TIMER.
Так делается в Win32 API.
1
TyLinka
32 / 32 / 11
Регистрация: 02.02.2012
Сообщений: 177
28.10.2013, 16:11  [ТС] #5
Цитата Сообщение от zss Посмотреть сообщение
если picturebox - это окно,
то перемещать его можно функцией MoveWindow(...)
А моменты перемещения отлавливать с помощью сообщения WM_TIMER.
Так делается в Win32 API.
надо перемещать не picturebox, а объект в нём, например круг

Добавлено через 10 минут
В принципе, разобралась. Сделала с помощью рисования и стирания в цикле + Sleep(). Пришлось сделать отдельную кнопку для рисования, потому что если делать на кнопку с расчетами, то расчеты выводятся только после окончания рисования.
Может кто скажет ещё что-нибудь дельное по этому поводу?
0
zss
Модератор
Эксперт С++
6403 / 5969 / 1945
Регистрация: 18.12.2011
Сообщений: 15,387
Завершенные тесты: 1
28.10.2013, 16:20 #6
Цитата Сообщение от TyLinka Посмотреть сообщение
надо перемещать не picturebox, а объект в нём, например круг
Тогда, то WM_TIMER пересчитываем новое положение объекта и подаем команду на перерисовку
InvalidateRect(..).
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
int x=0; // координата, где рисовать
int WINAPI fn(HWND hwnd,int cmd,WPARAM wp,LPARAM lp)
{
    switch(cmd)
    {
 
    case WM_INITDIALOG:
        x=0;
        SetTimer(hwnd,1,100,NULL); // запуск таймера при открытии диалогового окна 
        return 1;
    case WM_TIMER:
        x++;                      // пересчет координаты, где рисовать
        InvalidateRect(hwnd,NULL,TRUE); // команда на перерисовку
        return 1;
    case WM_CLOSE:
        EndDialog(hwnd,3); // закрытие диалога
        return 1;
    case WM_SIZE:
        InvalidateRect(hwnd,NULL,TRUE); // перерисовка при изменении окна
        return 1;
    case WM_PAINT:
    {
        PAINTSTRUCT ps;
        HDC hdc = BeginPaint(hwnd, &ps);
        RECT rt;
        GetClientRect(hwnd, &rt);
        int w=rt.right;int h=rt.bottom;// длина и высота рабочей области
                
                
        HBRUSH b1,b2,b0;
        b1=CreateSolidBrush(RGB(255,255,255)); // белая кисть 1 круга
        b2=CreateSolidBrush(RGB(255,0,0)); // красная кисть 2 круга
                
        b0=(HBRUSH)SelectObject(hdc,b1);
        const int R=50;
        Ellipse(hdc,w/2-R,h/2-R,w/2+R,h/2+R);
 
        SelectObject(hdc,b2);
        Ellipse(hdcscr,x,h/2-R,x+2*R,h/2+R); 
        SelectObject(hdc,b0);
        DeleteDC(hdcscr);
        DeleteObject(b1);
        DeleteObject(b2);
                
        EndPaint(hwnd, &ps);
        return 1;
    }
    return 0;
        }
}
int WINAPI WinMain(HINSTANCE hi,HINSTANCE,LPSTR,int) 
{
    return DialogBox(hi,"SIMPLE",NULL,(DLGPROC)fn);
}
1
TyLinka
32 / 32 / 11
Регистрация: 02.02.2012
Сообщений: 177
28.10.2013, 17:12  [ТС] #7
вообще я делала всё в windows forms c++
этот код подойдет для неё?
0
zss
Модератор
Эксперт С++
6403 / 5969 / 1945
Регистрация: 18.12.2011
Сообщений: 15,387
Завершенные тесты: 1
28.10.2013, 17:28 #8
Там что-то похожее, но я windows form никогда не пользовался.
0
TyLinka
32 / 32 / 11
Регистрация: 02.02.2012
Сообщений: 177
28.10.2013, 17:58  [ТС] #9
ясно, спасибо
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
28.10.2013, 17:58
Привет! Вот еще темы с ответами:

Перестановка в каждой строке матрицы максимального элемента и элемента главной диагонали - C++
Сформировать из двухмерного массива другой, поменяв местами (построчно) максимальные элементы и элементы главной диагонали.

Вектор из элементов равных умножения max элемента и min элемента в строке - C++
Из массива mn создать вектор из элементов равные умножению max элемента и min элемента в строке.

Вставить два элемента после мах элемента и перед ним - C++
Составить программу решения задачи на С++, использовать процедуры введения и вывода массивов, выделить в задаче вспомогательные алгоритмы и...

Формирования массивов Y и Z, определения максимального по модулю элемента, удаления элемента - C++
Из массива Х(N) все положительные элементы записать в массив Y(k), а все отрицательные элементы – в массив Z(m). Найти в каждом массиве...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
9
Yandex
Объявления
28.10.2013, 17:58
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru