我筆記本使用的是win7系統,開發的duilib程式一直都使用微軟雅黑字型,昨天在xp系統下測試時發現由于xp下沒有微軟雅黑字型而導緻duilib使用了預設的宋體字,瞬間感覺界面不協調了。解決這個問題的方法就是讓程式自帶自己使用的字型,并且在運作時加載這個字型。以前從來沒關心過這個問題。
比較簡單的方法就是在程式運作時把字型檔案拷貝到系統的Fonts目錄下,讓系統自動安裝這個字型,但是這樣就會修改系統的檔案,這可能并不是使用者需要的東西。翻了翻MSDN得知了AddFontResource和CreateScalableFontResource這兩個API,使用他們可以讓程式加載任意路徑的字型而不必拷貝到系統路徑。于是寫了一個AddFont類來加載一個字型,代碼如下:
使用起來很簡單,聲明一個CAddFont變量。然後調用AddFont方法就可以了(需要注意的就是,應該在窗體建立之前就調用這個方法,因為窗體的建立過程中就會去解析xml并且建立字型對象,如果在窗體建立之後再調用,就已經遲了)
同時把”華文新魏“字型檔案“STXINWEI.ttf"放到了Font目錄裡,然後在_tWinMain裡加入這行代碼就可以了。
這時就可以直接在編寫xml檔案時使用這個字型了,效果如下:
總結:
我這裡隻是簡單随手的封裝了一個CAddFont類來做可行性測試,實際這個類的代碼寫的并不好,讀者可以封裝一個更好的,支援添加并管理多個字型。實際還有兩個更好的API叫AddFontResourceEx和AddFontMemResourceEx,以後有機會再寫。如果代碼有錯誤,請聯系我
Redrain QQ:491646717 2014.9.19