簡體   English   中英

Unicode視窗中的非Unicode WM_CHAR

[英]non-unicode WM_CHAR in unicode windows

我已經編寫了一個DLL,該DLL導出了一個使用RegisterClassExWCreateWindowExW創建窗口的函數。 每條消息都通過

GetMessageW(&msg, wnd_handle, 0, 0);
TranslateMessage(&msg);
DispatchMessageW(&msg);

還有一個程序加載DLL並調用該函數。

盡管使用Unicode窗口創建方法,但即使我鍵入一些非ASCII符號或使用Alt +(代碼), WM_CHAR消息中的wParam始終包含ASCII字符。 wParam代替UTF-16,在“ A”和“ z”之間包含一些ASCII字符。 WndProc是DLL中的靜態函數。

當所有與窗口相關的代碼都在一個程序中時,不會發生此問題。

有沒有辦法始終在DLL的窗口中包含Unicode WM_CHAR消息?

問題出在消息檢索過程中。 我將GetMessage()與窗口的句柄一起使用,而不僅僅是0, GetMessageW(&msg, wnd_handle, 0, 0)而不是GetMessageW(&msg, 0, 0, 0)
這樣, WM_INPUTLANGCHANGEREQUEST消息被吞下,並且語言環境仍為英語。

您的方法似乎應該可行。

您是否可以調用ANSI DefWindowProc而不是寬版本? 這會將WM_UNICHAR轉換為ANSI WM_CHAR消息。 也許那可以解釋您所看到的。

作為實驗,我將直接處理WM_UNICHAR消息,並查看此時的數據。

我不確定100%,但這可能會有所幫助:

查看實現調用DLL函數的代碼的項目設置。 確保字符集也為UNICODE,而不是多字節:

(轉到“項目屬性”,然后轉到“常規”部分,然后將“字符集”選項設置為“使用Unicode字符集”)。 我以為您使用的是Visual Studio 2003或更高版本。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM