我現在知道,可以通過監聽windows訊息中的IME訊息WM_IME_STARTCOMPOSITION與WM_IME_ENDCOMPOSITION來標記當前是不是正在進行非直接輸入(也就是中文輸入)。我試圖在自己的程式中,通過這兩個訊息來確定當前是否正在輸入,來進行箭頭鍵,回車鍵等一些功能鍵的屏蔽。
在windows10上,測驗過多個輸入法,百度,QQ,微軟拼音,都可以按照這個規范來做。我的程式也能正確運行。
但是使用搜狗輸入法就是一個很奇怪的情況。
使用spy++進行訊息監控可以發現。
這個輸入法的WM_IME_STARTCOMPOSITION是在你確定選詞后,和END在同一幀里發出來的。
而對于不選詞,直接進行退格或者切換輸入法,使得選詞條消失則不會有任何END事件。
但是搜狗輸入法在所有的輸入控制元件中,都可以保證正確的對功能鍵進行屏蔽。所以我很好奇,windows標準的輸入控制元件是怎么對功能鍵進行屏蔽的?
uj5u.com熱心網友回復:
處理好了,是我們使用的glfw不夠新,存在bug,導致進行非直接輸入的案件被傳到了程式中引起了錯誤。這個bug今年1月份進行了修復。。。。還是解釋一下bug成因。處于非直接輸入的時候,所有按鍵的事件都會傳一個引數VK_PROCESSKEY進行表示,所以需要將這個狀態的事件進行一個過濾。
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/186655.html
標籤:C++ 語言
上一篇:C語言資料結構小問題
