国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 開發 > 綜合 > 正文

IFontDisp和CFontHolder的使用問題

2024-07-21 02:29:22
字體:
來源:轉載
供稿:網友

最近處理一個控件bug,發現com組件字體讀取有趣問題。
bug描述:
      簡體中文下的應用編寫:
         ocx.font.name = "宋體"       '對控件的字體初始化
         text1.text = ocx.cellfont(1,1, kds_fontprop_name)   '讀取單元格1,1的字體
     控件說明:當相應單元格未設置字體時,將使用控件的字體設置。
     問題:
        在繁體中文下運行,text1得到字體名為亂碼。

分析:
先簡化問題:
嘗試:在簡體操作系統下
       ocx.font.name = “abcd”
       msgbox kds12.cellfont(1,1, kds_fontprop_name)
       得到輸出:abcd。
       呵呵,這顯然不對。
       msgbox kds12.font.name
       輸出:arial  
       嗯,這才是對的,哪有什么abcd字體啊。
       好了,問題找到了,"宋體"兩個字到繁體中文下,當然會變成亂碼啦。
 
因此,初步確定是cellfont接口的問題。

查看代碼:
      取字體的方法如下:
      cfontholder &rfontholder = pcontrol->internalgetfont();
      hfont hfont = rfontholder.getfonthandle();
      logfont lf;
      cfont *pfont = cfont::fromhandle(hfont);
      pfont->getlogfont(&lf);
      ok,明白了,是通過logfont取字體信息。
      再試一下,不管你輸入什么字體名,它取出來就是啥。嘿。

嘗試換種方式取字體信息:
     (代碼不完全,未處理出錯情況,只是舉例)
     ifont * pifont = null;
     rfontholder.getfontdispatch()->queryinterface(&pifont)))
     然后,用ifont的接口取信息,如:get_name(&bstrtemp)
     試試,這下取出是正確應用的字體,當設置錯誤時,會取出默認值。
     錯誤排除。

似乎的結論:
     采用 ifontdisp接口方式設置的字體信息,
     當采用pcontrol->internalgetfont()取回cfontholder后,如果通過getfonthandle 取出windows句柄,然后獲取字體信息,并不一定是真實的應用值(即例子中,一旦出錯,并不取出系統默認值,而是錯誤的設置值,其中保存的似乎是一個臨時值,而非實際的最終應用值)
     如果采用getfontdispatch 取出ifontdisp,然后再取出ifont來取值,才是正確地。
     why? 天曉得。

注冊會員,創建你的web開發資料庫,
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 肥东县| 洛宁县| 太仆寺旗| 望江县| 西乌珠穆沁旗| 彩票| 乌海市| 临汾市| 枝江市| 姜堰市| 都安| 博爱县| 达尔| 土默特左旗| 牡丹江市| 佛教| 宝应县| 武汉市| 綦江县| 元阳县| 绿春县| 英德市| 岗巴县| 石河子市| 马龙县| 成都市| 介休市| 永登县| 渝中区| 屯门区| 获嘉县| 曲靖市| 临泉县| 仁怀市| 扎兰屯市| 玛沁县| 南江县| 湘乡市| 门源| 上栗县| 伊通|