其實很簡單啦,不過微軟的API應用說明中對這個的描述也不清楚,現將我的實現代碼和注意事項貼出來給大家參考。
1
#include <INITGUID.H>
2
#include "MSIME.h"
3
.
4
.
5
.
6
CString sSelect;
7
this->GetWindowText(sSelect);
8
9
IFELanguage *lang = NULL;
10
if(SUCCEEDED(CoCreateInstance(CLSID_MSIME_JAPANESE_6,NULL,
11
CLSCTX_INPROC_SERVER,IID_IFELanguage,(void**)&lang)) && lang != NULL)
12
{
13
if(!SUCCEEDED(lang->Open()))
14
{
15
return;
16
}
17
}
18
if(lang)
19
{
20
CString sResult;
21
BSTR out = NULL;
22
if(SUCCEEDED(lang->GetPhonetic(_bstr_t(sSelect),1,-1,&out)) && out != NULL)
23
{
24
sResult = out;
25
::SysFreeString(out);
26
}
27
this->SetWindowText(sResult);
28
}
第1行的include比較重要,如果不加,容易出現鏈接錯誤,這是在platform的SDK中帶有的頭文件。
2

3

4

5

6

7

8

9

10

11

12



13

14



15

16

17

18

19



20

21

22

23



24

25

26

27

28

第2行是關鍵性頭文件,在微軟japan ime文檔的append部分帶有,現在最新是1.3版。
其他部分照貓畫虎就行了,值得注意的是CLSID_MSIME_JAPANESE_6這個,如果要想在win2000下用,一定要用低版本的,推薦像我這樣用6。
用這套API,還可以完成類似于轉換拼音之類的功能,如果要創造自己的輸入法,建議看看TSF,微軟給了很多TSF的例子。