上午經理拿來一個微軟suiface RT的平板,運行着我之前開發的一個軟件,發現了一個bug,就是在輸入富文本框內容時,竟然是亂碼。
這個平板是win8系統,之前這套系統在xp、vista下都進行過系統測試的,都沒有出現過這種問題,決定查找一下原因。
此富文本框是使用的DUILIB開源界面庫的RichEdit控件進行實現的,通過一下午的查找原因,找到了兩個解決方案:
A、通過提供的QQdemo,發現unicode編譯出的exe,在win8下輸入中文時,richedit可正常顯示中文,而多字節編譯的exe,也是亂碼,估解決方案之一就是將其工程改成unicode字符鍵進行編譯,可正常使用richedit;
B、另一解決方案,就不得不說微軟的不按套路出牌了,在查看UIRichEdit.cpp的源碼時發現了這樣的一段代碼:
PCreateTextServices TextServicesProc; HMODULE hmod = LoadLibrary(_T("msftedit.dll")); if (hmod) { TextServicesProc = (PCreateTextServices)GetProcAddress(hmod,"CreateTextServices"); } if (TextServicesProc) { HRESULT hr = TextServicesProc(NULL, this, &pUnk); } hr = pUnk->QueryInterface(IID_ITextServices,(void **)&pserv);
懷疑是不是win8下的msftedit.dll與xp、vista下的有差別導致的顯示亂碼問題,通過拷貝msftedit.dll到項目文件中,在win8下運行,發現richedit輸入中文顯示正常。估拷貝msftedit.dll到自己的安裝目錄下,同樣可以解決亂碼的問題。 msftedit.dll是richedit4.0的動態庫,之前的有richedit32、richedit20,都可以在windows\system32下找的到。
顯示效果如下:
