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

Веведение текста непосредственно на экран - C++

Восстановить пароль Регистрация
 
ohinem
0 / 0 / 0
Регистрация: 01.07.2012
Сообщений: 3
01.07.2012, 20:33     Веведение текста непосредственно на экран #1
Доброго времени суток всем, кто посетил эту тему.

Я новичёк в программировании на c++. Заинтересовала такая вещь:
Как вывести текст непосредственно на экран, а не в консоль.

Т.е. вывел текст он постоял 5 секунд и исчез.

Мои размышления:

Создать окно как в WipApp и фон сделать прозрачным. И после в этом же окне написать текст.
Я не требую верного или вообще кода(я просто не вправе требовать). Я хочу понять, как это красиво осуществить.
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
01.07.2012, 20:33     Веведение текста непосредственно на экран
Посмотрите здесь:

C++ Вывод текста с файла на экран
Считывание текста из файла и вывод на экран в С++ C++
Выдать на экран второе предложение из текста. C++
C++ Считывание текста из файла и вывод на экран
Вывод текста на экран C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Rabbit13245
28 / 28 / 2
Регистрация: 21.04.2012
Сообщений: 282
01.07.2012, 20:46     Веведение текста непосредственно на экран #2
ну есть вариант вывести текст через WM_PAINT. не подходит?
Catstail
Модератор
 Аватар для Catstail
21494 / 10247 / 1669
Регистрация: 12.02.2012
Сообщений: 17,135
01.07.2012, 21:30     Веведение текста непосредственно на экран #3
Чтобы он потом исчез, это вопрос... Но вывести непосредственно на экран можно без создания окна. Для этого нужно воспользоваться API GDI. У каждого графического устройства (в т.ч. и у desktop-а) есть т.н. DeviceContext. Его можно получить специальным вызовом. А потом рисуй по нему (или пиши), что хочешь.
ohinem
0 / 0 / 0
Регистрация: 01.07.2012
Сообщений: 3
02.07.2012, 00:58  [ТС]     Веведение текста непосредственно на экран #4
Цитата Сообщение от Catstail Посмотреть сообщение
Чтобы он потом исчез, это вопрос... Но вывести непосредственно на экран можно без создания окна. Для этого нужно воспользоваться API GDI. У каждого графического устройства (в т.ч. и у desktop-а) есть т.н. DeviceContext. Его можно получить специальным вызовом. А потом рисуй по нему (или пиши), что хочешь.
Это всё конечно интересно и как я понимаю это более оптимальный вариант.
Сейчас начну литературу по "API GDI" начинать искать, всё на English - прийдётся разбираться с переводчиком.
А это подойдёт к любой ОС или под каждую нужно отдельный код писать? Просто я на ubuntu сижу, такие вот дела...
-=ЮрА=-
Заблокирован
Автор FAQ
02.07.2012, 09:47     Веведение текста непосредственно на экран #5
Сообщение было отмечено автором темы, экспертом или модератором как ответ
ohinem, для NT платформы всё делается очень просто (см код ниже)
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
#include <windows.h>
 
char sLine1[] = 
"Доброго времени суток всем, кто посетил эту тему.";
char sLine2[] = 
"Я новичёк в программировании на c++. Заинтересовала такая вещь:";
char sLine3[] = 
"Как вывести текст непосредственно на экран, а не в консоль.";
char sLine4[] = 
"Т.е. вывел текст он постоял 5 секунд и исчез.";
 
int main()
{
    HDC hDC = GetDC(NULL);
    RECT pRECT = {0};
    pRECT.left = 5;
    pRECT.top  = 5;
    pRECT.right = 400;
    pRECT.bottom= 300;
    SetTextColor(hDC,RGB(255,0,0));//Красный цвет шрифта
    DrawText(hDC,sLine1,strlen(sLine1),&pRECT,DT_SINGLELINE );
    pRECT.top  = 20;
    DrawText(hDC,sLine2,strlen(sLine2),&pRECT,DT_SINGLELINE );
    pRECT.top  = 35;
    DrawText(hDC,sLine3,strlen(sLine3),&pRECT,DT_SINGLELINE );
    pRECT.top  = 50;
    DrawText(hDC,sLine4,strlen(sLine4),&pRECT,DT_SINGLELINE );
    Sleep(5000);//Ждём 5 сек до закрытия программы
    return 0;
}
Миниатюры
Веведение текста непосредственно на экран  
Catstail
Модератор
 Аватар для Catstail
21494 / 10247 / 1669
Регистрация: 12.02.2012
Сообщений: 17,135
02.07.2012, 11:08     Веведение текста непосредственно на экран #6
О чем я и говорил...
-=ЮрА=-
Заблокирован
Автор FAQ
02.07.2012, 12:44     Веведение текста непосредственно на экран #7
Цитата Сообщение от Catstail Посмотреть сообщение
О чем я и говорил...
- проясню для всех что имелось ввиду
Цитата Сообщение от Catstail Посмотреть сообщение
У каждого графического устройства (в т.ч. и у desktop-а) есть т.н. DeviceContext.
- вот его и получаем посредством
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
HDC hDC = GetDC(NULL);
Ну а дальше по коду всё просто до безобразия...
ohinem
0 / 0 / 0
Регистрация: 01.07.2012
Сообщений: 3
02.07.2012, 18:07  [ТС]     Веведение текста непосредственно на экран #8
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
- проясню для всех что имелось ввиду
- вот его и получаем посредством

Ну а дальше по коду всё просто до безобразия...
Прости, как я понимаю для линукс мы будем использовать другие инклуды и другие команды, но принцип тот-же остаётся?
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
02.07.2012, 18:53     Веведение текста непосредственно на экран
Еще ссылки по теме:

C++ Ошибка вывода текста на экран
C++ Вывод текста на экран порциями
Функция удаления текста в скобках [2], непосредственно функция + 12кб вложений C++

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

Или воспользуйтесь поиском по форуму:
Kastaneda
Модератор
Эксперт С++
 Аватар для Kastaneda
4236 / 2769 / 218
Регистрация: 12.12.2009
Сообщений: 7,104
Записей в блоге: 1
Завершенные тесты: 1
02.07.2012, 18:53     Веведение текста непосредственно на экран #9
не уверен, что это именно то, что нужно, но попробовать стоит http://linux.die.net/man/3/xdrawstring16 и http://linux.die.net/man/3/xdrawtext

Добавлено через 37 минут
Вот нагуглил.
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
#include <iostream>
#include <cstdlib>
#include <cstdio>
#include <X11/Xlib.h>
// Compile: g++ prog.c -o my -lX11
 
// cc prog.c -o prog -L/usr/X11/lib -lX11
// or perhaps this (for a system with release 6 of X11):
 
//cc prog.c -o prog -L/usr/X11R6/lib -lX11
 
// On SunOs 4 systems, the X libraries are placed in /usr/openwin/lib:
// cc prog.c -o prog -L/usr/openwin/lib -lX11
 
int main()
{
    /* this variable will contain the pointer to the Display structure */
    /* returned when opening a connection.                             */
 
 
    Display* display;
 
    /* open the connection to the display "simey:0". */
    display = XOpenDisplay(0);
    if (display == NULL)
    {
        fprintf(stderr, "Cannot connect to X server %s\n", "simey:0"); // "simey:0" это дисплей автора, можно писать просто localhost:1
        exit (-1);
    }
 
   XGrabServer(display);
 
   int screen_num = DefaultScreen(display);
   Screen *screen = XScreenOfDisplay(display, screen_num);
   Window root_win = RootWindow(display, XScreenNumberOfScreen(screen));
 
   /* Create a GC (Graphics Context) for the line  */
   XGCValues gc_val;
   gc_val.function           = GXxor;
   gc_val.plane_mask         = AllPlanes;
   gc_val.foreground         = WhitePixel(display, screen_num);
   gc_val.background         = BlackPixel(display, screen_num);
   gc_val.line_width         = 4;
   gc_val.line_style         = LineSolid;
   gc_val.cap_style          = CapButt;
   gc_val.join_style         = JoinMiter;
   gc_val.fill_style         = FillOpaqueStippled;
   gc_val.fill_rule          = WindingRule;
   gc_val.graphics_exposures = False;
   gc_val.clip_x_origin      = 0;
   gc_val.clip_y_origin      = 0;
   gc_val.clip_mask          = None;
   gc_val.subwindow_mode     = IncludeInferiors;
 
   GC  gc_line = XCreateGC(display, root_win, GCFunction | GCPlaneMask |  GCForeground | GCBackground | GCLineWidth | GCLineStyle |
                 GCCapStyle  | GCJoinStyle  |  GCFillStyle  |  GCFillRule  |  GCGraphicsExposures |
                 GCClipXOrigin |  GCClipYOrigin  |  GCClipMask  | GCSubwindowMode, &gc_val);
 
   XDrawString(display, root_win, gc_line, 100, 100, "Hello World!", 11);
   XFlush(display);
   XUngrabServer(display);
   XCloseDisplay( display );
   
   return 0;
}
правда у меня выводит маленьким еле заметным шрифтом. Думаю нужно еще научится шрифт менять, чтоб видно было.
Yandex
Объявления
02.07.2012, 18:53     Веведение текста непосредственно на экран
Ответ Создать тему
Опции темы

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