С Новым годом! Форум программистов, компьютерный форум, киберфорум
C/C++: WinAPI
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.57/7: Рейтинг темы: голосов - 7, средняя оценка - 4.57
 Аватар для Anonymous4722
5 / 3 / 2
Регистрация: 29.11.2012
Сообщений: 545

Как заставить объект "Дерево" двигаться мышкой? Или любой другой объект

04.11.2019, 00:03. Показов 1536. Ответов 5
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Добрый вечер.
Не могу заставить "Дерево" двигаться при помощи мышки. Как это сделать?
Сам код:
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
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
#include "pch.h"
#include <iostream>
#include <Windows.h>
using namespace std;
 
class TreePicture
{
    void line(const HDC& dc, const int x1, const int y1, const int x2, const int y2)
    {
        MoveToEx(dc, x1, y1, 0);
        LineTo(dc, x2, y2);
    }
public:
    void show(const HWND& hwnd, const HDC& dc, const int X, const int Y);
};
 
class House
{
public:
    void show();
};
 
void House::show(){}
 
void TreePicture::show(const HWND& hwnd, const HDC& dc, const int X, const int Y)
{
    HBRUSH brush = CreateSolidBrush(RGB(0, 255, 0));
    SelectObject(dc, brush);
    line(dc, X, Y, X, Y - 150); // 150 высота ствола
 
    // рисую ветки
 
    line(dc, X, Y - 75, X - 50, Y - 75 - 15);
 
    Ellipse(dc, X - 70, Y - 105, X - 40, Y - 105 + 30);
 
    line(dc, X, Y - 95, X - 50, Y - 95 - 15);
    Ellipse(dc, X - 75, Y - 120, X - 45, Y - 120 + 15);
    Ellipse(dc, X - 50, Y - 130, X - 35, Y - 120 + 15);
 
    Ellipse(dc, X - 10, Y - 150, X + 10, Y - 150 + 15);
    // ветки
    line(dc, X, Y - 60, X + 80, Y - 165);
    line(dc, X, Y - 90, X + 30, Y - 135);
    line(dc, X + 25, Y - 95, X + 85, Y - 100);
    line(dc, X + 50, Y - 130, X + 55, Y - 170);
    // листья
    Ellipse(dc, 15 + X + 55, 15 + Y - 170, 15 + X + 75, 15 + Y - 190);
    Ellipse(dc, 15 + X + 34, 15 + Y - 180, 15 + X + 46, 15 + Y - 200);
    Ellipse(dc, 25 + X + (-5), 25 + Y - 120, 25 + X + 7, 25 + Y - 144);
    Ellipse(dc, 15 + X + 55, 15 + Y - 103, 15 + X + 75, 15 + Y - 127);
    Ellipse(dc, 15 + X + 10, 15 + Y - 140, 15 + X + 28, 15 + Y - 158);
 
    DeleteObject(brush);
 
};
 
int main()
{
    HWND hwnd = GetConsoleWindow();
    HDC dc = GetDC(hwnd); 
    RECT window = {}; 
    HBRUSH brush; 
 
    //
 
    brush = CreateHatchBrush(HS_BDIAGONAL, RGB(0, 255, 0)); // 
    SelectObject(dc, brush); //
    RECT WinCoord = {}; //
    GetWindowRect(hwnd, &WinCoord); //
 
    Rectangle(dc, 0, 0, WinCoord.right, WinCoord.bottom); //
    DeleteObject(brush); //
 
    brush = CreateSolidBrush(RGB(0, 0, 255)); //
    SelectObject(dc, brush); //
    Rectangle(dc, 0, 0, WinCoord.right, 170); //
    DeleteObject(brush); //
 
    brush = CreateSolidBrush(RGB(255, 255, 0)); //
    SelectObject(dc, brush); //
    Ellipse(dc, WinCoord.right - 200, 20, WinCoord.right - 300, 120);
    DeleteObject(brush); //
 
    brush = CreateSolidBrush(RGB(30, 46, 234)); //
    SelectObject(dc, brush); //
    Ellipse(dc, 399, 312, 400 + 399, 312 + 140); // озеро
    DeleteObject(brush); //
 
    // рисую дерево
 
            /*РИСУЕМ ДЕРЕВО*/
    TreePicture Tree;
    Tree.show(hwnd, dc, 80, 440);
    /**/
 
 
 
    ReleaseDC(hwnd, dc); //
    cin.get();
}
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
04.11.2019, 00:03
Ответы с готовыми решениями:

Используя таймер заставить двигаться нарисованный прямоугольник или другой объект
Есть простой прямоугольник, нарисованный с помощью gdi и нужно заставить его двигаться, например, вправо с помощью таймера. Также было бы...

