Форум программистов, компьютерный форум, киберфорум
Visual Basic
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.62/13: Рейтинг темы: голосов - 13, средняя оценка - 4.62
 Аватар для Bati4eli
617 / 17 / 8
Регистрация: 05.05.2012
Сообщений: 221
Записей в блоге: 11

Рисование вне формы в любом месте экрана

20.01.2014, 12:55. Показов 2762. Ответов 12

Студворк — интернет-сервис помощи студентам
Всем привет!
Подскажите, пожалуйста, как оперативно в любой части экрана отрисовать определенную несложную фигуру.
Конкретно хочу сделать программу которая каждые X миллисекунд будет отрисовывать посередине экрана прицел. Такого рода софт требуется игроманам, когда стандартные прицелы в игре разъезжаются или попросту плохо видны на объектах того же цвета что и сам прицел.

В интернете находил конечно подобный софт.. но они обновляли прицел на экране на столько медленно, что даже на рабочем столе их не было толком видно, уж не говорю про то что в игре .. там его и вовсе становиться не видно.

P.S.: Ввел в поисковике форума слово "графика" и "рисование".. вылезало всё что угодно кроме нужного =(
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
20.01.2014, 12:55
Ответы с готовыми решениями:

Проверка касания экрана в любом месте
Здравствуйте! Вопрос такой, как можно реализовать проверку условия касания экрана? Т.е., например, если есть касание экрана (в любом...

PopupMenu в TrayIcon не пропадает по щелчу в любом месте экрана
Есть программа которая свернутая в трей. Когда по значку нажимаю правой клавишей мыши выскакивает окно (Popurmenu), у других программ можно...

Открытие рекламы после щелчка мышки в любом месте экрана
Добрый день! Недавно столкнулся с проблемой: Хром начал показывать рекламу везде, где только можно(соц сети, поисковики и прочие...

12
 Аватар для Антихакер32
1201 / 473 / 46
Регистрация: 06.01.2014
Сообщений: 1,797
Записей в блоге: 19
20.01.2014, 13:42
Цитата Сообщение от Bati4eli Посмотреть сообщение
Ввел в поисковике форума слово "графика" и "рисование".. вылезало всё что угодно кроме нужного =(
попробуй воспользоваться полезным советом

Добавлено через 13 минут
Оссобенно продвинутые операции рассмотри
1
Модератор
10057 / 3902 / 884
Регистрация: 22.02.2013
Сообщений: 5,853
Записей в блоге: 79
20.01.2014, 14:48
Создание Крестика в центре экрана
2
20.01.2014, 14:57

Не по теме:

The trick воспользовался (шутка)

0
 Аватар для Bati4eli
617 / 17 / 8
Регистрация: 05.05.2012
Сообщений: 221
Записей в блоге: 11
20.01.2014, 15:50  [ТС]
The trick, так же можете подсказать Апишные функции для рисования типа Круг, Линия, Квадрат?
0
 Аватар для Pro_grammer
6807 / 2839 / 527
Регистрация: 24.04.2011
Сообщений: 5,308
Записей в блоге: 10
20.01.2014, 15:52
Прицел нужен для игры. Игра наверно 3D. Не думаю, что форма с крестиком тут поможет. Тут надо как минимум DX задействовать.
С форума игроманов:
Кликните здесь для просмотра всего текста
Я делал так:
брал жвачку и две нитки, по диагонали из угла в угл монитора натягивал нитку и прилеплял её жвачкой. ?? так по обоим диагоналям. В итоге:
1) не один античит никогда не спалит.
2) крестик получается точно по центру.
3) без геммороя с разработкой программ.



Добавлено через 1 минуту
Цитата Сообщение от Bati4eli Посмотреть сообщение
Апишные функции для рисования типа Круг, Линия, Квадрат?
Они тоже поверх 3D и 2D игр работать не будут
0
 Аватар для Bati4eli
617 / 17 / 8
Регистрация: 05.05.2012
Сообщений: 221
Записей в блоге: 11
20.01.2014, 16:05  [ТС]
Pro_grammer,
не знаю.. вот навоял тут. Сегодня попробую в одной игрушке, в которую давно играю и там используется коллиматорный прицел с красной точкой и противники выделяются тоже красным (соответственно фиг поймешь прицелился ты или нет).
Я так подумал частота обновления экрана 60 герц, соответственно экран монитора обновляется каждые 16.67 миллисекунд. Исходя из этого я накидал на форму несколько таймеров (работа которых друг на друга не влияет, т.е. создается несколько потоков, если так можно сказать) и каждому присвоил разное время обновления.

По крайней мере я тут пробовал прогу (называлась AIM-прицел), она прорисовывала прицел, но он не часто прорисовывался, из-за чего в игре его почти не видно было.. так раз в секунду мерцнет и всё.
Вложения
Тип файла: zip Прицел.zip (59.2 Кб, 28 просмотров)
1
 Аватар для Pro_grammer
6807 / 2839 / 527
Регистрация: 24.04.2011
Сообщений: 5,308
Записей в блоге: 10
20.01.2014, 16:20
А в почем можно испытать.
Простой код, рисует элипс на экране вслед за мышкой. На форму положить 1 таймер.
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
Private Type POINTAPI
    x As Long
    y As Long
End Type
 
Private Declare Function GetActiveWindow Lib "user32" () As Long
Private Declare Function GetWindowDC Lib "user32" (ByVal hwnd As Long) As Long
Private Declare Function Ellipse Lib "gdi32" (ByVal hdc As Long, ByVal X1 As Long, ByVal Y1 As Long, ByVal X2 As Long, ByVal Y2 As Long) As Long
Private Declare Function GetCursorPos Lib "user32" (lpPoint As POINTAPI) As Long
Private Sub Form_Load()
    Timer1.Interval = 100
    Timer1.Enabled = True
End Sub
Sub Timer1_Timer()
    Dim Position As POINTAPI
    'Позиция курсора
    GetCursorPos Position
    'Рисуем элипс на экране
    Ellipse GetWindowDC(0), Position.x - 5, Position.y - 5, Position.x + 5, Position.y + 5
End Sub
Добавлено через 11 минут
Цитата Сообщение от Bati4eli Посмотреть сообщение
Исходя из этого я накидал на форму несколько таймеров (работа которых друг на друга не влияет, т.е. создается несколько потоков, если так можно сказать) и каждому присвоил разное время обновления.
Запустил Far Cry3. В принципе видно, хоть и противно мигает Использовать можно если прмспичило.
P.S.
А что спрашивал то, если уже сам написал что надо?
1
 Аватар для Bati4eli
617 / 17 / 8
Регистрация: 05.05.2012
Сообщений: 221
Записей в блоге: 11
20.01.2014, 16:57  [ТС]
Цитата Сообщение от Pro_grammer Посмотреть сообщение
А что спрашивал то, если уже сам написал что надо?
Честно даже не знаю что ответить.. просто я на абум слепил из всяких апишек данную рисовалку крестика.
Цитата Сообщение от Pro_grammer Посмотреть сообщение
Declare Function Ellipse Lib "gdi32"
А цвет у него невозможно проставить? =(
0
 Аватар для Pro_grammer
6807 / 2839 / 527
Регистрация: 24.04.2011
Сообщений: 5,308
Записей в блоге: 10
20.01.2014, 18:10
Цитата Сообщение от Bati4eli Посмотреть сообщение
А цвет у него невозможно проставить?
Можно. Надо создать ExtCreatePen
Visual Basic
1
Private Declare Function ExtCreatePen Lib "gdi32" (ByVal dwPenStyle As Long, ByVal dwWidth As Long, lplb As LOGBRUSH, ByVal dwStyleCount As Long, lpStyle As Long) As Long
Добавлено через 2 минуты
Маленький пример, для понимания
Visual Basic
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
Private Type LOGBRUSH
        lbStyle As Long
        lbColor As Long
        lbHatch As Long
    End Type
    Private Declare Function ExtCreatePen Lib "gdi32" (ByVal dwPenStyle As Long, ByVal dwWidth As Long, lplb As LOGBRUSH, ByVal dwStyleCount As Long, lpStyle As Long) As Long
    Private Declare Function SelectObject Lib "gdi32" (ByVal hdc As Long, ByVal hObject As Long) As Long
    Private Declare Function DeleteObject Lib "gdi32" (ByVal hObject As Long) As Long
    Private Const BS_SOLID = 0&
    Private Const PS_COSMETIC = 0&
    Private Const PS_USERSTYLE = 7&
    Private OldPen As Long
 
    Private Sub Form_Load()
    Dim lb As LOGBRUSH, Lengths(4) As Long
    lb.lbColor = 255
    lb.lbStyle = BS_SOLID
    Lengths(1) = 10
    Lengths(2) = 3
    Lengths(3) = 5
    Lengths(4) = 3
    OldPen = SelectObject(hdc, ExtCreatePen(PS_COSMETIC Or PS_USERSTYLE, 1, lb, 4, Lengths(1)))
    End Sub
 
    Private Sub Form_Unload(Cancel As Integer)
    DeleteObject SelectObject(hdc, OldPen)
    End Sub
 
    Private Sub Form_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)
    Line (0, 0)-(X, Y)
    End Sub
0
Модератор
10057 / 3902 / 884
Регистрация: 22.02.2013
Сообщений: 5,853
Записей в блоге: 79
20.01.2014, 20:37
Цитата Сообщение от Pro_grammer Посмотреть сообщение
Прицел нужен для игры. Игра наверно 3D. Не думаю, что форма с крестиком тут поможет. Они тоже поверх 3D и 2D игр работать не будут
Для неполноэкранных игр, мой способ подходит по всем параметрам. Вопрос не стоял в том чтобы отрисовывать в полноэкранных приложениях. Такие вещи можно сделать если внедриться в процесс и перехватить вызов окончания отрисовки (такая техника используется во Fraps, при отрисовке кадров).
Bati4eli, Pro_grammer, каждому вызову GetDC, GetWindowDC должен быть соответствующий вызов ReleaseDC.
Bati4eli, нет смысла ставить таймер на 4 мс, интервал не может быть меньше разрешения системного таймера (GetSystemTimeAdjustment), к тому же очередной отсчет начинаеться после выхода из процедуры таймера. И вообще твой подход неверный. Если хочешь сделать нормально, то внедряйся в процесс, и перехватывай вызов, тогда и мерцать ничего не будет и будет все отрисовываться точно поверх. Читай Рихтера, там все описано.
Если же делать через отрисовку прямо на экране, то хотя бы сохранять изображение под курсором, дабы не плодить кучу грязи на экране (хотя какой в этом смысл, если есть слоеные окна???)
Цитата Сообщение от Bati4eli Посмотреть сообщение
The trick, так же можете подсказать Апишные функции для рисования типа Круг, Линия, Квадрат?
В моем примере можно стандартными Circle и Line рисовать, и выбирать цвет. Также цвет можно задать через SetDCPenColor, предварительно выбрав одно из стандартных перьев (GetStockObject), тогда и создавать ничего не надо.
1
 Аватар для Bati4eli
617 / 17 / 8
Регистрация: 05.05.2012
Сообщений: 221
Записей в блоге: 11
21.01.2014, 19:11  [ТС]
The trick, можете подкинуть ссылку или простой пример привести внедрения процесс?
0
Модератор
10057 / 3902 / 884
Регистрация: 22.02.2013
Сообщений: 5,853
Записей в блоге: 79
21.01.2014, 19:15
Лучший ответ Сообщение было отмечено The trick как решение

Решение

Дж. Рихтер "Windows для профессионалов" Глава 22 Внедрение DLL и перехват API-вызовов
2
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
21.01.2014, 19:15
Помогаю со студенческими работами здесь

как получить анализ клика в любом месте формы
стандартными средствами получается, только если клип выпадает на саму форму, а если на любой элемент - он уже не считается событием самой...

Как разместить главное меню (MainMenu) в любом месте формы
Не могу разобраться с проблемой: на форме присутствует панель со свойством Align = alTop (она заменяет стандартный заголовок окна) ...

Рисование вне формы
Здравствуйте. Подскажите пожалуйста, возможно ли рисовать вне формы, если да, то как? (делаю что-то типа выпадающего списка)

Рисование вне формы
Как нарисовать, допустим, эллипс вне формы?Или чтобы формы не было видно. Да и так чтобы он был поверх всех окон.

Рисование вне клиентской области формы
Всем здравствуйте. Рисую светодиодный индикатор: int l,t,d; l = 100; t = 0; d = 15; ...


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

Или воспользуйтесь поиском по форуму:
13
Ответ Создать тему
Новые блоги и статьи
Переходник USB-CAN-GPIO
Eddy_Em 20.03.2026
Достаточно давно на работе возникла необходимость в переходнике CAN-USB с гальваноразвязкой, оный и был разработан. Однако, все меня терзала совесть, что аж 48-ногий МК используется так тупо: просто. . .
Оттенки серого
Argus19 18.03.2026
Оттенки серого Нашёл в интернете 3 прекрасных модуля: Модуль класса открытия диалога открытия/ сохранения файла на Win32 API; Модуль класса быстрого перекодирования цветного изображения в оттенки. . .
SDL3 для Desktop (MinGW): Рисуем цветные прямоугольники с помощью рисовальщика SDL3 на Си и C++
8Observer8 17.03.2026
Содержание блога Финальные проекты на Си и на C++: finish-rectangles-sdl3-c. zip finish-rectangles-sdl3-cpp. zip
Символические и жёсткие ссылки в Linux.
algri14 15.03.2026
Существует два типа ссылок — символические и жёсткие. Ссылка в Linux — это запись в каталоге, которая может указывать либо на inode «файла-ИСТОЧНИКА», тогда это будет «жёсткая ссылка» (hard link),. . .
[Owen Logic] Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора
ФедосеевПавел 14.03.2026
Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора ВВЕДЕНИЕ Выполняя задание на управление насосной группой заполнения резервуара,. . .
делаю науч статью по влиянию грибов на сукцессию
anaschu 13.03.2026
прикрепляю статью
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru