Форум программистов, компьютерный форум, киберфорум
Наши страницы
C++: WinAPI
Войти
Регистрация
Восстановить пароль
 
Вадим77
1 / 1 / 0
Регистрация: 21.04.2016
Сообщений: 115
1

Движение окружности

31.07.2017, 20:37. Просмотров 313. Ответов 1
Метки нет (Все метки)

Здравствуйте. Когда использую координаты мышки у меня получается рисование а движение только в верхнем левом углу в квадрате. А как мне сделать так чтобы было движение и как мне убрать квадрат в левом верхнем углу?

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
#include <windows.h>
#include <iostream>
 
int InputInteger(const char * str, int min, int max) {
    int x;
    std::cout << str;
    bool ErrorFlag;
    do {
        std::cin.clear();
        std::cin.ignore(std::cin.rdbuf()->in_avail());
        std::cin >> x;
        ErrorFlag = !std::cin.good() || x< min || x>max;
        if (ErrorFlag) {
            std::cout << "Error. " << str;
        }
    } while (ErrorFlag);
    std::cin.ignore(std::cin.rdbuf()->in_avail());
    return x;
}
 
HWND GetConsoleHwnd(void) {
#define MY_BUFSIZE 1024
    HWND hwndFound;
    char pszNewWindowTitle[MY_BUFSIZE];
    char pszOldWindowTitle[MY_BUFSIZE];
    GetConsoleTitle(LPWSTR(pszOldWindowTitle), MY_BUFSIZE);
    wsprintf(LPWSTR(pszNewWindowTitle), LPCWSTR("%d/%d"),
        GetTickCount(),
        GetCurrentProcessId());
    SetConsoleTitle(LPCWSTR(pszNewWindowTitle));
    Sleep(1);
    hwndFound = FindWindow(NULL, LPCWSTR(pszNewWindowTitle));
    SetConsoleTitle(LPCWSTR(pszOldWindowTitle));
    return(hwndFound);
}
 
int main() {
    RECT o;
    POINT p;
    HWND wh = GetConsoleHwnd();
    /* COORD c = { 50,10 }; */
 
    HWND hWnd = GetConsoleWindow();
    HDC hDC = GetDC(hWnd);
    RECT temp;
    GetClientRect(hWnd, &temp);
    HDC hBufferDC = CreateCompatibleDC(hDC);
    HBITMAP hBufferBmp = CreateBitmap(temp.right, temp.bottom, 1, 32, NULL);
    HBITMAP hBufferBmpOld = (HBITMAP)SelectObject(hBufferDC, hBufferBmp);
    FillRect(hBufferDC, &temp, (HBRUSH)GetStockObject(WHITE_BRUSH));
    std::cout << "Enter color:\n";
    int r, g, b;
    r = InputInteger("Enter R value[0,255]:", 0, 255);
    g = InputInteger("Enter G value[0,255]:", 0, 255);
    b = InputInteger("Enter B value[0,255]:", 0, 255);
    system("cls");
    HBRUSH hBrush = CreateSolidBrush(RGB(r, g, b));
    HPEN hPen = CreatePen(PS_SOLID, 1, RGB(r, g, b));
    HBRUSH hOldBrush = (HBRUSH)SelectObject(hBufferDC, hBrush);
    HPEN hOldPen = (HPEN)SelectObject(hBufferDC, hPen);
    RECT circle = { 0, 0, 100, 100 };
    size_t step_h = 1, step_v = 1;
    while (!GetAsyncKeyState(VK_ESCAPE)) {
 
        GetWindowRect(wh, &o);
        GetCursorPos(&p);
        SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), { 0,0 });
 
        FillRect(hBufferDC, &circle, (HBRUSH)GetStockObject(WHITE_BRUSH));
        /* if (GetAsyncKeyState(VK_LEFT)) {
        circle.left -= step_h;
        circle.right -= step_h;
        }
        if (GetAsyncKeyState(VK_RIGHT)) {
        circle.left += step_h;
        circle.right += step_h;
        }
        if (GetAsyncKeyState(VK_DOWN)) {
        circle.top += step_v;
        circle.bottom += step_v;
        }
        if (GetAsyncKeyState(VK_UP)) {
        circle.top -= step_v;
        circle.bottom -= step_v;
        }  */
 
        Ellipse(hBufferDC, p.x, p.y, p.x + 50, p.y + 50); 
        /* Ellipse(hBufferDC, circle.left, circle.top, circle.right, circle.bottom); */
        BitBlt(hDC, 0, 0, temp.right, temp.bottom, hBufferDC, 0, 0, SRCCOPY);
        /* std::cout << circle.left << ":" << circle.top << ":" << circle.right << ":" << circle.bottom << std::endl; */
        std::cout << p.x << ":" << p.y << ":" << p.x + 50 << ":" << p.y + 50 << std::endl;
        Sleep(10);
    }
    SelectObject(hBufferDC, hOldBrush);
    SelectObject(hBufferDC, hOldPen);
    SelectObject(hBufferDC, hBufferBmpOld);
    DeleteObject(hBrush);
    DeleteObject(hPen);
    DeleteObject(hBufferBmp);
    DeleteDC(hBufferDC);
    ReleaseDC(hWnd, hDC);
    return 0;
}
0
Миниатюры
Движение окружности  
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
31.07.2017, 20:37
Ответы с готовыми решениями:

Движение фигуры по окружности. C++
Здравствуйте, помогите пожалуйста усовершенствовать/подсказать/исправить код...

Сформировать меню: 1) свободное движение объекта 2)движение с клавиатуры
Сформировать на экране меню, состоящее из следующих пунктов: 1. Движение вдоль...

Движение планеты в системе двойной звезды или движение трех тел
программа должна выводить координаты движения звезд и планеты в файл (рисую в...

с++ игры на движение
у кого есть простенький код с++ для игры про монстров? главного монстра должно...

Движение треугольника
Привет, друзья! Как можно сделать движение треугольника созданного с помощью...

1
Вадим77
1 / 1 / 0
Регистрация: 21.04.2016
Сообщений: 115
01.08.2017, 11:50  [ТС] 2
Что, вообще никто не знает?
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
01.08.2017, 11:50

Движение прямоугольника
Доброе время суток всем!!! Ребята, подскажите в чем загвоздка???:wall: Color...

Движение эллипса
Не могу придумать логику передвижения окружности. При приближении курсора к...

Движение прямоугольника
Привет, друзья! Извините, не могли бы вы мне помочь, нужно сделать движение...


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

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

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