Как заставить объект shape двигаться
VB 2008 Пытаюсь создать программку,чтобы при нажатии на 4 кнопки, квадратик двигался в нужных направлениях: 1. Когда присваиваю кнопке...

(A*) Как заставить объект двигаться по точкам?
Есть рассчитанный с помощью A* путь.Внимание вопрос!Как заставить сферу пердолить по этим точкам?

5
 Аватар для Anonymous4722
5 / 3 / 2
Регистрация: 29.11.2012
Сообщений: 545
04.11.2019, 00:08  [ТС]
Вот сам рисунок.
Миниатюры
Как заставить объект "Дерево" двигаться мышкой? Или любой другой объект  
0
 Аватар для Anonymous4722
5 / 3 / 2
Регистрация: 29.11.2012
Сообщений: 545
04.11.2019, 01:29  [ТС]
Вот, сделал))) только работает чуть криво)

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
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
#include "pch.h"
#include <iostream>
#include <Windows.h>
using namespace std;
 
class TreePicture
{
    void line(const HDC& dc, const int x1, const int y1, const int x2, const int y2)
    {
        MoveToEx(dc, x1, y1, 0);
        LineTo(dc, x2, y2);
    }
public:
    void show(const HWND& hwnd, const HDC& dc, const int X, const int Y);
};
 
class House
{
public:
    void show();
};
 
void House::show(){}
 
void TreePicture::show(const HWND& hwnd, const HDC& dc, const int X, const int Y)
{
    HBRUSH brush = CreateSolidBrush(RGB(0, 255, 0));
    SelectObject(dc, brush);
    line(dc, X, Y, X, Y - 150); // 150 высота ствола
 
    // рисую ветки
 
    line(dc, X, Y - 75, X - 50, Y - 75 - 15);
 
    Ellipse(dc, X - 70, Y - 105, X - 40, Y - 105 + 30);
 
    line(dc, X, Y - 95, X - 50, Y - 95 - 15);
    Ellipse(dc, X - 75, Y - 120, X - 45, Y - 120 + 15);
    Ellipse(dc, X - 50, Y - 130, X - 35, Y - 120 + 15);
 
    Ellipse(dc, X - 10, Y - 150, X + 10, Y - 150 + 15);
    // ветки
    line(dc, X, Y - 60, X + 80, Y - 165);
    line(dc, X, Y - 90, X + 30, Y - 135);
    line(dc, X + 25, Y - 95, X + 85, Y - 100);
    line(dc, X + 50, Y - 130, X + 55, Y - 170);
    // листья
    Ellipse(dc, 15 + X + 55, 15 + Y - 170, 15 + X + 75, 15 + Y - 190);
    Ellipse(dc, 15 + X + 34, 15 + Y - 180, 15 + X + 46, 15 + Y - 200);
    Ellipse(dc, 25 + X + (-5), 25 + Y - 120, 25 + X + 7, 25 + Y - 144);
    Ellipse(dc, 15 + X + 55, 15 + Y - 103, 15 + X + 75, 15 + Y - 127);
    Ellipse(dc, 15 + X + 10, 15 + Y - 140, 15 + X + 28, 15 + Y - 158);
 
 
    DeleteObject(brush);
 
};
 
