Форум программистов, компьютерный форум, киберфорум
Наши страницы

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

Войти
Регистрация
Восстановить пароль
 
Toson
0 / 0 / 0
Регистрация: 28.06.2012
Сообщений: 20
#1

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

03.07.2012, 14:42. Просмотров 561. Ответов 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++):

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

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

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

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

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

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

3
alexey31415
59 / 59 / 3
Регистрация: 16.05.2010
Сообщений: 632
03.07.2012, 15:35 #2
Цитата Сообщение от Toson Посмотреть сообщение
strlen(buffer)
попробуйте добавить -1
0
DU
1483 / 1129 / 45
Регистрация: 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 / 0
Регистрация: 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
03.07.2012, 18:51
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
03.07.2012, 18:51
Привет! Вот еще темы с ответами:

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

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

Странности уровня доступа при наследовании - C++
Всем привет! :) Сегодня ночью меня озадачило странное поведение при наследовании классов. А именно — уровень доступа к унаследованным...

странности при вызове конструкторов копирования с++ - C++
Здравствуйте! Хочу задать вопрос по c++ (visual с++ 2010 express). Имеется вот такой код: class Parent { public: Parent() {} ...


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

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

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