2012-10-17 16 views
0

我使用DialogBox API在我的應用程序中顯示對話框。在DLGPROC過程回調的WM_INITDIALOG消息處理中,我可以在調試器中看到文本字符串是正確的Unicode,並且SetDlgItemText用於在對話框中設置Rich Edit控件上的文本。但是,當我試圖通過使用GetDlgItemText API從對話框中獲取文本時,這些字符都是問號。無法在Windows對話框中顯示其他的unicode東亞語言對話框

我的項目被編譯爲Unicode。我也使用了spy ++,它顯示Windows Proc是Unicode。

我使用英文語言環境在Windows 7上測試中文,所以我也爲我的機器安裝了中文語言包,但它也沒有幫助。

我無法解釋我在這裏看到的。如果任何人能夠闡明這一點或如何進一步調試,那將是值得讚賞的。

+0

Unicode和TCHAR是一個地獄,你可以用'wchar_t'而不是'GetFlgItemText'和TCHAR來試用'GetFlgItemTextW'嗎?也許一些設置導致你的程序使用ANSI版本的功能和從Unicode到ANSI的轉換是你的錯誤的來源 – BigBoss

+0

我想出了原因,這是RichEdit控件問題,它似乎沒有默認使用unicode。我會添加更多關於答案的信息。 – windfly2006

回答

0

事實證明,這是由於RichEdit控件。如果我只是使用文本框,中文字符將與其他英文字符一起正確顯示。所以在做了一些閱讀後,特別是this one,我做了一些嘗試,然後讓它工作。所以基本上我不應該使用SetDlgItemText,而不是我應該使用下面的代碼(其中m_strDisplay是顯示在豐富的編輯文本):

::SendMessage(hWndText, EM_AUTOURLDETECT, TRUE, NULL); 
SETTEXTEX TextInfo = {0}; 
TextInfo.flags = ST_DEFAULT|SF_UNICODE; 
TextInfo.codepage = 1200; 
SendMessage(hWndText, EM_SETTEXTEX, (WPARAM)&TextInfo, (LPARAM)(LPCTSTR)m_strDisplay); 

上設置RichEdit控件的文本。