電腦遊戲製作開發設計論壇 首頁 電腦遊戲製作開發設計論壇
任何可以在PC上跑的遊戲都可以討論,主要以遊戲之製作開發為主軸,希望讓台灣的遊戲人有個討論、交流、教學、經驗傳承的園地
 
 常見問題常見問題   搜尋搜尋   會員列表會員列表   會員群組會員群組   會員註冊會員註冊 
 個人資料個人資料   登入檢查您的私人訊息登入檢查您的私人訊息   登入登入 

Google
[請益] 請問關於 輸入法 的狀態偵測

 
發表新主題   回覆主題    電腦遊戲製作開發設計論壇 首頁 -> 遊戲程式高級班:DirectX、OpenGL及各種圖型函式庫
上一篇主題 :: 下一篇主題  
發表人 內容
pleaselouis
時常出沒的會員


註冊時間: 2008-11-03
文章: 32

505.97 果凍幣

發表發表於: 2008-12-5, PM 8:48 星期五    文章主題: [請益] 請問關於 輸入法 的狀態偵測 引言回覆

大家好 小弟我又來發問了 這次是關於 輸入法 的狀態偵測的問題

目前我正在用一個 2D引擎-HGE 工作中 這是他的官方網站 http://hge.relishgames.com/

我個人還蠻推薦的 非常的精簡 安裝容易 也算蠻易學的 效能也算不錯

不過如同大部分的 國外引擎 對 中文字型 是不支援的 還好有一位對岸的好心人

針對HGE做了相關的範例 提供他的程式碼 為大家做教學 以下是他的網址 :


http://www.cppblog.com/bogy/archive/2008/03/10/44114.html

http://www.cppblog.com/bogy/archive/2008/10/13/45349.html


而現在我在弄 如同網路遊戲的 交談對話框 為我的目標 因而有幾個問題 想請教大家


1.在網址所提供的 文字輸入功能中 我做了一點小更改 就是等到玩家打好字串後

要再按一次 Enter 才會在上面文字區域的部份作顯示 而實作的原理是

偵測到玩家按下 Enter 後 才對文字區域做 Update 更新文字訊息

但是在使用輸入法時 如:新注音 在打字完成時 也必須要按下 Enter 才會把字串丟過去

可是就在按下 Enter 時 我的程式也判定 我打的字串要做 Update 了

但是我希望可以先只將字串留在文字輸入框 待玩家確認後 再次按下 Enter 才 Update

因此我的解決想法是 另外偵測 輸入法的狀態 除了顯示為 "中文(繁體)美式鍵盤" 外

也就是若不是在只能打英文及數字的情況 要多按一次 Enter

才會做 Update 的動作 藉此達成我上面想做的效果 而我目前做到的進度是 :

HKL s_hklCurrent = GetKeyboardLayout( 0 );//抓取輸入法狀態

if ( PRIMARYLANGID( LOWORD( s_hklCurrent ) ) == LANG_CHINESE)
{//取得輸入法的 PRIMARY 狀態 是否為中文

if( SUBLANGID( LOWORD( s_hklCurrent ) ) == SUBLANG_CHINESE_TRADITIONAL)
{//取得輸入法的 SUB 狀態為繁體中文??

//...做相關動作 我目前是螢幕顯示 TRUE
}
else{}//...做相關動作 我目前是螢幕顯示 FALSE

}

一開始我以為 SUBLANG_CHINESE_TRADITIONAL 就是指未開啟任何中文輸入法的狀態

也就是只能打英文及數字的情況 但是我在程式執行時 不斷更換輸入法種類

可是螢幕就一直只是顯示 TRUE 而已 而如果將輸入法的區域調為 日文 的話

程式就很不留情的 當掉 強制結束...囧rz

不過就針對 取得輸入法狀態是否為 繁體中文 的部份 顯然我是錯的

要不然我的螢幕 就不會只是顯示 TRUE ... 在我查詢 網路資訊 及 MSDN 後

我還是一頭霧水 因此來這邊請教大家 要如何才能偵測到輸入法的狀態

以及我上述的地方 只要註解掉 程式就完全正常了 也請問大家是哪邊有問題?? 謝謝


2.我的目的只為了 在打字時 先將字串留在輸入框 待確認後 再按下 Enter 才 Update

因此也不一定要用上述的方式來達到目的 不知有沒有前輩 可以提供意見 謝謝


3.我目前還卡在 如果遊戲設定為 全螢幕 時 那麼會完全看不到輸入法的 挑字選單

請問這樣應該要如何解決 可不可以提供 關鍵字 讓我去學習研究?? 謝謝


麻煩大家非常不好意思 但是還是請大家幫幫忙 謝謝 不勝感激
回頂端
檢視會員個人資料 發送私人訊息
pleaselouis
時常出沒的會員


註冊時間: 2008-11-03
文章: 32

505.97 果凍幣

發表發表於: 2008-12-11, PM 12:28 星期四    文章主題: 引言回覆

大家好 最近工作比較忙 所以比較晚回文 歹勢

char g_szImeName[ 1024 ];
HKL hKL = GetKeyboardLayout( 0 );
if(ImmIsIME(hKL))
{
memset(g_szImeName,0,sizeof(g_szImeName));
HIMC hIMC = ImmGetContext( hge->System_GetState(HGE_HWND) );
ImmEscape( hKL, hIMC, IME_ESC_IME_NAME,g_szImeName );

ImeStateName = g_szImeName;

ImmReleaseContext( hge->System_GetState(HGE_HWND), hIMC );
}
else{ImeStateName="";}

後來終於發現 這樣就可以偵測到 輸入法的種類 把輸入法名稱存到陣列中
回頂端
檢視會員個人資料 發送私人訊息
從之前的文章開始顯示:   
發表新主題   回覆主題    電腦遊戲製作開發設計論壇 首頁 -> 遊戲程式高級班:DirectX、OpenGL及各種圖型函式庫 所有的時間均為 台灣時間 (GMT + 8 小時)
1頁(共1頁)

 
前往:  
無法 在這個版面發表文章
無法 在這個版面回覆文章
無法 在這個版面編輯文章
無法 在這個版面刪除文章
無法 在這個版面進行投票
可以 在這個版面附加檔案
可以 在這個版面下載檔案


Powered by phpBB © 2001, 2005 phpBB Group
正體中文語系由 phpbb-tw 維護製作