2013-05-15 15 views
0

第一個參數到EnumFontFamiliesEx功能,根據the MSDN documentation,被描述爲:MSDN文檔的這一點是什麼意思?

HDC [IN]
的手柄從中枚舉字體的設備上下文。

  1. 究竟是什麼意思?
  2. 設備上下文是什麼意思?
  3. 爲什麼設備上下文與字體有關?
+0

你有什麼試過?您是否閱讀過[文檔](https://www.google.com/search?q=site:msdn.microsoft.com+%22device+context%22)? –

+0

關於2.,爲什麼不搜索文檔以查看[設備上下文是什麼](http://msdn.microsoft.com/en-us/library/windows/desktop/dd183553(v = vs.85)的.aspx)?你應該嘗試一些更多的研究,然後回來一個更好的問題。 –

+0

@BenVoigt,我確實看到了。所有關於設備上下文的所有內容都只是關於諸如顯示設備,打印機等設備的信息而已。這讓我更加困惑。我真的不知道字體和設備上下文是如何關聯的。所以,我想也許這個詞有其他含義。因此,這個問題。順便說一句,我使用這個函數來測試系統中是否安裝了特定的字體。 –

回答

2

問題(3)是合法很難找到一個解釋的事情,但原因很簡單:

一些設備提供自己的字體支持。例如,PostScript打印機將允許您使用PostScript字體。但是,這些相同的字體在屏幕上呈現時或在沒有PostScript支持的其他打印機上不可用。另一個例子是繪圖儀(這是一個電動筆)需要具有固定筆劃粗細的矢量字體,所以光柵字體不能用於這樣的設備。

如果您對設備特定的字體支持感興趣,您需要了解GetDeviceCaps函數。

+0

感謝您的信息!我想要做的就是枚舉系統中安裝的某些字體的列表。然後我注意到一個hWnd參數讓我困惑不已。所以在我的情況下,這個參數是不相關的;正確? –

+0

@Anish:我不確定你在哪裏看到一個窗口句柄......但是設備上下文不能是「不相關的」,因爲它不是可選的。你必須提供一個才能使用'EnumFontFamiliesEx'。如果您不關心哪個設備,那麼您可以使用與桌面窗口關聯的DC作爲合理的默認設置。 –

+0

我在['GetDC'](http://msdn.microsoft.com/en-us/library/aa921543.aspx)函數中注意到了它。感謝您提供有關桌面窗口的提示。我想我會去那個。最後一個問題。假設我在計算機上安裝了2種字體A和B(即在Windows/Fonts目錄中)。現在,在保持所有其他參數相同的情況下更改設備上下文是否對枚舉字體有任何影響(即它們會不同)? –

1

微軟對設備上下文的其他文章,

http://msdn.microsoft.com/en-us/library/windows/desktop/dd183553(v=vs.85).aspx

應用程序必須通知GDI加載特定的設備驅動程序,並 一旦驅動程序加載,準備用於設備繪製 操作(如選擇線條顏色和寬度,刷子圖案 以及顏色,字體字體,裁剪區域等)。這些任務 通過創建和維護設備上下文(DC)來完成。 A DC是一種結構,它定義了一組圖形對象及其相關屬性以及影響輸出的圖形模式。 圖形對象包括用於畫線的筆,用於繪畫的畫筆和填充,用於複製或滾動畫面的部分的位圖,用於定義可用顏色集合的 調色板,用於剪裁和其他操作的區域 ,以及繪製和繪製操作的路徑。與大多數結構不同,應用程序永遠不會直接訪問DC;相反,它通過調用各種函數間接地操作 。

顯然字體是一種繪畫。

1

windows API廣泛使用處理的概念。句柄是一個整數值,您可以將其用作令牌來訪問API資源。你可以把它看作一種「this」指針,儘管它絕對不是指針。

設備上下文是windows API中的一個對象,表示您可以在上面繪製或顯示圖形的對象。它可能是一個打印機,位圖或屏幕,或其他創建圖形有意義的上下文。在Windows中,必須先將字體選擇到設備上下文中,然後才能使用它們。爲了找出在任何給定設備上下文中當前可用的字體,可以列舉它們。這就是EnumFontFamiliesEx進來