Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Низкоуровневое программирование > Win Api
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 21.01.2012, 16:34   #1
JoBl
Пользователь
 
Регистрация: 30.11.2011
Сообщений: 11
По умолчанию Проблема с выводом текста на экран

Хочу вывести текст из файла, а выводит какието иероглифы.

Цитата:
LRESULT CALLBACK ChildProc1 (HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
PAINTSTRUCT ps;
HDC hdc;
RECT rt;
TCHAR text[256];
static HANDLE hText;
static DWORD nCharRead;
static int sx, sy;
static DWORD nCharRead;
switch(message)
{

case WM_CREATE:
hText = CreateFile(_T("1.txt"), GENERIC_READ, 0, NULL,
OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
ReadFile(hText, text, sizeof(text), &nCharRead, NULL);
CloseHandle(hText);
break;
case WM_PAINT:
hdc = BeginPaint(hWnd, &ps);

TextOut(hdc, 0, 0, text, _tcslen(text));
EndPaint(hWnd, &ps);
break;
case WM_DESTROY:

PostQuitMessage(0);
break;
default: return DefWindowProc(hWnd, message, wParam, lParam);
}
return 0;
}
JoBl вне форума Ответить с цитированием
Старый 21.01.2012, 17:14   #2
StIX-S
Пользователь
 
Регистрация: 24.06.2011
Сообщений: 69
По умолчанию

А текст в файле, который собираетесь читать, в кодировке UTF16LE ?
StIX-S вне форума Ответить с цитированием
Старый 21.01.2012, 17:39   #3
JoBl
Пользователь
 
Регистрация: 30.11.2011
Сообщений: 11
По умолчанию

в файле три строчки произвольно написаных латинских букв
JoBl вне форума Ответить с цитированием
Старый 21.01.2012, 17:51   #4
StIX-S
Пользователь
 
Регистрация: 24.06.2011
Сообщений: 69
По умолчанию

Судя по всему вы читаете ANSI текст и пытаетесь вывести его как UNICODE.
Чтобы всё нормально работало нужно либо отключить юникод, либо не использовать всё что связано с юникодом. Можно просто сохранить файл в кодировке UTF16LE (UCS-2LE) ни чего не изменяя в коде.

Последний раз редактировалось StIX-S; 21.01.2012 в 17:54.
StIX-S вне форума Ответить с цитированием
Старый 21.01.2012, 18:10   #5
JoBl
Пользователь
 
Регистрация: 30.11.2011
Сообщений: 11
По умолчанию

и как сохранить файл в юникоде??
JoBl вне форума Ответить с цитированием
Старый 21.01.2012, 18:23   #6
StIX-S
Пользователь
 
Регистрация: 24.06.2011
Сообщений: 69
По умолчанию

Программно через WriteFile(). Только нужно правильно указать сколько записывать (в байтах, не в символах). В ручную можно через Notepad++.
StIX-S вне форума Ответить с цитированием
Старый 21.01.2012, 21:51   #7
JoBl
Пользователь
 
Регистрация: 30.11.2011
Сообщений: 11
По умолчанию

Ничего не изменилось
изменил TCHAR text[256] на static TCHAR text[256]
вобще ничего не выводит на экран...
JoBl вне форума Ответить с цитированием
Старый 21.01.2012, 22:26   #8
StIX-S
Пользователь
 
Регистрация: 24.06.2011
Сообщений: 69
По умолчанию

TCHAR text[256] безусловно должен быть статик. только что набросал пример, у меня всё прекрасно работает.
StIX-S вне форума Ответить с цитированием
Старый 21.01.2012, 23:02   #9
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

Код:
LRESULT CALLBACK ChildProc1 (HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
 {
 PAINTSTRUCT ps;
 HDC hdc;
 RECT rt;
 static char text[256];
 static HANDLE hText;
 static DWORD nCharRead;
 static int sx, sy;
 static DWORD nCharRead;
 switch(message)
 {

 case WM_CREATE:
 hText = CreateFile(_T("1.txt"), GENERIC_READ, 0, NULL,
 OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
 ReadFile(hText, text, sizeof(text), &nCharRead, NULL);
 CloseHandle(hText);
 break;
 case WM_PAINT:
 hdc = BeginPaint(hWnd, &ps);

 TextOutA(hdc, 0, 0, text, _tcslen(text)); 
 EndPaint(hWnd, &ps);
 break;
 case WM_DESTROY:

 PostQuitMessage(0);
 break;
 default: return DefWindowProc(hWnd, message, wParam, lParam);
 }
 return 0;
 }
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 24.01.2012, 01:56   #10
JoBl
Пользователь
 
Регистрация: 30.11.2011
Сообщений: 11
По умолчанию

Подскажите. Как сделать так, что бы читало до конца строки, в файле
JoBl вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Проблема с выводом на экран несколько раз подряд fort-_-minor Общие вопросы C/C++ 2 31.07.2010 15:51
проблема с выводом на экран Sined121 Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 0 08.05.2010 16:48
Проблема с выводом на экран NeveX Общие вопросы .NET 3 20.12.2009 13:57
Проблема с чтением и выводом содержимого текстового файла на экран -=PascaL=- Помощь студентам 16 08.08.2009 07:13