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

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

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 9, средняя оценка - 4.78
Jeka777
 Аватар для Jeka777
0 / 0 / 0
Регистрация: 05.01.2013
Сообщений: 13
#1

Вывод трёхмерной графики без окна - C++

16.02.2013, 21:24. Просмотров 1112. Ответов 12
Метки нет (Все метки)

Осваивая OpenGL столкнулся с потребностью вывода изображения напрямую на экран, без использования видимого окна. Долго искал в интернете информацию, но ничего особенно вразумительного не нашёл. Те варианты которые есть, настолько тормознутые, что даже учитывая небольшие размеры выводимого изображения, довольно сильно загружают ЦП.
Мне, фактически не важно, как выводить, поверх значков или за ними. Главное - обеспечить передвижение изображения, размером порядка 300х300 пикселей, по всему экрану. А также исключить случайные манипуляции пользователя с окном.
Прошу не более, чем подсказать возможные пути для полноценного решения, при котором программа сможет без помех функционировать, не мешая при этом стабильной работе. Хоть с невидимым окном, хоть с выводом за его пределы (в возможности чего я глубоко сомневаюсь).
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
zss
Модератор
Эксперт С++
 Аватар для zss
6115 / 5718 / 1849
Регистрация: 18.12.2011
Сообщений: 14,608
Завершенные тесты: 1
16.02.2013, 22:32     Вывод трёхмерной графики без окна #2
Для windows приложения через функцию CreateDC(DISPLAY,NULL,NULL,NULL) можно получить контекст экрана и рисовать, соответственно, прямо на экран.
Кроме того, OpenGL тоже имеет режим вывода на весь экран.
Kuzia domovenok
 Аватар для Kuzia domovenok
1886 / 1741 / 117
Регистрация: 25.03.2012
Сообщений: 5,916
Записей в блоге: 1
16.02.2013, 22:56     Вывод трёхмерной графики без окна #3
не понял, тебе на рабочем столе рисовать нужно или просто полноэкранное приложение пишешь?
Полноэкранное приложение демонстрируется, например в уроках от NeHe начиная с первого урока.
Jeka777
 Аватар для Jeka777
0 / 0 / 0
Регистрация: 05.01.2013
Сообщений: 13
17.02.2013, 09:09  [ТС]     Вывод трёхмерной графики без окна #4
Да в том-то и дело, мне нужно чтоб вывод происходил в невидимом окне или, как я уже сказал за его пределами. То есть, изображение выдаётся в определённую область экрана без элементов окна и при этом позволяет одновременно с этим продолжать работать с другими приложениями. Ну я помню ещё в 2000-х годах такие приколы по компьютерам ходили. Где какой-нибудь персонаж в углу экрана торчал.
zss
Модератор
Эксперт С++
 Аватар для zss
6115 / 5718 / 1849
Регистрация: 18.12.2011
Сообщений: 14,608
Завершенные тесты: 1
17.02.2013, 11:38     Вывод трёхмерной графики без окна #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
#include <windows.h>
#include "resource.h"
int x=0,dx=10;
const int R=20;
int WINAPI fn(HWND hwnd,int cmd,WPARAM wp,LPARAM lp)
{
    switch(cmd)
    {
 
    case WM_INITDIALOG:
        ShowWindow(hwnd,SW_MINIMIZE);// сворачиваем окно
        SetTimer(hwnd,1,25,NULL);// запускаем таймер
        return 1;
    case WM_TIMER:
        {
            HDC hdcscr=CreateDC("DISPLAY",NULL,NULL,NULL);// контекст экрана
            int w=GetDeviceCaps(hdcscr,HORZRES);// ширина экрана
            int h=GetDeviceCaps(hdcscr,VERTRES);// высота экрана
            x+=dx;// пересчитываем координаты движущегося объекта
            if(x>=w/2+100){x=w/2+100;dx=-abs(dx);}
            if(x<=w/2-100){x=w/2-100;dx=abs(dx);}
            Ellipse(hdcscr,x-R,h/2-R,x+R,h/2+R);// рисуем 
            DeleteDC(hdcscr);// удаляем контекст
            return 1;
        }
    case WM_CLOSE:
        EndDialog(hwnd,3);// закрытие приложения, можно alt+F4
        return 1;
    case WM_COMMAND:
        return 0;// обрабатываемых кнопок и меню нет
    case WM_PAINT:
        {
            PAINTSTRUCT ps;
            BeginPaint(hwnd, &ps);// в окне ничего не рисуем
            EndPaint(hwnd, &ps);
            return 1;
        }
    }
    return 0;
}
int WINAPI WinMain(HINSTANCE hi,HINSTANCE,LPSTR,int) 
{
    return DialogBox(hi,"SIMPLE",NULL,(DLGPROC)fn); // открыть диалоговое окно, образец которого называется "SIMPLE"
}
Tiva
94 / 94 / 1
Регистрация: 25.04.2012
Сообщений: 429
17.02.2013, 13:09     Вывод трёхмерной графики без окна #6
насколько я понял топикстартеру нужно что-то вроде заставок из вин2к\хп, где шарики прыгают по верх рабочего стола, или фигуры летают?
Jeka777
 Аватар для Jeka777
