Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.60/5: Рейтинг темы: голосов - 5, средняя оценка - 4.60
34 / 34 / 21
Регистрация: 02.02.2012
Сообщений: 181
1

Перемещение элемента

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

Подскажите, пожалуйста, с помощью каких функций можно задать перемещение (по кругу например) нарисованного элемента в picturebox?
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
28.10.2013, 14:05
Ответы с готовыми решениями:

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

Перемещение данных из одного элемента класса в другой (!)
Собственно задание такое: Описать класс, реализующий стек и работу с ним. 1.) Класс должен...

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

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

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

Добавлено через 19 минут
и можно ли ещё как-нибудь затормозить движение объекта, если делать в цикле?
0
Модератор
Эксперт С++
9633 / 8249 / 5032
Регистрация: 18.12.2011
Сообщений: 22,033
28.10.2013, 15:14 4
если picturebox - это окно,
то перемещать его можно функцией MoveWindow(...)
А моменты перемещения отлавливать с помощью сообщения WM_TIMER.
Так делается в Win32 API.
1
34 / 34 / 21
Регистрация: 02.02.2012
Сообщений: 181
28.10.2013, 16:11  [ТС] 5
Цитата Сообщение от zss Посмотреть сообщение
если picturebox - это окно,
то перемещать его можно функцией MoveWindow(...)
А моменты перемещения отлавливать с помощью сообщения WM_TIMER.
Так делается в Win32 API.
надо перемещать не picturebox, а объект в нём, например круг

Добавлено через 10 минут
В принципе, разобралась. Сделала с помощью рисования и стирания в цикле + Sleep(). Пришлось сделать отдельную кнопку для рисования, потому что если делать на кнопку с расчетами, то расчеты выводятся только после окончания рисования.
Может кто скажет ещё что-нибудь дельное по этому поводу?
0
Модератор
Эксперт С++
9633 / 8249 / 5032
Регистрация: 18.12.2011
Сообщений: 22,033
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
34 / 34 / 21
Регистрация: 02.02.2012
Сообщений: 181
28.10.2013, 17:12  [ТС] 7
вообще я делала всё в windows forms c++
этот код подойдет для неё?
0
Модератор
Эксперт С++
9633 / 8249 / 5032
Регистрация: 18.12.2011
Сообщений: 22,033
28.10.2013, 17:28 8
Там что-то похожее, но я windows form никогда не пользовался.
0
34 / 34 / 21
Регистрация: 02.02.2012
Сообщений: 181
28.10.2013, 17:58  [ТС] 9
ясно, спасибо
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
28.10.2013, 17:58

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

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

перемещение элемента
Как правильно сделать перемещение дива по экрану при нажатии кнопки ? Я допер что получая свойство...

Перемещение элемента
Почему строка 20 возвращает NaN в переменной x? <DOCTYPE html> <html> <head> <meta...

перемещение элемента
Добрый день. Не могли бы вы посказать как сделать так чтобы текст что на картинке перешел вниз ...


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

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Опции темы

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