int main()
{
    HWND hwnd = GetConsoleWindow();
    HDC dc = GetDC(hwnd); 
    RECT window = {}; 
    HBRUSH brush; 
 
    RECT rcClient;
    POINT cp;
    POINT cr;
    POINT ptClientIL;
    POINT ptClientLR;
 
 
 
    //
 
    brush = CreateHatchBrush(HS_BDIAGONAL, RGB(0, 255, 0)); // 
    SelectObject(dc, brush); //
    RECT WinCoord = {}; //
    GetWindowRect(hwnd, &WinCoord); //
 
    Rectangle(dc, 0, 0, WinCoord.right, WinCoord.bottom); //
    DeleteObject(brush); //
 
    brush = CreateSolidBrush(RGB(0, 0, 255)); //
    SelectObject(dc, brush); //
    Rectangle(dc, 0, 0, WinCoord.right, 170); //
    DeleteObject(brush); //
 
    brush = CreateSolidBrush(RGB(255, 255, 0)); //
    SelectObject(dc, brush); //
    Ellipse(dc, WinCoord.right - 200, 20, WinCoord.right - 300, 120);
    DeleteObject(brush); //
 
    brush = CreateSolidBrush(RGB(30, 46, 255)); //
    SelectObject(dc, brush); //
    Ellipse(dc, 399, 312, 400 + 399, 312 + 140); // озеро
    DeleteObject(brush); //
 
    // рисую дерево
    
 
    TreePicture Tree;
    Tree.show(hwnd, dc, 80, 440);
    /**/
 
    if (GetSystemMetrics(SM_MOUSEPRESENT));
    {
        printf("Please! Enter any word, number or at least a letter to be able to take control of the mouse!!");
    }
    getchar();
 
    SetCapture(hwnd);
 
    GetClientRect(hwnd, &rcClient);
 
    ptClientIL.x = rcClient.left;
    ptClientIL.y = rcClient.top;
 
    ptClientLR.x = rcClient.right + 1;
    ptClientLR.y = rcClient.bottom + 1;
 
    ClientToScreen(hwnd, &ptClientIL);
    ClientToScreen(hwnd, &ptClientLR);
 
 
    SetRect(&rcClient, ptClientIL.x, ptClientIL.y, ptClientLR.x, ptClientLR.y);
 
    GetCursorPos(&cp);
    MoveToEx(dc, cp.x - rcClient.left, cp.y - rcClient.top, NULL);
 
    while ((cp.x != 0) || (cp.y != 0))
    {
        GetCursorPos(&cp);
        LineTo(dc, cp.x - rcClient.left, cp.y - rcClient.top);
    }
 
    ReleaseDC(hwnd, dc); //
    cin.get();
}
0
6772 / 4565 / 1844
Регистрация: 07.05.2019
Сообщений: 13,726
04.11.2019, 12:29
Цитата Сообщение от Anonymous4722 Посмотреть сообщение
Вот, сделал))) только работает чуть криво)
А что сделал-то, где там у тебя двигается дерево?
И нафига ты вообще рисуешь в консольном окне? Сделай нормальное приложение, оконное.
0
 Аватар для Anonymous4722
5 / 3 / 2
Регистрация: 29.11.2012
Сообщений: 545
04.11.2019, 13:30  [ТС]
Цитата Сообщение от oleg-m1973 Посмотреть сообщение
А что сделал-то, где там у тебя двигается дерево?
Я сделать так, чтобы двигалось дерево не смог, смог только чтобы линию можно было рисовать на этом рисунке.
Цитата Сообщение от oleg-m1973 Посмотреть сообщение
И нафига ты вообще рисуешь в консольном окне?
Да это домашка моя) мы на Си++ просто проходим WinAPI, далее будет уже Си шарп оконный)
0
6772 / 4565 / 1844
Регистрация: 07.05.2019
Сообщений: 13,726
04.11.2019, 13:39
Цитата Сообщение от Anonymous4722 Посмотреть сообщение
Да это домашка моя) мы на Си++ просто проходим WinAPI, далее будет уже Си шарп оконный)
Вот и сделай оконное приложение. Это даже проще, чем рисовать в консоле.
По WM_PAINT нарисуй своё дерево. Потом обработай сообщения мыши - в частности по WM_MOUSEMOVE просто меняешь координаты своего дерева и перерисовываешь окно - RedrawWindow
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
04.11.2019, 13:39
Помогаю со студенческими работами здесь

Как заставить объект двигаться только по вертикали?
Объект сцены RectItem, тащу его мышкой. Как заставить его двигаться только по вертикали? попробовал в MouseMoveEvent написать ...

Как заставить объект двигаться по кривой линии?
Как заставить самолетик двигаться будто бы &quot;волной&quot;? т.е. вверх вниз - вверх вниз Что бы он улетел за край экрана, а через некоторое...

Может кто подсказать как заставить объект двигаться
Хочу что б мой квадрат начал двигаться в низ Не могу найти не какой инфы в инете надеюсь тут помогут) внизу кинул заготовку с уже...

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

Недопустимый неполный тип , или как передать в функцию указатель на объект класса , или просто объект
Други мои , кодеры. Не могу я ни как передать в функцию объект класса , или что еще лучше(для меня , так как учусь работать с указателями)...


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

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Новые блоги и статьи
сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
Модель микоризы: классовый агентный подход 3
anaschu 06.01.2026
aa0a7f55b50dd51c5ec569d2d10c54f6/ O1rJuneU_ls https:/ / vkvideo. ru/ video-115721503_456239114
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ФедосеевПавел 06.01.2026
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR ВВЕДЕНИЕ Введу сокращения: аналоговый ПИД — ПИД регулятор с управляющим выходом в виде числа в диапазоне от 0% до. . .
Модель микоризы: классовый агентный подход 2
anaschu 06.01.2026
репозиторий https:/ / github. com/ shumilovas/ fungi ветка по-частям. коммит Create переделка под биомассу. txt вход sc, но sm считается внутри мицелия. кстати, обьем тоже должен там считаться. . . .
Расчёт токов в цепи постоянного тока
igorrr37 05.01.2026
/ * Дана цепь постоянного тока с сопротивлениями и источниками (напряжения, ЭДС и тока). Найти токи и напряжения во всех элементах. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа и. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru