我有一個LOGFONT結構。現在我想要做的就是從LOGFONT高度獲取相關字體大小。將LogFont高度轉換爲以磅爲單位的字體大小
4
A
回答
11
當映射模式爲mm_Text
(通常是),並且lfHeight
字段爲正數時,它已經給出了以點爲單位的高度。當它是負值時,單位是像素。 MSDN for LogFont給你公式它們之間的轉換:
lfHeight = -MulDiv(PointSize, GetDeviceCaps(hDC, LOGPIXELSY), 72);
每英寸有72點。 GetDeviceCaps
告訴您給定設備上每英寸的像素數。反轉公式以從點獲取像素:
PointSize := MulDiv(-lfHeight, 72, GetDeviceCaps(hDC, LogPixelsY);
這裏要實現的重要一點是您需要設備上下文。字體大小不獨立於其出現的媒體而存在。屏幕上字體的像素高度將與打印機上字體的像素高度不同。使用您計劃繪製的任何畫布的Handle
屬性。
1
我覺得這也有點混亂。 以下是我學到的一些東西。 ;)
- 檢查
lfPitchAndFamily
的兩個低位以確定字體類型。 - 對於固定間距字體,請使用
GetTextMetrics
和TEXTMETRIC
結構。 - 對於可變間距字體(真實類型等),請使用
GetOutlineTextMetrics
和OUTLINETEXTMETRIC
結構。確保你的結構正確對齊。此外,結構是可變大小的。調用一次函數來獲得大小,分配空間,然後再次調用函數來填充結構。 - 從那裏,你可以找到適當的上升,下降和其他尺寸相關的信息。
請記住,它們是推薦值,並非所有顯示例程都能正確使用它們。例如,我正在計算確定給定字符串文本的對話框靜態控制所需高度的正確方法。 似乎並沒有Microsoft遵循他們自己的文檔。 ;) 不是說文檔是全部清楚或完整的,首先。
相關問題
- 1. ColdFusion - 將體重以磅爲單位轉換爲磅和盎司
- 2. 如何將字體大小(以px爲單位)轉換爲文檔中使用的單位(mm)以獲取svg
- 3. 固定大小像素字體的Emacs字體大小(以像素爲單位)?
- 4. 將內容高度設置爲精確的字體大小
- 5. 將div設置爲高度100%的字體大小
- 6. 如何將符號GtkIconSize轉換爲以像素爲單位的整數大小?
- 7. 以像素爲單位的字體大小和分數
- 8. Matplotlib以軸爲單位的字體大小
- 9. 以像素爲單位的WebBrowser字體大小
- 10. C#將datetimeoffset轉換爲以毫秒爲單位的字符串
- 11. 將小寫字母轉換爲大寫
- 12. 將小寫字母轉換爲大寫
- 13. 字體大小屬性不是以像素爲單位?
- 14. 使用jQuery檢測字體大小(以像素爲單位)
- 15. 測量字體大小以像素爲單位
- 16. 如何將svg元素的高度/寬度大小轉換爲像素
- 17. 如何將px轉換爲%,就像我們將px轉換爲em以獲取字體大小一樣?
- 18. 以釐米爲單位將高度轉換爲英寸,但無法獲取小數點
- 19. D3字體大小轉換
- 20. 用單位(100kb,32MB)將大小符號轉換爲Python中的字節數
- 21. C#將步幅/緩衝區/寬度/高度轉換爲位圖
- 22. 將字節轉換爲位
- 23. 如何將寬度和高度(以像素爲單位)轉換爲用於python庫pyte的列?
- 24. 類型轉換指針來改變其大小(以字節爲單位)
- 25. 將jquery轉換爲均衡高度的小腳本中的mootools
- 26. 如何將字符串長度轉換爲像素單位?
- 27. 以秒爲單位的音頻大小
- 28. 以ls爲單位的文件大小?
- 29. 將WPF寬度/高度轉換爲VB 6寬度/高度
- 30. Jquery字體大小調整爲div高度?
>「當lfHeight字段爲正值時」 - 然後字體映射器爲單元格高度提供匹配,即字符高度+內部引導。要獲得點的大小,必須從(單元格)高度中減去內部前導,然後按照上述步驟操作。 – 2010-05-31 15:58:56
我認爲我的第一條評論有點模糊,有點誤導。如果說,模糊不會; 「lfHeight」總是以像素爲單位,唯一的區別是當它是完整的單元格高度,當它的絕對值是字符高度時。如果說有誤導性;由於LOGFONT結構沒有「內部領先」信息,所以無法通過正面高度計算點的大小。必須選擇字體到DC然後使用GetTextMetrics,然後字符高度爲tmHeight-tmInternalLeading。 – 2010-06-01 21:41:14