Форум программистов, компьютерный форум, киберфорум
C/C++: WinAPI
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.68/25: Рейтинг темы: голосов - 25, средняя оценка - 4.68
5 / 5 / 5
Регистрация: 16.12.2013
Сообщений: 463

Посимвольный вывод через TextOutA

23.10.2015, 18:03. Показов 5380. Ответов 7
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Добрый день. Вопрос следующий:есть символьный массив, мне нужно циклично через функцию TextOutA посимвольно выводить каждую букву массива.
Например
C++
1
2
3
 char arr[19]="HELLO WORLD";
for(i=0; i<18 ;i++)
TextOutA(hdc, 210,50, arr[i],17);
Компилятор ругается на arr[i]- невозможно преобразовать параметр 4 из "char" в "LPCSTR"
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
23.10.2015, 18:03
Ответы с готовыми решениями:

Посимвольный вывод
Как объединить результаты стандартных GetComputerName, GetCurrentDirectory, GetSystemDirectory и т.д. в одну строку и вывести её...

Посимвольный вывод
Нужна помощь, не знаю как реализовать, при вводе конца строки($) в любой части предложения перестает считывать, т.е считывает только до...

Посимвольный вывод
Не могу понять как организовать посимвольный вывод из файла. Задача стоит такая, есть в файле имя, фамилия и отчество. они разделяются...

7
529 / 432 / 159
Регистрация: 25.11.2014
Сообщений: 1,662
23.10.2015, 18:17
Цитата Сообщение от Вероника99 Посмотреть сообщение
Компилятор ругается на arr[i]- невозможно преобразовать параметр 4 из "char" в "LPCSTR"
Правильно ругается, ему указатель нужен, а ты символ подсовываешь. И почему ты передаешь длину 17? Если тебе надо посимвольно, то почему хочешь вывести 17 символов?
C
1
TextOutA(hdc, 210,50, &arr[i], 1);
Должно сработать, но у себя не пробовал.
И еще, у тебя в цикле позиция вывода не меняется, каждый последующий символ будет рисоваться над предыдущими.
0
Brainsbreaker
 Аватар для Digit@ll
899 / 374 / 54
Регистрация: 01.02.2011
Сообщений: 1,608
23.10.2015, 19:59
Хотел InvalidateRect использовать, но наверно из-за Sleep'а тупит. Пришлось TextOut'ом затирать.
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
{
    BYTE flag = 0, a;
    HDC hDC = GetWindowDC (hWnd);
    RECT rect;
    LPCTSTR arr = "HELLO WORLD ";
 
    GetClientRect (hWnd, &rect);
L1: for (int i=0; i<lstrlen(arr); i++)
    {
        if (flag < (a = lstrlen(arr)))
        {
            TextOut (hDC, 210, 50, arr, i+1);
            Sleep (128);
            flag++;
            continue;
        }
        else
        {
            TextOut (hDC, 298-(i*8), 50, arr, i);
            Sleep (128);
            continue;
        }
    }
    Sleep (500);
    if (flag == a)
    {
        TextOut (hDC, 210, 50, "                         ", 25);
        flag = -1;
        goto L1;
    }
    else
        ReleaseDC (hWnd, hDC);
}
0
5 / 5 / 5
Регистрация: 16.12.2013
Сообщений: 463
23.10.2015, 20:07  [ТС]
Мне нужно, чтобы вдоль точек каждого графика было слово, получилось не совсем то что я хотела. Думала посимвольно выводить каждую букву, но он все превращается в кашу, получилось только вывести целое слово
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
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
#include<windows.h>
#include<math.h>
 
#define pi 3.14
 
LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);
//Процедура рисования линии
BOOL Line(HDC hdc, int x1, int y1, int x2, int y2);
 
wchar_t  szProgName[]=L"Имя программы";
 
int i, xView, yView;
double y;
char Buf[2];
  char Buf2[21]="Слово";
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpszCmdLine, int nCmdShow)
{
HWND hWnd;
MSG lpMsg;
WNDCLASS w;
 
w.lpszClassName=szProgName; 
w.hInstance=hInstance; 
w.lpfnWndProc=WndProc; 
w.hCursor=LoadCursor(NULL, IDC_ARROW); 
w.hIcon=0; 
w.lpszMenuName=0; 
w.hbrBackground=(HBRUSH)GetStockObject(WHITE_BRUSH); 
w.style=CS_HREDRAW|CS_VREDRAW; 
w.cbClsExtra=0;
w.cbWndExtra=0;
 
//Если не удалось зарегистрировать класс окна - выходим
if(!RegisterClass(&w))
return 0;
 
//Создадим окно в памяти, заполнив аргументы CreateWindow
hWnd=CreateWindow(szProgName, 
(LPCWSTR)NULL, 
WS_OVERLAPPEDWINDOW, 
100, 
100, 
500, 
400, 
(HWND)NULL,
(HMENU)NULL, 
(HINSTANCE)hInstance,
(HINSTANCE)NULL);
 
//Выводим окно из памяти на экран
ShowWindow(hWnd, nCmdShow);
//Обновим содержимое окна
UpdateWindow(hWnd);
 
//Цикл обработки сообщений
 
while(GetMessage(&lpMsg, NULL, 0, 0)) { //Получаем сообщение из очереди
TranslateMessage(&lpMsg); //Преобразует сообщения клавиш в символы
DispatchMessage(&lpMsg); //Передаёт сообщение соответствующей функции окна
}
return(lpMsg.wParam); 
}
 
//Функция окна
LRESULT CALLBACK WndProc(HWND hWnd, UINT messg, 
WPARAM wParam, LPARAM lParam)
{
HDC hdc; //создаём контекст устройства
PAINTSTRUCT ps; //создаём экземпляр структуры графического вывода
HPEN hPen = NULL; //создаём перо
//Цикл обработки сообщений
switch(messg)
{
 
case WM_SIZE:
xView=LOWORD(lParam);
yView=HIWORD(lParam);
 
break;
 
 
//сообщение рисования
case WM_PAINT:
hdc = BeginPaint(hWnd, &ps);
SetMapMode(hdc, MM_ISOTROPIC); //логические единицы отображаем, как физические
SetWindowExtEx(hdc, xView*2,yView*2, NULL); //Длина осей
SetViewportExtEx(hdc, xView, -yView, NULL); //Определяем облась вывода
SetViewportOrgEx(hdc, xView/2, yView/2, NULL); //Начало координат
 
//Рисуем оси координат
Line(hdc,0, 5000,0,-5000);//ось У
Line(hdc, -5000,0,5000,0);//ось Х
MoveToEx(hdc, 0,0,NULL); //перемещаемся в начало координат
 
//Создание красного пера
hPen=CreatePen(1,4,RGB(255,25,0));
SelectObject(hdc, hPen);
 
#define ystep 10
#define xstep 0.02
 
 
//синусоида
y = 0;
for(i=-5000; i<5000; i=i++)
{   
 
     double x = (double)i * xstep;
    double sinx = sin((double)x);
     if (sinx > 0)
     {
        MoveToEx(hdc, i, (int)y, NULL);
        y = x*log(sinx);
        y *= ystep;
        LineTo(hdc, i, y);
if(y>400||y<-400)
            TextOutA(hdc, i,y, Buf2,5); //Вывод ЗДЕСЬ
     }
 
//y=180.0*(exp(-i*0.01))*sin(pi*i*(200.0/400.0)/180.0);
}
 
//Делаем перо снова чёрным
hPen=CreatePen(1,1,RGB(0,0,0));
SelectObject(hdc, hPen);
 
//Наносим деления
for(i=-5000; i<5000; i+=100)
{
Line(hdc, i, 3,i,-3);
Line(hdc, -3, i,3,i);
itoa(i*xstep, Buf, 10);
TextOutA(hdc, i-5, -5, Buf , strlen(Buf));
itoa(i/ystep, Buf, 10);
TextOutA(hdc, -5, i, Buf , strlen(Buf)); 
}
 
ValidateRect(hWnd, NULL); //Обновляем экран
EndPaint(hWnd, &ps);
break;
 
//сообщение выхода - разрушение окна
case WM_DESTROY:
DeleteObject(hPen); //не забываем уничтожать перья
PostQuitMessage(0); //Посылаем сообщение выхода с кодом 0 - нормальное завершение
break;
 
default:
return(DefWindowProc(hWnd, messg, wParam, lParam)); //освобождаем очередь приложения от нераспознаных
}
return 0;
}
 
//Функция рисования линии
BOOL Line(HDC hdc, int x1, int y1, int x2, int y2)
{
MoveToEx(hdc, x1, y1, NULL); //сделать текущими координаты x1, y1
return LineTo(hdc, x2, y2); //нарисовать линию
}
0
Brainsbreaker
 Аватар для Digit@ll
899 / 374 / 54
Регистрация: 01.02.2011
Сообщений: 1,608
23.10.2015, 20:12
А при чем здесь график?
0
5 / 5 / 5
Регистрация: 16.12.2013
Сообщений: 463
23.10.2015, 20:15  [ТС]
По заданию нужно вдоль точек каждого графика вывести слово, когда вывожу посимвольно,получается каша
0
567 / 198 / 70
Регистрация: 25.05.2012
Сообщений: 816
23.10.2015, 20:48
Цитата Сообщение от Вероника99 Посмотреть сообщение
По заданию нужно вдоль точек каждого графика вывести слово, когда вывожу посимвольно,получается каша
Все верно, выводите посимвольно, координату Y графика берите без изменения, а на основании координаты X выводите следующую букву слова, если координата X изменилась более, чем ширина буквы. Как выводить букву слова уже подсказали выше.

Не по теме:


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

0
5 / 5 / 5
Регистрация: 16.12.2013
Сообщений: 463
23.10.2015, 21:00  [ТС]
Вот,добавила в тот цикл рисования графика вывод слова. Получается та каша,про которую я говорила.
C++
1
2
3
4
5
6
7
8
9
TextOutA(hdc, i,(int)y, &Buf2[j],1);
            
            if(j==6)
            {
                    j=0;
                //   TextOutA(hdc, i,y+100,Buf3,12);
                 
            }
        j++;
Да,я хочу хорошо освоить программирование,нагружаю себя большим кол-вом заданий, и не всегда все понимаю(
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
23.10.2015, 21:00
Помогаю со студенческими работами здесь

Посимвольный вывод строки
От нечего делать решил покодить на пайтоне. И хотел с помощью time.sleep() вывести строку посимвольно: import time string =...

Посимвольный вывод текста
Необходимо по нажатию на кнопку посимвольно выводить одну строку из файла. Наверно дело в application.ProcessMessages хотя не могу понять...

Посимвольный ввод/ вывод
Всем, доброго времени суток. Прошу помочь с одной программкой, с которой есть проблемы.. Необходимо разработать и отладить процедуру...

Посимвольный вывод строки
Есть массив-строка. Введенная по Enter.Надо его распечатать. ниже проц посимвольной печати в предположении что последн элем массива код...

Посимвольный ввод-вывод
Товарищи помогите пожалуйста. необходимо Разработать и отладить процедуру, выполняющую следующие действия : ввод с экрана последовательно...


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

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Новые блоги и статьи
Модель ЗдрввоСохранения 7: больше работников, больше ресурсов.
anaschu 08.04.2026
работников и заданий может быть сколько угодно, но настроено всё так, что используется пока что только 20% kYBz3eJf3jQ
Дальние перспективы сервера - слоя сети с космологическим дизайном интефейса карты и логики.
Hrethgir 07.04.2026
Дальнейшее ближайшее планирование вывело к размышлениям над дальними перспективами. И вот тут может быть даже будут нужны оценки специалистов, так как в дальних перспективах всё может очень сильно. . .
Горе от ума
kumehtar 07.04.2026
Эта мне ментальная установка, что вот прямо сейчас, мол, мне для полного счастья не хватает (нужное вписать), и когда я этого достигну - тогда и полный кайф. Одна из самых сильных ловушек на пути. . . .
Использование значений реквизитов справочника в документе, с определенными условиями и правами
Maks 07.04.2026
1. Контроль срока действия договора Алгоритм из решения ниже реализован на примере нетипового документа "ЗаявкаНаРаботу", разработанного в конфигурации КА2. Задача: уведомлять пользователя, если. . .
Доступность команды формы по условию
Maks 07.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: сделать доступной кнопку (команда формы "ЗавершитьСписание") при. . .
Уведомление о неверно выбранном значении справочника
Maks 06.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "НарядПутевка", разработанного в конфигурации КА2. Задача: уведомлять пользователя, если в документе выбран неверный склад. . .
Установка Qt Creator для C и C++: ставим среду, CMake и MinGW без фреймворка Qt
8Observer8 05.04.2026
Среду разработки Qt Creator можно установить без фреймворка Qt. Есть отдельный репозиторий для этой среды: https:/ / github. com/ qt-creator/ qt-creator, где можно скачать установщик, на вкладке Releases:. . .
AkelPad-скрипты, структуры, и немного лирики..
testuser2 05.04.2026
Такая программа, как AkelPad существует уже давно, и также давно существуют скрипты под нее. Тем не менее, прога живет, периодически что-то не спеша дополняется, улучшается. Что меня в первую очередь. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru