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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 23.11.2012, 22:45   #1
Tahoma
DI HALT RET
Форумчанин
 
Аватар для Tahoma
 
Регистрация: 30.12.2010
Сообщений: 117
По умолчанию [вопрос] Не unicode RichEdit

Добрый день.
Создаю программку с ричем:
Код:
	hdllRE = LoadLibrary("RichEd20.dll");
	hRE = CreateWindowEx(NULL, "RichEdit20A", NULL, WS_VISIBLE | ES_MULTILINE | WS_CHILD | WS_VSCROLL, 0, 0, rect.right-rect.left, rect.bottom-rect.top, hWnd, NULL, hInst, NULL);
	SendMessage(hRE, EM_SETBKGNDCOLOR, NULL, RGB(205,205,205)); // Устанавливаем цвет фона
	 
	ZeroMemory(&cf, sizeof(cf));
	cf.cbSize = sizeof(cf);
	cf.bCharSet = ANSI_CHARSET;
	cf.dwMask = CFM_COLOR | CFM_CHARSET | CFM_FACE | CFM_SIZE | CFM_WEIGHT;
	cf.crTextColor = RGB(0,0,0);
	cf.wWeight = 14;
	cf.yHeight = 190;
	strcpy(cf.szFaceName, "courier");
	SendMessage(hRE, EM_SETCHARFORMAT, SCF_ALL, (LPARAM)&cf);
Пытаюсь взять текст:
Код:
	GETTEXTEX gt;
	GETTEXTLENGTHEX geth;

	gt.flags = GT_DEFAULT;
	gt.codepage = CP_ACP ;
	gt.lpDefaultChar = NULL;
	gt.lpUsedDefChar = NULL;
	geth.flags = GTL_NUMCHARS;

	LRESULT size = SendMessage(hRE, EM_GETTEXTLENGTHEX, (WPARAM)&geth, NULL);
	char* buf = new char[size+512];
	size = SendMessage(hRE, EM_GETTEXTEX, (WPARAM)&gt,  (LPARAM)buf);
Возвращает size = 0, но если codepage выставить в 1200, то возвращает нормально, но в юникоде. А мне этого не нужно. Можно конечно UtoA сделать, но наверное есть другой выход, чтобы не засорять код. Что делаю не правильно?

p.s.: компилирую при "Character Set":"Not set"
p.s.s.: ой, только что заметил, что не в тот раздел написал. Примите искренние извинения и перенесите, пожалуйста, в C++

Последний раз редактировалось Tahoma; 23.11.2012 в 22:57.
Tahoma вне форума Ответить с цитированием
Старый 26.11.2012, 12:19   #2
Tahoma
DI HALT RET
Форумчанин
 
Аватар для Tahoma
 
Регистрация: 30.12.2010
Сообщений: 117
По умолчанию

Нашел выход:
Код:
	LRESULT size = SendMessage(hRE, WM_GETTEXTLENGTH, NULL, NULL);
	char* buf = new char[size+512];
	memset(buf, 0, size+512);
	size = SendMessage(hRE, WM_GETTEXT, size+1, (LPARAM)buf);
Конечно нельзя превысить количество в INT число, но вряд ли когда-нибудь будет столько текста :-) да и форматирование текста тоже не особо надо в моем случае.
Tahoma вне форума Ответить с цитированием
Старый 26.11.2012, 12:27   #3
waleri
Старожил
 
Регистрация: 13.07.2012
Сообщений: 6,331
По умолчанию

Чтото я не вижу, где вы заполняете codepage в geth. Скорее всего, поэтому возвращает 0
waleri вне форума Ответить с цитированием
Старый 26.11.2012, 13:03   #4
Tahoma
DI HALT RET
Форумчанин
 
Аватар для Tahoma
 
Регистрация: 30.12.2010
Сообщений: 117
По умолчанию

Цитата:
Сообщение от waleri Посмотреть сообщение
Чтото я не вижу, где вы заполняете codepage в geth. Скорее всего, поэтому возвращает 0
geth - только для возвращения количества символов. Возвращает стабильно. Думаю это не влияет на кодировку.
Tahoma вне форума Ответить с цитированием
Старый 26.11.2012, 13:40   #5
waleri
Старожил
 
Регистрация: 13.07.2012
Сообщений: 6,331
По умолчанию

Цитата:
Сообщение от Tahoma Посмотреть сообщение
geth - только для возвращения количества символов. Возвращает стабильно. Думаю это не влияет на кодировку.
Не знаю. Вы сами писали, что возвращает 0, если не поставить 1200...
waleri вне форума Ответить с цитированием
Старый 26.11.2012, 13:57   #6
Tahoma
DI HALT RET
Форумчанин
 
Аватар для Tahoma
 
Регистрация: 30.12.2010
Сообщений: 117
По умолчанию

Я писал, что пытаюсь взять текст, а не количество символов. Извиняюсь, если не правильно описал.
Tahoma вне форума Ответить с цитированием
Старый 26.11.2012, 16:22   #7
waleri
Старожил
 
Регистрация: 13.07.2012
Сообщений: 6,331
По умолчанию

А где вы прописываете gt.cb?
waleri вне форума Ответить с цитированием
Старый 26.11.2012, 22:03   #8
Tahoma
DI HALT RET
Форумчанин
 
Аватар для Tahoma
 
Регистрация: 30.12.2010
Сообщений: 117
По умолчанию

Цитата:
Сообщение от waleri Посмотреть сообщение
А где вы прописываете gt.cb?
наверное захватил, когда удалял код не относящийся к делу
Tahoma вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Вопрос по RichEdit kta87 Общие вопросы Delphi 5 22.01.2012 10:04
Вопрос по mySQL + Вопрос по RichEdit HTL Общие вопросы Delphi 4 01.01.2010 20:22
Вопрос по RichEdit ]Wowan[ Microsoft Office Word 0 12.06.2009 10:41
Вопрос: как загрузить в RichEdit картинки Bitrayder Общие вопросы C/C++ 4 28.03.2008 00:22