0 / 0 / 0
Регистрация: 05.01.2013
Сообщений: 13
17.02.2013, 13:32  [ТС]     Вывод трёхмерной графики без окна #7
Фактически - да, но чтоб вместе с этим оставалась возможность взаимодействовать с другими программами.
Предыдущий пример, кстати, не работает, ибо я не использую Майкрософт Визуал.
zss
Модератор
Эксперт С++
 Аватар для zss
6115 / 5718 / 1849
Регистрация: 18.12.2011
Сообщений: 14,608
Завершенные тесты: 1
17.02.2013, 13:37     Вывод трёхмерной графики без окна #8
Цитата Сообщение от Jeka777 Посмотреть сообщение
я не использую Майкрософт Визуал
А как же Вы осваиваете OpenGL без MS Visual?
Jeka777
 Аватар для Jeka777
0 / 0 / 0
Регистрация: 05.01.2013
Сообщений: 13
17.02.2013, 13:41  [ТС]     Вывод трёхмерной графики без окна #9
Ну вот так и осваиваю. Пока не пишу ничего крупного, поэтому достаточно даже Dev C++. И это меня сейчас вполне устраивает.
Jeka777
 Аватар для Jeka777
0 / 0 / 0
Регистрация: 05.01.2013
Сообщений: 13
18.02.2013, 14:06  [ТС]     Вывод трёхмерной графики без окна #10
Извиняюсь за то, что поднимаю тему. Но ответа я так и не нашёл. Может кто-нибудь всё же поможет?
Kuzia domovenok
 Аватар для Kuzia domovenok
1886 / 1741 / 117
Регистрация: 25.03.2012
Сообщений: 5,916
Записей в блоге: 1
18.02.2013, 21:48     Вывод трёхмерной графики без окна #11
http://pmg.org.ru/nehe/nehe01.htm
http://nehe.gamedev.net/tutorial/cre...(win32)/13001/
Jeka777
 Аватар для Jeka777
0 / 0 / 0
Регистрация: 05.01.2013
Сообщений: 13
18.02.2013, 21:52  [ТС]     Вывод трёхмерной графики без окна #12
Один вопрос, что вы хотите этим сказать? Лично я все уроки от НеХе уже закончил.
Да, в заголовке темы я объяснил кривовато, но походу объяснения вроде бы всё уже пояснил. Мне надо чтоб изображение двигалось поверх экрана с открытыми приложениями, аки, если не ошибаюсь, по принципу оверлея в ДиркетИксе.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
04.04.2013, 11:31     Вывод трёхмерной графики без окна
Еще ссылки по теме:

C++ Программирование движка для трёхмерной игры
C++ Вывод числа в столбик с первой цифры, без массива, без строк
C++ Как запустить .bat файл без отображения консольного окна
C++ Вызвать функцию из внешнего (своего) процесса без окна
C++ Вывод логотипа вместо стандартного окна

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

Или воспользуйтесь поиском по форуму:
ЛезгиноХохол
0 / 0 / 0
Регистрация: 04.04.2013
Сообщений: 8
04.04.2013, 11:31     Вывод трёхмерной графики без окна #13
Извиняюсь за поднятие старой темы, Но присоединяюсь к топикстартеру.
Нужна программа создающая графический объект без стандартного окна Windows.
В качестве примера - программа Ruler из демопримеров для Java.

http://hg.openjdk.java.net/jdk7/jdk7...ler/Ruler.java

ZSS Я сейчас пытаюсь запустить ваш код на microsoft visual studio 2008. Ругается на resource.h. Погуглил, скачал 2 версии. Не подходят (выходит ошибка линкера) Не посоветуете среду или линк где скачать?

Ну и, не сочтите за наглость, есть ли аналогичные функции для X Windows
Yandex
Объявления
04.04.2013, 11:31     Вывод трёхмерной графики без окна
Ответ Создать тему
Опции темы

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