Хочу сделать так чтобы при вызове пользователем контекстного меню (SHIFT + F10 или соответствующая кнопка на клавиатуре), меню отображалось непосредственно под кареткой. Определить положение каретки несложно, а вот как получить ее высоту?
В принципе я могу получить положение верхнего левого угла для текущей сроки(строки в которой каретка). Но как мне определить ширину строки????
Пробовал определить высоту шрифта в указанном месте. Определил, но не учел что строки больше чем высота текста в ней.
Я могу например получить ширину строки через разницу верхних точек для двух смежных строк(и это то что мне надо). Но так я не могу сделать для последней строки в RichEdit'е, так как за ней ведь строк больше нет

Неужели нельзя ничего сделать?
Нужна ваша помощь...
" Игорь " <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