出於某種原因,人們確實對列印富文字控制項中的內容感到困惑。 我不是印刷專家,但我在研究了材料後已經弄清楚了,所以我要在這裡記錄下來。
解決問題的關鍵是這條訊息:em formatrange。 每次傳送訊息時,小部件的內容都會列印一些,然後訊息返回尚未列印的文字的第乙個字元的索引,然後它可以根據此索引繼續將其傳遞給下一段文字。 剩下的就是簡單的設定和資源破壞。
我們首先獲取頁面的尺寸,並使用 em setTargetDevice 訊息告訴富文字控制項我們打算呈現的內容。 接下來,我們需要填寫 FormatRange 結構,為此,我們指定要渲染到的 HDC 和紙張大小。 但是角色的範圍呢?
我們很懶惰,讓富文字控制項為我們處理它:我們選擇所有文字,然後讓富文字控制項告訴我們剛剛選擇的內容,它以字元排列的形式返回,這正是我們所需要的。
接下來是列印迴圈。 雖然仍有文字要列印(並且我們沒有遇到錯誤),但我們開始乙個新頁面並要求富文字控制項呈現頁面,記住下一頁應以 ** 開頭,然後結束當前頁面。
請注意,執行檢查以確保格式文字控制項向前移動。 如果沒有,那麼我們最終會陷入無限迴圈,列印出一張空白頁!(我不知道這在理論上是否可行,但我同樣會阻止它。 )
列印迴圈完成後,我們通過傳送最終的 em formatrange 訊息讓富文字控制項知道我們已完成,並且可以丟棄它快取的資訊。
我們可以使用過去幾天學到的所有資訊來製作乙個簡單的“列印 RTF”程式。
我們建立乙個富文字控制項,並使用在命令列上傳遞的檔案填充它。 然後,我們要求 printdlg 函式為我們提供使用者預設印表機的 DC。 我們給文件乙個標題,啟動文件,將富文字列印到文件中,然後結束文件(如果在列印過程中出現問題,則中止文件)。 稍微清理一下,程式就停止執行了。 乙個小程式,可以列印任何RTF檔案,沒有任何特別難以理解的檔案。
總結。 我有時真的很想將列印功能放在需求列表的最後一行,但在現實世界中,此功能可能是某種型別的使用者最需要的。 所以,盡你最大的努力去擁抱你最害怕的東西。
最後。 Raymond Chen 的“The Old New Thing”是我最喜歡的部落格之一,它有很多關於 Windows 的小知識,這對 Windows 開發人員真的很有幫助。 **how do i print the contents of a rich text control?》