Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "WinAPI";
Текущий архив: 2004.02.25;
Скачать: [xml.tar.bz2];

Вниз

Как определить ширину текста в пункте меню?   Найти похожие ветки 

 
deema   (2003-12-14 19:20) [0]

Здравствуйте! При ручной прорисовке пункта меню хочу знать ширину текста в нем. Как это сделать?


 
Dimaxx   (2003-12-15 01:41) [1]

Удалено модератором


 
MBo   (2003-12-15 06:58) [2]

TCanvas.TextWidth


 
deema   (2003-12-15 23:31) [3]

> TCanvas.TextWidth

Во-первых, я использую только API и никакой канвы, а во-вторях, я рылся в исходниках Delphi 6, там создается окно класса TUtilWindow (или типа того) с шрифтом по умолчанию, а не с менюшным. В Delphi ширина определяется используя этот стандартный шрифт, а он может от менюшного отличаться очень даже сильно.
Может быть, переформулировать вопрос - Где взять шрифт, определенный для пунктов меню (может функция какая есть, или даже в реестре прочитать)?


 
ka3ax   (2003-12-16 10:01) [4]

BOOL GetTextExtentPoint(
HDC hdc, // handle to DC
LPCTSTR lpString, // text string
int cbString, // number of characters in string
LPSIZE lpSize // string size
);
определяет высоту и ширину текста на контексте hdc, при текущем выбранном в нем шрифте,
можно же и свой шрифт выбрать наверное...


 
deema   (2003-12-17 23:15) [5]

Спасибо, но чтобы взять hdc нужно сначала где-то раскопать окно с этим dc. Или где еще этот DC взять????????????????????


 
Игорь Шевченко   (2003-12-18 00:17) [6]


function GetMenuFont : HFONT;
var
NonClientMetrics: TNonClientMetrics;
begin
Result := 0;
if SystemParametersInfo(SPI_GETNONCLIENTMETRICS, 0, @NonClientMetrics, 0) then
Result := CreateFontIndirect(NonClientMetrics.lfMenuFont);
end;

function GetMenuTextWidth (const Str : String);
var
DC : HDC;
OldFont, MenuFont : HFONT;
TextSize : SIZE;
begin
DC := GetDC (HWND_DESKTOP);
MenuFont := GetMenuFont();
try
OldFont := SelectObject(DC, MenuFont);
try
if not GetTextExtentPoint32(DC, PChar(Str), Length(Str), TextSize)) then
RaiseLastWin32Error;
Result := TextSize.cx;
finally
SelectObject(DC, OldFont);
end;
finally
ReleaseDC (HWND_DESKTOP, DC);
DeleteObject(MenuFont);
end;
end;


LMD


 
deema   (2003-12-19 23:01) [7]

Спасибо, попробую...



Страницы: 1 вся ветка

Форум: "WinAPI";
Текущий архив: 2004.02.25;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.45 MB
Время: 0.029 c
1-79720
Серёга
2004-02-11 15:11
2004.02.25
Подключение dll


1-80005
Max_Ivanych
2004-02-13 10:13
2004.02.25
Как отловить дескриптор окна DOS-программы?


14-80279
mfender
2004-02-04 10:03
2004.02.25
InterBase Manual


1-80011
Yanis
2004-02-10 00:17
2004.02.25
Stream ы


1-79950
Khabibulin
2004-02-13 21:25
2004.02.25
Открыть с помощью ...





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский