Высота строки в RichEdit'е
От: Игорь Беларусь  
Дата: 09.10.07 13:10
Оценка:
Хочу сделать так чтобы при вызове пользователем контекстного меню (SHIFT + F10 или соответствующая кнопка на клавиатуре), меню отображалось непосредственно под кареткой. Определить положение каретки несложно, а вот как получить ее высоту?
В принципе я могу получить положение верхнего левого угла для текущей сроки(строки в которой каретка). Но как мне определить ширину строки????
Пробовал определить высоту шрифта в указанном месте. Определил, но не учел что строки больше чем высота текста в ней.
Я могу например получить ширину строки через разницу верхних точек для двух смежных строк(и это то что мне надо). Но так я не могу сделать для последней строки в RichEdit'е, так как за ней ведь строк больше нет
Неужели нельзя ничего сделать?
Нужна ваша помощь...
Re: Высота строки в RichEdit'е
От: Carc Россия http://www.amlpages.com/home.php
Дата: 09.10.07 16:49
Оценка:
" Игорь " <67393@users.rsdn.ru> сообщил/сообщила в новостях следующее: news:2686816@news.rsdn.ru...
> Хочу сделать так чтобы при вызове пользователем контекстного меню (SHIFT + F10 или соответствующая кнопка на клавиатуре), меню отображалось непосредственно под кареткой. Определить положение каретки несложно, а вот как получить ее высоту?
> В принципе я могу получить положение верхнего левого угла для текущей сроки(строки в которой каретка). Но как мне определить ширину строки????
А зачем ширина строки?
EM_GETSEL — получили положение каретки
EM_POSFROMCHAR получили координаты по положению каретки
> Пробовал определить высоту шрифта в указанном месте. Определил, но не учел что строки больше чем высота текста в ней.
> Я могу например получить ширину строки через разницу верхних точек для двух смежных строк(и это то что мне надо). Но так я не могу сделать для последней строки в RichEdit'е, так как за ней ведь строк больше нет

> Неужели нельзя ничего сделать?

> Нужна ваша помощь...
По моему через TOM проще
ITextDocument* pDoc=получаем TOM-интерфейс ITextDocument (EM_GETOLEINTERACE + QueryInterface(IID_ITextDocument);
потом получаем диапазон текста там где каретка
ITextRange* pRange=NULL;
pDoc->Range(положение_каретки_из_EM_GETSEL,положение_каретки_из_EM_GETSEL-1,&pRange);
ITextFont* pFont=NULL;
pRange->GetFont(pFont) — получили ITextFont для диапазона там где каретка

из ITextFont получаем высоту шрифта
а через EM_GETPARAFORMAT — получаем высоту строки (отступы, интервалы между строками и.т.д.)
Posted via RSDN NNTP Server 2.1 beta
Aml Pages Home
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.