Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.67/3: Рейтинг темы: голосов - 3, средняя оценка - 4.67
Toson
0 / 0 / 1
Регистрация: 28.06.2012
Сообщений: 20
1

win32api странности при выводе на экран

03.07.2012, 14:42. Просмотров 588. Ответов 3
Метки нет (Все метки)

Доброго времени суток. Возникла проблема: при использовании в цикле TextOut на экран выводится только одна первая цифра, считанная из массива matr и переведенная в символ, хотя их должно быть как минимум 49 Собственно вопрос - почему?) И еще вопрос: почему если выводить один символ (например букву "Z"), то он выводится корректно, а если попытаться вывести несколько, то получаются какие-то "квадратики"?
Заранее спасибо!

Код для первого вопроса:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
int end=7;
    int endcycle=7;
    char buffer[2];
    int x=100;
    int y=100;
    int i=0;
while(end!=0)
{
    while(endcycle!=0)
        {
            hdc=BeginPaint(hDlg,&ps);
            itoa(matr[i], buffer, 10);
            TextOut(hdc, x, y, (LPCWSTR)buffer, strlen(buffer));
            EndPaint(hDlg,&ps);
                x=x+20;
            i++;
            endcycle--;
        }
        end--;
        x=0;
        y=y+20;
}
Код для второго вопроса:
C++
1
2
3
4
5
6
7
8
 
char buffer[5];
 
sprintf(buffer, "ZERO");
hdc=BeginPaint(hDlg,&ps);
TextOut(hdc, 240, 150, (LPCWSTR)buffer, strlen(buffer));
EndPaint(hDlg,&ps);
Sleep(666);
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
03.07.2012, 14:42
Ответы с готовыми решениями:

Ошибка при выводе на экран
#include <iostream> using namespace std; int main() { int j =100; while (j...

Теряються поля при выводе на экран
Здравствуйте. Помогите найти ошибку #include <stdio.h> #include <conio.h>...

При выводе на экран появляются лишние символы
#include <iostream> // ??? printf #include <string.h> // ??? strtok bool...

Как сделать, чтобы при выводе на экран были пробелы
#include <iostream> using namespace std; int main() { int sum = 0, val =...

При выводе на экран переменной string выводится набор левых символов
int main() { int s; string b; printf("DEC: "); scanf("%i", &s); for...

3
alexey31415
59 / 59 / 7
Регистрация: 16.05.2010
Сообщений: 632
03.07.2012, 15:35 2
Цитата Сообщение от Toson Посмотреть сообщение
strlen(buffer)
попробуйте добавить -1
0
DU
1486 / 1132 / 164
Регистрация: 05.12.2011
Сообщений: 2,279
03.07.2012, 15:43 3
тут могут быть проблемы из-за путаницы с типами.
буфер чаров. а функция рисования текста - юникодная, т.е. расчитана на работу с широкими символвами.
TextOut(hdc, 240, 150, (LPCWSTR)buffer, strlen(buffer));
то, что жирное - это некорректно. либо буфер должен быть из WCHAR символов,
либо нужно явно задавать правильную функцию
TextOutA - ASCII версия
TextOutW - Unicode вервия
TextOut - это макрос, который в зависимости от настройки проекта разворачивается либо в аськи либо в юникод версию.

без указания всего этого нужно использовать специальные типы и макросы и функции:
TCHAR buffer[32];
TextOut(hdc, 240, 150, buffer, strlen(buffer)); - strlen должно быть тоже макросом, который выглядит как strlen с какими-то префиксами или суфиксами. я не помню как именно она выглядит
1
Toson
0 / 0 / 1
Регистрация: 28.06.2012
Сообщений: 20
03.07.2012, 18:51  [ТС] 4
Цитата Сообщение от DU Посмотреть сообщение
тут могут быть проблемы из-за путаницы с типами.
буфер чаров. а функция рисования текста - юникодная, т.е. расчитана на работу с широкими символвами.
TextOut(hdc, 240, 150, (LPCWSTR)buffer, strlen(buffer));
то, что жирное - это некорректно. либо буфер должен быть из WCHAR символов,
либо нужно явно задавать правильную функцию
TextOutA - ASCII версия
TextOutW - Unicode вервия
TextOut - это макрос, который в зависимости от настройки проекта разворачивается либо в аськи либо в юникод версию.

без указания всего этого нужно использовать специальные типы и макросы и функции:
TCHAR buffer[32];
TextOut(hdc, 240, 150, buffer, strlen(buffer)); - strlen должно быть тоже макросом, который выглядит как strlen с какими-то префиксами или суфиксами. я не помню как именно она выглядит
Со вторым вопросом помогло на TextOutA поменять, спасибо)

Добавлено через 1 час 22 минуты
Хотя и с первой проблемой тоже разобрался, в общем спасибо Огромнейшее)
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
03.07.2012, 18:51

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

"Stack around the variable 'a' was corrupted" при выводе содержимого файла на экран
Доброго времени суток, компиляции программы вылетает такая ошибка Run-Time...

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


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

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

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