關於DuiLib的CRichEditUI控件在win8下輸入中文亂碼的解決方案


      上午經理拿來一個微軟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下找的到。

顯示效果如下:


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM