IME 입력 프로 그래 밍: 제3 장 ime 파일 에서 사용 해 야 할 구조
1、IMEINFO
struct tagIMEInfo { // ImeInquire
DWORD dwPrivateDataSize;//
DWORD fdwProperty; //
// :
//=IME_PROP_AT_CARET
//=IME_PROP_SPECIAL_UI
//=IME_PROP_CANDLIST_START_FROM_1 1
//=IME_PROP_UNICODE UNICODE
// :
//=IME_PROP_END_UNLOAD
//=IME_PROP_KBD_CHAR_FIRST
//=IME_PORP_NEED_ALTKEY ALT IME
//=IME_PROP_IGNORE_UPKEYS
//=IME_PROP_COMPLETE_ON_UNSELECT ,
// W98 2000
DWORD fdwConversionCaps;// , 、 、
//=IME_CMODE_NATIVE
//=IME_CMODE_FULLSHAPE
//=IME_CMODE_CHARCODE
//=IME_CMODE_SOFTKBD //
//=IME_CMODE_NOCONVERSION //
//=IME_CMODE_EUDC //
//=IME_CMODE_SYMBOL //
DWORD fdwSentenceCaps; //
//=IME_SMODE_PLAURALCLAUSE
//=IME_SMODE_SINGLECONVERT
//=IME_SMODE_AUTOMETIC
//=IME_SMODE_CONVERSATION
DWORD fdwUICaps; // :
//=UI_CAP_2700
//=UI_CAP_ROT90
//=UI_CAP_ROTANY
//=UI_CAP_SOFKBD
DWORD fdwSCSCaps; //
//=SCS_CAP_COMPSTR
//=SCS_CAP_MAKEREAD
DWORD fdwSelectCaps; //
//=SELECT_CAP_CONVMODE
//=SELECT_CAP_SENTENCE
} IIMEINFO;
2、COMPOSITIONSTR
typedef struct tagCOMPOSITIONSTR { // :
DWORD dwSize; // = + + + + + + +
DWORD dwCompReadAttrLen; //
DWORD dwCompReadAttrOffset; //
DWORD dwCompReadClsLen; //
DWORD dwCompReadClsOffset; //
DWORD dwCompReadStrLen; //
DWORD dwCompReadStrOffset; //
DWORD dwCompAttrLen; //
DWORD dwCompAttrOffset; //
DWORD dwCompClsLen; //
DWORD dwCompClsOffset; //
DWORD dwCompStrLen; //
DWORD dwCompStrOffset; //
DWORD dwCursorPos; //
DWORD dwDeltaStart; //
DWORD dwResultReadClsLen; //
DWORD dwResultReadClsOffset; //
DWORD dwResultReadStrLen; //
DWORD dwResultReadStrOffset; //
DWORD dwResultClsLen; //
DWORD dwResultClsOffset; //
DWORD dwResultStrLen; //
DWORD dwResultStrOffset; //
DWORD dwPrivateSize; //
DWORD dwPrivateOffset; //
} COMPOSITIONSTR;
3、CANDIDATEINFO
typedef struct tagCANDIDATEINFO { // ,
DWORD dwSize; //
DWORD dwCount; //
DWORD dwOffset[32]; //
DWORD dwPrivateSize; //
DWORD dwPrivateOffset; //
} CANDIDATEINFO;
4、GUIDELINE
typedef struct tagGUIDELINE {
DWORD dwSize;
DWORD dwLevel; // the error level.
// GL_LEVEL_NOGUIDELINE,
// GL_LEVEL_FATAL,
// GL_LEVEL_ERROR,
// GL_LEVEL_WARNNING,
// GL_LEVEL_INFORMATION
DWORD dwIndex; // GL_ID_NODICTIONARY and so on.
DWORD dwStrLen; // Error Strings, if this is 0, there
// is no error string.
DWORD dwStrOffset;
DWORD dwPrivateSize;
DWORD dwPrivateOffset;
} GUIDELINE;
5、CANDIDATELIST
The CANDIDATELIST structure contains information about a candidate list.
typedef struct tagCANDIDATELIST { // =〉
DWORD dwSize; // :=sizeof(CANDIDATELIST)+
DWORD dwStyle; //
//=IME_CAND_UNKNOWN
//=IME_CAND_READ ,
//=IME_CAND_CODE dwCount=1,dwOffset , ,
// >1 dwOffset
//=IME_CAND_MEANING
//=IME_CAND_RADICAL
//=IME_CAND_STROKES
DWORD dwCount; //
DWORD dwSelection; //
DWORD dwPageStart; // ( )
DWORD dwPageSize; //
DWORD dwOffset[]; // :[ ];[ ]。。。。
} CANDIDATELIST;
6、COMPOSITIONFORM
typedef tagCOMPOSITIONFORM { // 、 :
// IMC_SETCOMPOSITIONWINDOW IMC_SETCANDIDATEPOS
DWORD dwStyle; //
//=CFS_DEFAULT
//=CFS_FORCE_POSITION // , IME
//=CFS_POINT // , IME
//=CFS_RECT //
POINT ptCurrentPos; //
RECT rcArea; //
}COMPOSITIONFORM;
7、CANDIDATEFORM
The CANDIDATEFORM structure is used for IMC_GETCANDIDATEPOS and
IMC_SETCANDIDATEPOS messages.
typedef tagCANDIDATEFORM { //
// IMC_GETCANDIDATEPOS IMC_SETCANDIDATEPOS
DWORD dwIndex; //
DWORD dwStyle; // :
//=CFS_CANDIDATEPOS
//=CFS_EXCLUDE
//=CFS_DEFAULT
POINT ptCurrentPos; //
REC rcArea; //
} CANDIDATEFORM;
8、STYLEBUF
typedef struct tagSTYLEBUF { //
DWORD dwStyle;
TCHAR szDes cription[32]
} STYLEBUF;
9、SOFTKBDDATA
typedef struct tagSOFTKBDDATA { //
UINT uCount; // ( 1,2, SHIFT 2, : SHIFT, SHIFT)
WORD wCode[][256] //
} SOFTKBDDATA;
10、RECONVERTSTRING
typedef struct _tagRECONVERTSTRING { // W98 2000
DWOPD dwSize;
DWORD dwVersion;
DWORD dwStrLen;
DWORD dwStrOffset;
DWORD dwCompStrLen;
DWORD dwCompStrOffset;
DWORD dwTargetStrLen;
DWORD dwTargetStrOffset;
} RECONVERTSTRING;
11、IMEMENUITEMINFO
typedef _tagIMEMENUITEMINFO { // ,W98/2000
UINT cbSize;
UINT fType;
UINT fState;
UINT wID;
HBITMAP hbmpChecked;
HBITMAP hbmpUnchecked;
DWORD dwItemData;
TCHAR szString[48];
HBITMAP hbmpItem;
}
12、INPUTCONTEXT
The INPUTCONTEXT structure is an internal data structure that stores Input
Context data.
typedef struct tagINPUTCONTEXT { //IMC
HWND hWnd; // IMC
BOOL fOpen; //IME
POINT ptStatusWndPos; //
POINT ptSoftKbdPos; //
DWORD fdwConversion; //IME ( 、 , )
DWORD fdwSentence; //
union {
LOGFONTA A;
LOGFONTW W;
} lfFont; //
COMPOSITIONFORM cfCompForm; //
CANDIDATEFORM cfCandForm[4]; //
HIMCC hCompStr; //
HIMCC hCandInfo;
HIMCC hGuideLine
HIMCC hPrivate;
DWORD dwNumMsgBuf; // hMsgBuf
HIMCC hMsgBuf; // , : [ 1] [wParam1] [lParam1] {[ ] [wParam2] [lParam2]...
// :
DWORD fdwInit //
//=INIT_STATUSWNDPOS ptStatusWndPos
//=INIT_CONVERSION fdwConversion
//=INIT_SENTENCE fdwSentence
//=INIT_LOGFONT lfFont
//=INIT_COMPFORM cfCompForm
//=INIT_SOFTKBDPOS ptSoftKbdPos
DWORD dwReserve[3]; //
} INPUTCONTEXT;
UI 창 에서 다음 windows 메 시 지 를 처리 해 야 합 니 다.
1、WM_IME_SETCONTEXT
활성화 또는 휴면 입력 법
LRESULT CALLBACK UIWndProc(HWND hUIWnd,UINT uMsg,WPARAM wParam,LPARAM lParam)
{
:
case WM_IME_SETCONTEXT:
fSet= (BOOL) wParam;
lISCBits = lParam;
}
fSet 이 TRUE 이면 시스템 은 현재 입력 법의 한 창 (상태 창, 목록 창 등) 을 활성화 하고 FALSE 일 때 현재 입력 법 을 휴면 합 니 다.
그 중에서 lISCBits 에서 어떤 창 을 작 동 하 는 지 알려 줍 니 다.
수치 적 의미
ISC SHOWUICOMPOSITIOnWINDOW 디 스 플레이 인 코딩 창
ISC SHOWUIGUIDWINDOW 정보 창 표시
ISC SHOWUICANDIDATEWINDOW 0 번 목록 창 표시
(ISC SHOWUICANDIDATEWINDOW < < 1) 1 번 목록 창 을 표시 합 니 다.
(ISC SHOWUICANDIDATEWINDOW < < < 2) 2 번 목록 창 을 표시 합 니 다.
(ISC SHOWUICANDIDATEWINDOW < < < 3) 3 번 목록 창 을 표시 합 니 다.
2、WM_IME_CONTROL
현재 입력 관리
wSubMessage = wParam; WM IME CONTROL 에 의 해 제 어 된 메시지
lpData = (LPVOID) lParam; 대응 하 는 데이터
그 중성자 소식 은 다음 과 같은 소식 이 있다.
1)IMC_GETCANDIDATEPOS
목록 창의 위 치 를 가 져 옵 니 다. 이 때 lParam 은 CANDIDATEFORM 구조 주 소 를 전송 합 니 다.
만약 이 소식 이 0 으로 성공 적 으로 돌아간다 면, 그렇지 않 으 면 0 이 아니다.
보통 이 부분 을 설계 하면 0 으로 돌아 갑 니 다. 그렇지 않 으 면 1 로 돌아 갑 니 다.
2)IMC_GETCOMPOSITONFONT
인 코딩 창 글꼴 구 조 를 가 져 옵 니 다. lParam 은 LOGFONT 구조 주소 입 니 다.
만약 이 소식 이 0 으로 성공 적 으로 돌아간다 면, 그렇지 않 으 면 0 이 아니다.
보통 이 부분 을 설계 하면 0 으로 돌아 갑 니 다. 그렇지 않 으 면 1 로 돌아 갑 니 다.
3)IMC_GETCOMPOSITONWINDOW
인 코딩 창 위 치 를 가 져 옵 니 다. lParam 은 COMPOSTIONFORM 구조 주소 입 니 다.
만약 이 소식 이 0 으로 성공 적 으로 돌아간다 면, 그렇지 않 으 면 0 이 아니다.
보통 이 부분 을 설계 하면 0 으로 돌아 갑 니 다. 그렇지 않 으 면 1 로 돌아 갑 니 다.
4)IMC_GETSOFTKBDFONT
소프트 키보드 글꼴 을 가 져 옵 니 다. lParam 글꼴 구조의 LOGFONT 주소 입 니 다.
5)IMC_GETSOFTKBDPOS
소프트 키보드 위치 가 져 오기, lParam = 0;
화면 창 에 있 는 소프트 키보드 의 좌표 구조 POINTS 를 되 돌려 줍 니 다.
6)IMC_GETSOFTKBDSUBTYPE
wSubMessage= IMC_GETSOFTKBDSUBTYPE;
lParam = 0;
7)IMC_GETSTATUSWINDOWPOS
상태 창 위치 가 져 오기
wSubMessage= IMC_GETSTATUSWINDOWPOS;
lParam = 0;
상태 창 좌표 원점 이 화면 창 에 있 는 좌표 구조 POINTS 를 되 돌려 줍 니 다.
8)IMC_SETCANDIDATEPOS
wSubMessage= IMC_SETCANDIDATEPOS;
lpCANDIDATEFORM= (LPCANDIDATEFORM) lParam;
목록 창의 위 치 를 설정 합 니 다. 이 때 lParam 은 CANDIDATEFORM 구조 주 소 를 전송 합 니 다.
만약 이 소식 이 0 으로 성공 적 으로 돌아간다 면, 그렇지 않 으 면 0 이 아니다.
메모: UI 창 에서 이 메 시 지 를 받 아들 이지 않 습 니 다. 관리 함 수 는 NotifyIME 입 니 다.
9)IMC_SETCOMPOSITONFONT
인 코딩 창의 글꼴 을 설정 합 니 다. 이때 lParam 은 LOGFONT 구조 주 소 를 전송 합 니 다.
wSubMessage= IMC_SETCOMPOSITIONFONT;
lpLogFont= (LPLOGFONT) lParam;
메모: UI 창 에서 이 메 시 지 를 받 아들 이지 않 습 니 다. 관리 함 수 는 NotifyIME 입 니 다.
10)IMC_SETCOMPOSITONWINDOW
인 코딩 창 속성 을 설정 합 니 다. 이때 lParam 은 COMPOSTIONFORM 구조 주 소 를 전송 합 니 다.
wSubMessage= IMC_SETCOMPOSITIONWINDOW;
lpCOMPOSITIONFORM= (LPCOMPOSITIONFORM) lParam;
만약 이 소식 이 0 으로 성공 적 으로 돌아간다 면, 그렇지 않 으 면 0 이 아니다.
메모: UI 창 에서 이 메 시 지 를 받 아들 이지 않 습 니 다. 관리 함 수 는 NotifyIME 입 니 다.
11)IMC_SETSOFTKBDDATA
소프트 키보드 데 이 터 를 설정 합 니 다. 이때 lParam 은 SOFTKBDATA 구조 주 소 를 전송 하고 사용 자 는 자신의 소프트 키보드 문 자 를 설정 합 니 다.
wSubMessage= IMC_SETSOFTKBDDATA;
lpSoftKbdData= (LPSOFTKBDDATA) lParam;
만약 이 소식 이 0 으로 성공 적 으로 돌아간다 면, 그렇지 않 으 면 0 이 아니다.
메모: UI 창 에서 이 메 시 지 를 받 아들 이지 않 습 니 다. 관리 함 수 는 NotifyIME 입 니 다.
12)IMC_SETSOFTKBDSUBTYPE
소프트 키보드 형식 설정
wSubMessage= IMC_SETSOFTKBDSUBTYPE;
lSubType= lParam;
subtype 을 성공 적 으로 되 돌려 줍 니 다. 그렇지 않 으 면 되 돌려 줍 니 다. - 1.
메모: UI 창 에서 이 메 시 지 를 받 아들 이지 않 습 니 다. 관리 함 수 는 NotifyIME 입 니 다.
13)IMC_SETSOFTKBDFONT
소프트 키보드 글꼴 을 설정 합 니 다. 이때 lParam 은 LOGFONT 구조 주 소 를 전송 합 니 다.
wSubMessage= IMC_SETSOFTKBDFONT;
lpLogFont= (LPLOGFONT)lParam;
만약 이 소식 이 0 으로 성공 적 으로 돌아간다 면, 그렇지 않 으 면 0 이 아니다.
메모: UI 창 에서 이 메 시 지 를 받 아들 이지 않 습 니 다. 관리 함 수 는 NotifyIME 입 니 다.
14)IMC_SETSOFTKBDPOS
소프트웨어 위 치 를 설정 합 니 다. 이때 lParam 은 POINTS 구 조 를 전송 합 니 다.
wSubMessage= IMC_SETSOFTKBDPOS;
ptsPt= (POINTS)lParam;
만약 이 소식 이 0 으로 성공 적 으로 돌아간다 면, 그렇지 않 으 면 0 이 아니다.
15)IMC_SETSTATUSWINDOWPOS
상태 창 위 치 를 설정 합 니 다. 이때 lParam 은 POINTS 구 조 를 전송 합 니 다.
wSubMessage= IMC_SETSTATUSWINDOWPOS;
ptsPt= (POINTS)lParam;
만약 이 소식 이 0 으로 성공 적 으로 돌아간다 면, 그렇지 않 으 면 0 이 아니다.
3、WM_IME_COMPOSITION
사용자 가 인 코딩 상 태 를 바 꾸 었 을 때 이 메 시 지 를 보 냅 니 다 WM IME COMPOSITION
응용 프로그램 은 ImgGetCompositionString 을 호출 하여 새로운 인 코딩 상 태 를 가 져 올 수 있 습 니 다.
wChar = wParam; 마지막 으로 인 코딩 창 에 입력 한 2 바이트 의 DBCS 문자
lAttribute = lParam; 현재 인 코딩 의 의미.
lAttribute 는 다음 과 같은 조합 을 취 할 수 있 습 니 다.
값 의 의미
GCR ERRORSTR 수정 오류
GCR INFORMATIONSTR 수정 정보 문자열
GCS COMPATTR 인 코딩 문자열 속성 을 수정 합 니 다.
GCS COMPCLAUSE 인 코딩 정보 수정.
GCS COMPREADATTR 읽 기 문자열 의 속성 수정
GCS COMPREADCLAUSE 읽 기 문자열 의 속성 을 수정 합 니 다.
GCS COMPREADSTR 수정 읽 기 문자열 입 니 다.
GCS COMPSTR 현재 인 코딩 수정
GCS CURSORPOS 는 현재 인 코딩 된 커서 위 치 를 수정 합 니 다.
GCS DELTASTART 현재 인 코딩 의 시작 위 치 를 수정 합 니 다.
GCS RESULTCLAUSE 수정 결과 문자열 의 정보.
GCS RESULTREADCLAUSE 에서 읽 기 문자열 의 정 보 를 수정 합 니 다.
GCS RESULTREADSTR 수정 읽 기 문자열.
GCS RESULTSTR 인 코딩 결과 문자열 수정.
CS INSERTCHAR 현재 위치 에 문자 삽입
CS NOMOVECARET 교체 결과 문자열
4、WM_IME_COMPOSITIONFULL
사용자 인터페이스 창 이 인 코딩 창의 사 이 즈 를 늘 릴 수 없 을 때 ime 사용자 인터페이스 창 은 WM IME COMPOSITIOnfULL 메 시 지 를 보 냅 니 다. 처리 하지 않 을 수 있 습 니 다.
wParam = 0
lParam= 0
5、WM_IME_ENDCOMPOSITION
인 코딩 이 끝 났 을 때 ime 에서 이 메 시 지 를 보 냅 니 다 WM IME ENDCOMPOSITION
wParam = 0
lParam= 0
사용자 프로그램 은 사용자 가 입력 한 인 코딩 을 표시 할 수 있 도록 이 메 시 지 를 받 아들 일 수 있 습 니 다.
6、WM_IME_SELECT
시스템 은 새로운 ime 를 선택 할 수 있 도록 WM IME SELECT 를 보 냅 니 다.
fSelect = (BOOL) wParam; TRUE 는 새로운 IME 가 선택 되 었 음 을 표시 하고, FALSE 는 이 입력 법 을 선택 하거나 닫 지 않 음 을 표시 합 니 다.
hKL= lParam;
시스템 은 이 메 시 지 를 이용 하여 오래된 입력 법 사용자 창 을 만 들 거나 닫 습 니 다.
7、WM_IME_STARTCOMPOSITION
사용자 가 인 코딩 을 입력 하기 시 작 했 을 때 시스템 은 즉시 이 메 시 지 를 IME 로 보 내 고 IME 는 인 코딩 창 을 엽 니 다.
wParam = 0
lParam= 0
8、WM_IME_NOTIFY
IME 메시지 그룹:
wSubMessage= wParam;
lParam= lParam;
각 소식 설명:
1)IMN_CLOSESTATUSWINDOW
상태 창 을 닫 을 때 시스템 은 IMN CLOSESTATUSWINDOW 메 시 지 를 보 냅 니 다.
wSubMessage = IMN_CLOSESTATUSWINDOW;
lParam= 0;
사용자 인터페이스 창 이 이 메 시 지 를 받 을 때 상태 창 을 닫 습 니 다.
2)IMN_OPENSTATUSWINDOW
상태 창 생 성 또는 열기
wSubMessage = IMN_OPENSTATUSWINDOW;
lParam= 0;
ime 가 이 메 시 지 를 받 을 때 상태 창 이 생 깁 니 다.
상태 직렬 포트 에 대한 정 보 는 ImmGetConversionStatus 로 얻 을 수 있 으 며, 상태 창 을 설정 한 정 보 는 ImmSetConversionStatus 로 얻 을 수 있 습 니 다.
3)IMN_OPENCANDIDATE
목록 선택 창 열기 또는 생 성
wSubMessage = IMN_OPENCANDIDATE;
lCandidateList= lParam;
4)IMN_CHANGECANDIDATE
현재 목록 선택 창 업데이트
WM_IME_NOTIFY
wSubMessage = IMN_CHANGECANDIDATE;
lCandidateList= lParam;
5)IMN_CLOSECANDIDATE
선택 창 닫 기
wSubMessage = IMN_CLOSECANDIDATE;
lCandidateList= lParam;
UI 창 에서 이 메 시 지 를 받 으 면 목록 을 지우 고 창 을 선택 합 니 다.
IMN_SETCONVERSIONMODE
입력 법 상태 변경 모드 관리
wSubMessage = IMN_SETCONVERSIONMODE;
lParam= 0;
IMN_SETOPENSTATUS
입력 상태 설정
wSubMessage = IMN_SETOPENSTATUS;
lParam= 0;
IMN_SETCANDIDATEPOS
목록 창 위치 설정
wSubMessage = IMN_SETCANDIDATEPOS;
lCandidateList= lParam;
Parameters
IMN_SETCOMPOSITIONFONT
인 코딩 창 글꼴 설정
wSubMessage = IMN_SETCOMPOSITIONFONT;
lParam= 0;
IMN_SETCOMPOSITIONWINDOW
인 코딩 창 설정
wSubMessage = IMN_SETCOMPOSITIONWINDOW;
lParam= 0;
IMN_GUIDELINE
오류 정보 처리
wSubMessage = IMN_GUIDELINE;
lParam= 0;
IMN_SOFTKBDDESTROYED
소프트 키보드 닫 기
wSubMessage = IMN_SOFTKBDDESTROYED;
lParam= 0;
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
정수 반전Udemy 에서 공부 한 것을 중얼거린다 Chapter3【Integer Reversal】 (예) 문자열로 숫자를 반전 (toString, split, reverse, join) 인수의 수치 (n)가 0보다 위 또는 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.