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

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

03.07.2012, 14:42. Просмотров 582. Ответов 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
Я подобрал для вас темы с готовыми решениями и ответами на вопрос win32api странности при выводе на экран (C++):

Ошибка при выводе на экран
#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...

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

Странности при вводе из файла
Программа должна получать данные из файла.... Примечательно, что она их...

Ошибка в выводе сообщения на экран
Как вывести на экран сообщение в виде слова, а не цифры? #include <iostream>...


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

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

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