±×·³ ÀÌÁ¦ IME ¸Þ½ÃÁö¸¦ È°¿ëÇÏ¿© Á¶¸³ÁßÀÎ ÇѱÛÀ» º¸¿©ÁÖ´Â ¿¹Á¦¸¦ ¸¸µé¾î º¸µµ·Ï ÇÏÀÚ. ¸Þ¸ðÀå¿¡¼ »ç¿ëÇÏ°í ÀÖ´Â ¿¡µðÆ® ÄÁÆ®·ÑÀ» óÀ½ºÎÅÍ ÀÛ¼ºÇÑ´Ù°í »ý°¢ÇÏ¸é µÈ´Ù. ÀÌ ½Ç½ÀÀº »ý°¢º¸´Ù º¹ÀâÇϹǷΠ¹Ýµå½Ã ¼Ò½º¸¦ Á÷Á¢ ÀÔ·ÂÇØ °¡¸é¼ ¿Ö Àú·± Äڵ尡 ÇÊ¿äÇÒ±î °í¹ÎÀ» ÇØ º¼ ÇÊ¿ä°¡ ÀÖ´Ù. ±×·¸Áö ¾ÊÀ¸¸é °á°ú´Â º¼ ¼ö À־ µ¿ÀÛ¹æ½Ä¿¡ ´ëÇÑ ÀÌÇظ¦ ÇÒ ¼ö ¾ø±â ¶§¹®¿¡ ÀÀ¿ëÀÌ ¾î·Á¿öÁø´Ù. ¹Ýµå½Ã ÄÄÆÄÀÏ·¯¸¦ ¶ç¿ö ³õ°í ½Ç½ÀÀ» °°ÀÌ Çغ¸µµ·Ï ÇÏÀÚ. ù ¹ø° ¿¹Á¦ÀÇ ¼Ò½º´Â ´ÙÀ½°ú °°´Ù. ²À ÇÊ¿äÇÑ Äڵ常 ³Ö¾úÀ¸¹Ç·Î ´ÙÇàÈ÷ ±×´ÙÁö ±æÁö ¾Ê´Ù.
Ime1À̶ó´Â À̸§À¸·Î »õ ÇÁ·ÎÁ§Æ®¸¦ »ý¼ºÇÏ°í ÀÌ ÇÁ·ÎÁ§Æ®¿¡ Ime1.cpp¸¦ Ãß°¡ÇÑ ÈÄ ´ÙÀ½ ¼Ò½º¸¦ ÀÔ·ÂÇÏ¸é µÈ´Ù. Á÷Á¢ ÀÔ·ÂÇϱⰡ ±ÍÂúÀ¸¸é CD-ROMÀÇ ¿¹Á¦¸¦ ¿¾î¼ º¹»çÇØ ¿Àµµ·Ï Ç쵂 ±×·¸´Ù°í ÇÏ´õ¶óµµ ÇÁ·ÎÁ§Æ®´Â ¹Ýµå½Ã Á÷Á¢ ¸¸µé¾î º¸±â ¹Ù¶õ´Ù. imm32.lib¿Í ¿¬°áÇÏ´Â °ÍÀ» ÀØÁö ¸»µµ·Ï ÇÏÀÚ.
#include <windows.h>
LRESULT CALLBACK WndProc(HWND,UINT,WPARAM,LPARAM);
HINSTANCE g_hInst;
HWND hWndMain;
LPCTSTR lpszClass=TEXT("Ime1");
int APIENTRY WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance
,LPSTR lpszCmdParam,int nCmdShow)
{
HWND hWnd;
MSG Message;
WNDCLASS WndClass;
g_hInst=hInstance;
WndClass.cbClsExtra=0;
WndClass.cbWndExtra=0;
WndClass.hbrBackground=(HBRUSH)(COLOR_WINDOW+1);
WndClass.hCursor=LoadCursor(NULL,IDC_IBEAM);
WndClass.hIcon=LoadIcon(NULL,IDI_APPLICATION);
WndClass.hInstance=hInstance;
WndClass.lpfnWndProc=(WNDPROC)WndProc;
WndClass.lpszClassName=lpszClass;
WndClass.lpszMenuName=NULL;
WndClass.style=CS_HREDRAW | CS_VREDRAW;
RegisterClass(&WndClass);
hWnd=CreateWindow(lpszClass,lpszClass,WS_OVERLAPPEDWINDOW,
CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT,
NULL,(HMENU)NULL,hInstance,NULL);
ShowWindow(hWnd,nCmdShow);
hWndMain=hWnd;
while(GetMessage(&Message,0,0,0)) {
TranslateMessage(&Message);
DispatchMessage(&Message);
}
return (int)Message.wParam;
}
#include <imm.h>
TCHAR *buf;
BOOL bComp;
LRESULT CALLBACK WndProc(HWND hWnd,UINT iMessage,WPARAM wParam,LPARAM lParam)
{
HDC hdc;
PAINTSTRUCT ps;
HIMC hImc;
TCHAR szChar[3], *szComp;
int i;
int len;
switch(iMessage) {
case WM_CREATE:
bComp=FALSE;
buf=(TCHAR *)malloc(65536);
memset(buf,0,65536);
return 0;
case WM_CHAR:
szChar[0]=(BYTE)wParam;
szChar[1]=0;
for (i=0;i<LOWORD(lParam);i++) {
lstrcat(buf,szChar);
}
bComp=FALSE;
InvalidateRect(hWnd,NULL,TRUE);
return 0;
case WM_IME_COMPOSITION:
if (lParam & GCS_COMPSTR) {
hImc=ImmGetContext(hWnd);
len=ImmGetCompositionString(hImc,GCS_COMPSTR,NULL,0);
szComp=(TCHAR *)malloc(len+1);
ImmGetCompositionString(hImc,GCS_COMPSTR,szComp,len);
szComp[len]=0;
if (bComp) {
buf[lstrlen(buf)-2]=0;
}
if (len == 0) {
bComp=FALSE;
} else {
bComp=TRUE;
}
lstrcat(buf,szComp);
ImmReleaseContext(hWnd,hImc);
free(szComp);
InvalidateRect(hWnd,NULL,TRUE);
}
break;
case WM_IME_CHAR:
if (IsDBCSLeadByte((BYTE)(wParam >> 8))) {
szChar[0]=HIBYTE(LOWORD(wParam));
szChar[1]=LOBYTE(LOWORD(wParam));
szChar[2]=0;
} else {
szChar[0]=(BYTE)wParam;
szChar[1]=0;
}
if (bComp) {
buf[lstrlen(buf)-2]=0;
}
lstrcat(buf,szChar);
bComp=FALSE;
InvalidateRect(hWnd,NULL,TRUE);
return 0;
case WM_PAINT:
hdc=BeginPaint(hWnd,&ps);
TextOut(hdc,0,0,buf,lstrlen(buf));
EndPaint(hWnd,&ps);
return 0;
case WM_DESTROY:
PostQuitMessage(0);
free(buf);
return 0;
}
return(DefWindowProc(hWnd,iMessage,wParam,lParam));
}
ÀÌ ¿¹Á¦´Â µÎ °³ÀÇ Àü¿ªº¯¼ö¸¦ ¼±¾ðÇÏ°í ÀÖ´Ù. buf´Â ÀÔ·ÂµÈ ¹®ÀÚ¿À» ÀúÀåÇÒ ¹öÆÛÀε¥ WM_CREATE¿¡¼ 65536Å©±â(64KB)·Î ÇÒ´çÇÏ¿´À¸¸ç ³»¿ëÀ» ¸ðµÎ 0À¸·Î ÃʱâÈÇÏ¿´´Ù. ´õ Å« ¹®¼¸¦ ÆíÁýÇÏ°íÀÚ ÇÑ´Ù¸é º°µµÀÇ ¸Þ¸ð¸®°ü¸®°¡ ÇÊ¿äÇÏ°ÚÁö¸¸ °£´ÜÇÑ ¿¹Á¦À̹ǷΠÀÏ´Ü ÀÌ Á¤µµ Å©±â¸é ÃæºÐÇÏ´Ù. bComp º¯¼ö´Â ÇöÀç ÇѱÛÀÌ Á¶¸³ÁßÀΰ¡ ¾Æ´Ñ°¡¸¦ ±â¾ïÇϴµ¥ ÀÌ °ªÀÌ TRUEÀ̸é ÇѱÛÀ» Á¶¸³ÇÏ°í ÀÖ´Â ÁßÀÌ°í FALSEÀ̸é Á¶¸³ÀÌ ¿Ï·áµÇ¾ú°Å³ª ¿µ¹®À» ÀÔ·ÂÇÏ°í ÀÖ´Â ÁßÀÌ´Ù. ÀÌ º¯¼ö´Â ¹®ÀÚÀÔ·ÂÁß¿¡ ¼ö½Ã·Î Âü°íÇÏ°í °ü¸®ÇØ¾ß ÇÏ´Â ¾ÆÁÖ Áß¿äÇÑ º¯¼öÀÌ´Ù. ÃÖÃÊ ½ÇÇàµÉ ¶§´Â ÇѱÛÁ¶¸³ÁßÀÌ ¾Æ´Ï¹Ç·Î WM_CREATE¿¡¼ FALSE·Î ÃʱâÈÇÑ´Ù.
WndProc¿¡¼´Â ¿©¼¸ °³ÀÇ ¸Þ½ÃÁö¸¦ ó¸®Çϴµ¥ WM_CREATE´Â ¹öÆÛ ÇÒ´ç ¹× Ãʱâȸ¦ ÇÏ°í WM_PAINT´Â ¹öÆÛÀÇ ³»¿ëÀ» ȸéÀ¸·Î ¹«Á¶°Ç Ãâ·ÂÇÑ´Ù. WM_DESTROY´Â ¹öÆÛ¸¦ ÇØÁ¦ÇÏ°í ÇÁ·Î±×·¥À» Á¾·áÇÏ´Â ÀÏÀ» Çϴµ¥ ¼¼ ¸Þ½ÃÁö´Â ¾ÆÁÖ ÆòÀÌÇϹǷΠº°´Ù¸¥ °ü½ÉÀ» º¸ÀÏ ÇÊ¿ä°¡ ¾ø´Ù. ÀÌ ÇÁ·Î±×·¥ÀÌ ¹®ÀÚÀÔ·ÂÀ» À§ÇØ Ã³¸®ÇÏ´Â ¸Þ½ÃÁö´Â ¼¼ °¡Áö»ÓÀÌ´Ù. ¸ÕÀú °¡Àå ½¬¿î WM_CHAR ¸Þ½ÃÁöÀÇ Äڵ带 ºÐ¼®Çغ¸ÀÚ. ÀÌ ¸Þ½ÃÁö´Â ÇѱÛÀÌ ¾Æ´Ñ ¿µ¹®, ¼ýÀÚ¸¦ ÀÔ·ÂÇÒ ¶§¸¸ ¹ß»ýÇϴµ¥ wParamÀº Ç×»ó 1¹ÙÀÌÆ®ÀÌ´Ù.
wParamÀ¸·Î Àü´ÞµÈ ¹®ÀÚÄڵ带 ¹öÆÛ µÚ¿¡ ºÙÀ̱⸸ ÇÏ¸é µÇ´Âµ¥ szChar ¹öÆÛ¿¡ ±æÀÌ 1ÀÇ ¹®ÀÚ¿À» ¸¸µç ÈÄ buf µÚ¿¡ ÀÌ ¹®ÀÚ¿À» ´©Àû½ÃÄ×´Ù. ¹°·Ð wParam ¹®ÀÚ¸¦ bufÀÇ ³¡¿¡ ¹Ù·Î ´ëÀÔÇصµ º° »ó°üÀº ¾øÁö¸¸ ÀÏ°ü¼º°ú È®À强À» À§ÇØ Àӽà ¹®ÀÚ¿ ¹öÆÛ¸¦ »ç¿ëÇÏ¿´´Ù. LOWORD(lParam)Àº Å°ÀÔ·Â ¹Ýº¹È½¼öÀε¥ ÀÌ È½¼ö¸¸Å ¹®ÀÚ¸¦ ´©Àû½ÃŲ´Ù. Åë»ó ¹Ýº¹È½¼ö´Â 1À̹ǷΠ¹«½ÃÇصµ º° »ó°üÀº ¾øÁö¸¸ ¿¹Á¦ÀÇ ¿Ï¼ºµµ¸¦ ³ôÀ̱â À§ÇØ ÀÏ´Ü Æ÷ÇÔ½ÃÄ×´Ù.
¿µ¹®, ¼ýÀÚ°¡ ÀԷµǾú´Ù´Â °ÍÀº ÇѱÛÁ¶¸³ÁßÀÌ ¾Æ´Ï¶ó´Â ¶æÀ̹ǷΠbComp º¯¼ö´Â FALSE·Î ¹Ù²Û´Ù. ¹®ÀÚ¸¦ ¹öÆÛ¿¡ ´©Àû½ÃŲ ÈÄ È¸éÀ» ¹«È¿ÈÇÏ¿© ´Ù½Ã ±×¸®µµ·Ï Çϸé ÀÔ·ÂµÈ ¹®ÀÚ°¡ º¸ÀÏ °ÍÀÌ´Ù. ¿©±â±îÁö´Â DefIme ¿¹Á¦¿Íµµ °ÅÀÇ µ¿ÀÏÇÏ´Ù.
ÀÌ ¿¹Á¦ÀÇ °¡Àå ¾î·Á¿î ºÎºÐÀº WM_IME_COMPOSITION ¸Þ½ÃÁö ó¸® ºÎºÐÀε¥ ÀÌ ¸Þ½ÃÁö´Â ÇѱÛÀ» Á¶¸³ÁßÀÏ ¶§, ¶Ç´Â Á¶¸³ÁßÀÎ ¹®ÀÚ°¡ ¿Ï¼ºµÉ ¶§ º¸³»Áø´Ù. Á¶¸³ÁßÀÎ ¹®ÀÚ¸¸ ó¸®Çϱâ À§ÇØ lParam¿¡ GCS_COMPSTR Ç÷¡±×°¡ ¼³Á¤µÈ °æ¿ì¸¸ ó¸®ÇÏ¸ç ±× ¿ÜÀÇ °æ¿ì´Â DefWindowProcÀ¸·Î 󸮸¦ ³Ñ°Ü µðÆúÆ® 󸮵ǵµ·Ï ÇÏ¿´´Ù. Á¶¸³ÁßÀÎ ¹®ÀÚ¸¦ º¸¿©ÁÖ·Á¸é ¸ÕÀú Á¶¸³µÈ ¹®ÀÚÀÇ Äڵ带 ±¸ÇØ¾ß ÇÑ´Ù. À̶§´Â ´ÙÀ½ ÇÔ¼ö¸¦ »ç¿ëÇÑ´Ù.
LONG ImmGetCompositionString(HIMC hIMC, DWORD dwIndex, LPVOID lpBuf, DWORD dwBufLen);
ù ¹ø° Àμö hIMC´Â ÀÔ·Â ÄÁÅؽºÆ®ÀÇ ÇÚµéÀε¥, ImmGetContext ÇÔ¼ö·Î ±¸ÇÑ ÇÚµéÀ» Àü´ÞÇÏ¸é µÈ´Ù. µÎ ¹ø° Àμö dwIndex´Â ±¸ÇÏ°íÀÚ ÇÏ´Â Á¤º¸¸¦ ÁöÁ¤Çϴµ¥, GCS_COMPSTRÀ̸é Á¶¸³ÁßÀÎ ¹®ÀÚÄڵ带 ±¸Çϸç, GCS_RESULTSTRÀÌ¸é ¿Ï¼ºµÈ ¹®ÀÚÄڵ带 ±¸ÇÑ´Ù. Á¶»çµÈ Á¤º¸´Â ¼¼ ¹ø° Àμö lpBuf¿¡ ¸®ÅϵȴÙ. ³× ¹ø° Àμö dwBufLenÀº lpBufÀÇ ±æÀ̸¦ ÁöÁ¤Ç쵂 ´Ü ÀÌ °ªÀÌ 0ÀÌ¸é ½ÇÁ¦ Á¤º¸¸¦ ±¸ÇÏ´Â °ÍÀÌ ¾Æ´Ï¶ó ÇÊ¿äÇÑ ¹öÆÛÀÇ Å©±â¸¦ ¸®ÅÏÇÑ´Ù. ±×·¡¼ Á¶¸³ÁßÀÎ ¹®ÀÚ¸¦ ±¸ÇÒ ¶§´Â ´ÙÀ½°ú °°ÀÌ Äڵ带 ÀÛ¼ºÇÏ´Â °ÍÀÌ ¿øÄ¢ÀÌ´Ù.
TCHAR *szComp;
int len;
len=ImmGetCompositionString(hImc,GCS_COMPSTR,NULL,0);
szComp=(TCHAR *)malloc(len+1);
ImmGetCompositionString(hImc,GCS_COMPSTR,szComp,len);
szComp[len]=0;
// Á¶»çÇÑ Á¤º¸ »ç¿ë
free(szComp);
lpBufÀμö¿¡ NULLÀ» ÁÖ°í ÀÌ ¹öÆÛÀÇ ±æÀ̸¦ 0À¸·Î ÁöÁ¤ÇÏ¿© ÇÊ¿äÇÑ ¹öÆÛ Å©±â¸¦ ¸ÕÀú ±¸ÇÑ´Ù. ±×¸®°í Á¶»çµÈ Å©±â¿¡ ³Î¹®ÀÚ¸¦ À§ÇÑ 1À» ´õÇÑ ¸¸Å ¸Þ¸ð¸®¸¦ ÇÒ´çÇÑ ÈÄ ´Ù½Ã ÀÌ ÇÔ¼ö¸¦ È£ÃâÇÏ¿© ¿øÇÏ´Â Äڵ带 Á¶»çÇÏ¿´´Ù. À̶§ ImmGetComposition ÇÔ¼ö´Â ½ÇÁ¦·Î Á¶»çµÈ ¹ÙÀÌÆ® ¼ö¸¦ ¸®ÅÏÇÑ´Ù. ¹°·Ð ÇÒ´çÇÑ ¸Þ¸ð¸®´Â Á¤º¸¸¦ »ç¿ëÇÑ ÈÄ ÇØÁ¦ÇØ¾ß ÇÑ´Ù.
ÇѱÛÀÇ °æ¿ì ÇÑ À½ÀýÀº ¹«Á¶°Ç 2¹ÙÀÌÆ®À̹ǷΠ±»ÀÌ ÀÌ·± ¹ø°Å·Î¿î ¹æ¹ýÀ» ¾µ ÇÊ¿ä¾øÀÌ °ø¹é°ú ³Î¹®ÀÚÀÇ ±æÀ̱îÁö °í·ÁÇÑ 4¹ÙÀÌÆ® Å©±âÀÇ °íÁ¤ ±æÀÌ ¹öÆÛ¸¦ »ç¿ëÇϸé ÃæºÐÇÏ´Ù. ÇÏÁö¸¸ Á¶»çµÇ´Â Á¤º¸ÀÇ ±æÀÌ°¡ °¡º¯ÀûÀ̶ó¸é µ¿ÀûÀ¸·Î ¸Þ¸ð¸®¸¦ ÇÒ´çÇÏ´Â ¹æ¹ýÀÌ ¿øÄ¢ÀûÀ¸·Î ¿ÇÀº ¹æ¹ýÀ̸ç ÀÌ·¸°Ô ¸Þ¸ð¸®¸¦ ÇÒ´çÇÑ ÈÄ »ç¿ëÇÏ´õ¶óµµ ½ÇÇà½Ã°£ÀÇ ³¶ºñ´Â °ÅÀÇ ¾ø´Ù.
Á¶¸³ÁßÀÎ ¹®ÀÚÀÇ Äڵ带 ±¸ÇÑ ÈÄ buf ³¡¿¡ ´©Àû½ÃÅ°µÇ ¹«Á¶°Ç µ¡ºÙ¿©¼´Â ¾ÈµÈ´Ù. ÀÌ ¸Þ½ÃÁö·Î Àü´ÞµÈ ÄÚµå´Â ¿Ï¼ºµÈ ¹®ÀÚ°¡ ¾Æ´Ï¹Ç·Î ÀÌÀüÀÇ Á¶¸³ÁßÀÎ ¹®ÀÚ¸¦ ¸ÕÀú Á¦°ÅÇÑ ÈÄ ¹öÆÛ¿¡ ºÙ¿©¾ß ÇÑ´Ù. ¿¹¸¦ µé¾î ¡®ÇÏ¡¯ÀÚ°¡ ÀÔ·ÂµÈ »óÅ¿¡¼ ¤¤À» ÀÔ·ÂÇÏ¸é ¡®ÇÑ¡¯ÀÚ°¡ µÇ´Âµ¥ ÀÌ·¸°Ô µÇ·Á¸é ¡®ÇÏ¡¯ÀÚ¸¦ ¸ÕÀú Á¦°ÅÇÏ°í ¡®ÇÑ¡¯ÀÚ¸¦ ºÙ¿©¾ß ÇÑ´Ù. Áï Á¶¸³ÁßÀÎ ¹®ÀÚ´Â ´©Àû½ÃÅ°´Â °ÍÀÌ ¾Æ´Ï¶ó ±³Ã¼ÇÏ´Â °ÍÀÌ´Ù.
±×·¡¼ bComp°¡ TRUEÀÎ °æ¿ì, Áï ÇѱÛÀ» Á¶¸³ÇÏ°í ÀÖÀ» ¶§´Â bufÀÇ µÚÂÊ 2¹ÙÀÌÆ®¸¦ Á¦°ÅÇÑ ÈÄ »õ Á¶¸³ Äڵ带 buf¿¡ ºÙ¿© ±âÁ¸ÀÇ Á¶¸³ÁßÀÎ Äڵ带 »õ ÄÚµå·Î ´ëüÇÑ´Ù. ¿¹Á¦¿¡¼ Á¶¸³ÁßÀÎ ¹®ÀÚ¸¦ Á¦°ÅÇÏ´Â ÄÚµåÀÎ buf[lstrlen(buf)-2]=0;À» ÁÖ¼®À¸·Î ó¸®ÇÑ ÈÄ ÇѱÛÀ» ÀÔ·ÂÇغ¸¸é ÀÌ Äڵ尡 ¿Ö ÇÊ¿äÇÑ°¡ ¾Ë ¼ö ÀÖÀ» °ÍÀÌ´Ù.
¡®´ëÇѹα¹¡¯À» ÀÔ·ÂÇߴµ¥ Á¶¸³ÁßÀÇ Àӽà ÄÚµå±îÁö ¸ðµÎ Ãâ·ÂµÇ¾î ¹ö·È´Ù. ÇѱÛÀº ¿µ¹®, ¼ýÀÚ¿Í´Â ´Þ¸® ÇϳªÀÇ Å°ÀÔ·ÂÀ¸·Î ÇÑ ¹®ÀÚ°¡ ¿Ï¼ºµÇÁö ¾Ê°í ¿¬¼ÓÀûÀ¸·Î µé¾î¿À´Â Å°·ÎºÎÅÍ Á¶¸³À» ÇØ ³ª°¡¹Ç·Î ¿Ï¼ºµÇ±â ÀüÀÇ ¹®ÀÚ´Â °è¼Ó ±³Ã¼µÇ¾î¾ß Çϸç ÃÖÁ¾ÀûÀ¸·Î ¿Ï¼ºµÈ ¹®ÀÚ¸¸ ¹öÆÛ¿¡ ºÙ¿©¾ß ÇÑ´Ù.
Á¶¸³ÁßÀÎ ¹®ÀÚ¸¦ ó¸®ÁßÀ̹ǷΠbComp´Â TRUE·Î º¯°æÇÏ¿© ¾ÆÁ÷ Á¶¸³ÁßÀÓÀ» ±â·ÏÇسõ¾Æ¾ß Çϴµ¥ Á¶¸³Áß¿¡µµ bComp¸¦ FALSE·Î º¯°æÇØ¾ß Çϴ Ư¼öÇÑ °æ¿ì°¡ ÀÖ´Ù. IME´Â Á¶¸³ÁßÀÎ ¹®ÀÚ¿¡ ´ëÇØ <BS>Å°·Î À½¼Ò¸¦ Áö¿ï ¼ö ÀÖµµ·Ï Çϴµ¥ ¸¸¾à <BS>·Î Áö¿ö ³ª°¡´Ù°¡ ÀÔ·ÂÇÑ ÇÑ À½ÀýÀ» ´Ù Áö¿ö¹ö¸®°Ô µÇ¸é À̶§´Â Á¶¸³ÀÌ Ãë¼ÒµÈ °ÍÀ̹ǷΠbComp¸¦ FALSE·Î º¯°æÇØ¾ß ÇÑ´Ù. ¿¹¸¦ µé¾î ¡®Çѱۡ¯±îÁö ÀÔ·ÂÇÑ ÈÄ ¡®ÇѶ󡯷Πº¯°æÇÏ·Á°í <BS>Å°¸¦ ´©¸¥´Ù°í Çغ¸ÀÚ.
BS¸¦ ¼¼ ¹ø ´·¯ ¡®±Û¡¯ÀÚ¸¦ ¿ÏÀüÈ÷ »èÁ¦ÇÑ ÈÄ ¡®¶ó¡¯ÀÚ¸¦ ÀÔ·ÂÇÏ·Á°í ÇÒ ¶§ bComp°¡ TRUE·Î µÇ¾î ÀÖÀ¸¸é ¾Õ¿¡ ÀÖ´Â ÀÌ¹Ì ¿Ï¼ºµÈ ¡®ÇÑ¡¯ÀÚ±îÁöµµ Á¶¸³ÁßÀÎ ¹®ÀÚ·Î Ãë±ÞÇÏ¿© »èÁ¦ÇØ ¹ö¸°´Ù. ±×·¡¼ BS·Î Á¶¸³ÀÌ Ãë¼ÒµÈ °æ¿ì´Â ´ÙÀ½ ÀÔ·ÂÀ» À§ÇØ Á¶¸³ÁßÀÓÀ» ÇØÁ¦Çϴ Ưº°ÇÑ Ã³¸®°¡ ÇÊ¿äÇÏ´Ù. ImmGetCompositionString ÇÔ¼ö·Î Á¶¸³ÁßÀÎ Äڵ带 Á¶»çÇÑ °á°ú ±× ±æÀÌ°¡ 0À̸é Á¶¸³µÇ´ø ¹®ÀÚ°¡ ¿ÏÀüÈ÷ »èÁ¦µÈ °ÍÀ̹ǷΠÀ̶§ bComp¸¦ FALSE·Î ¹Ù²Ù°í ±× ³ª¸ÓÁö °æ¿ì´Â bComp¸¦ TRUE·Î ¹Ù²Ù¸é µÈ´Ù. ÀÌ Äڵ尡 ¿Ö ÇÊ¿äÇÑÁö Á÷Á¢ º¸°í ½ÍÀ¸¸é bComp¸¦ ¹«Á¶°Ç TRUE·Î ¹Ù²Û ÈÄ Å×½ºÆ®Çغ¸¸é µÈ´Ù.
// if (len == 0) {
// bComp=FALSE;
// } else {
bComp=TRUE;
// }
À½ÀýÀ» ¿ÏÀüÈ÷ Áö¿ìÁö ¾ÊÀº »óÅ¿¡¼´Â º° »ó°üÀÌ ¾øÁö¸¸ ÇÑ À½ÀýÀ» »èÁ¦ÇÏ°í ´Ù½Ã ÀÔ·ÂÇÏ·Á°í ÇÏ¸é ¾ÕÂÊ ±ÛÀÚ°¡ ±úÁö°Ô µÈ´Ù. bComp °ª±îÁö º¯°æÇÑ ÈÄ¿¡´Â Á¶»çµÈ Á¶¸³ Äڵ带 buf¿¡ ºÙÀÌ°í ȸéÀ» ¹«È¿ÈÇÏ¿© Á¶¸³ÁßÀÎ ¹®ÀÚ¸¦ º¸¿©ÁÖµµ·Ï Çß´Ù. ÀÌ ¸Þ½ÃÁö¿¡¼ Á¶¸³ÁßÀÎ ¹®ÀÚ¸¦ ó¸®Çß´Ù°í Çؼ return 0;·Î ¸®ÅÏÇعö¸®¸é ¾ÈµÇ¸ç ¹Ýµå½Ã DefWindowProcÀ¸·Î º¸³»¾ß ÇÑ´Ù. ¿Ö³ÄÇϸé IMEµµ ÀÌ ¸Þ½ÃÁö¸¦ ¹Þ¾Æ¾ß¸¸ Á¶¸³ À©µµ¿ì¸¦ °»½ÅÇÒ ¼ö ÀÖÀ¸¸ç ÇÑ À½ÀýÀÌ ¿Ï¼ºµÉ ¶§ WM_IME_CHAR ¸Þ½ÃÁö°¡ º¸³»Áö±â ¶§¹®ÀÌ´Ù. ±×·¡¼ ÀÌ ¿¹Á¦ÀÇ WM_IME_COMPOSITION ¸Þ½ÃÁö´Â ó¸® ÈÄ break; ¹®À» »ç¿ëÇÏ°í ÀÖ´Ù.
WM_IME_CHAR ¸Þ½ÃÁö´Â ¹®ÀÚ°¡ ¿Ï¼ºµÉ ¶§ º¸³»Áø´Ù. ÀÌ ¸Þ½ÃÁö·Î´Â ÇÑ±Û Äڵ常 ¿À´Â °ÍÀÌ ¾Æ´Ï¶ó ÇѱÛÁ¶¸³ ÈÄ¿¡ °ð¹Ù·Î ÀԷµǴ °ø¹é, ¼ýÀÚ, ±âÈ£ µîÀÇ 1¹ÙÀÌÆ® Äڵ忡 ´ëÇؼµµ ¹ß»ýÇÑ´Ù. ¿¹¸¦ µé¾î ´ÙÀ½ ¹®ÀåÀ» ÀÔ·ÂÇß´Ù°í Çغ¸ÀÚ.
¡®´Â¡¯ ´ÙÀ½ÀÇ °ø¹é, ¡®ÄÅ¡¯ ´ÙÀ½ÀÇ 2, ¡®ÀÇ¡¯ ´ÙÀ½ÀÇ °ø¹é¿¡ ´ëÇؼµµ WM_IME_CHAR ¸Þ½ÃÁö°¡ ¹ß»ýÇÑ´Ù. 1¹ÙÀÌÆ® ¹®ÀÚµµ Àü´ÞµÉ ¼ö Àֱ⠶§¹®¿¡ wParamÀ¸·Î Àü´ÞµÈ Äڵ尡 DBCSÀÎÁö SBCSÀÎÁö Á¶»çÇÑ ÈÄ szChar¿¡ ¹®ÀÚ¿À» ¸ÕÀú ¸¸µé°í ÀÌ ¹®ÀÚ¿À» buf¿¡ ´©Àû½ÃÄÑ¾ß ÇÑ´Ù. À̶§µµ ¹°·Ð ÇѱÛÀ» Á¶¸³ÁßÀ̾úÀ¸¸é Á¶¸³ÁßÀÎ ¹®ÀÚ¸¦ ¸ÕÀú Á¦°ÅÇØ¾ß ÇÑ´Ù.
WM_IME_CHAR ¸Þ½ÃÁöÀÇ Á¦ÀÏ ³¡¿¡ ÀÖ´Â return 0;´Â Àý´ë·Î »ý·«ÇÒ ¼ö ¾ø´Ù. ÀÌ ¸Þ½ÃÁö¸¦ ó¸®ÇÑ ÈÄ ¸®ÅÏÇÏÁö ¾Ê°í DefWindowProcÀ¸·Î º¸³» ¹ö¸®¸é µðÆúÆ® 󸮿¡ ÀÇÇØ ¿Ï¼ºµÈ ÇÑ±Û ¹®ÀÚ¸¦ WM_CHAR·Îµµ º¸³»°Ô µÈ´Ù. ÀÌ·¸°Ô µÇ¸é ¿Ï¼ºµÈ ¹®ÀÚ¸¦ µÎ °÷¿¡¼ ó¸®ÇÏ°Ô µÇ¹Ç·Î ±×¾ß ¸»·Î ¾û¸ÁÁøâÀÌ µÉ °ÍÀÌ´Ù. return 0;¸¦ break;·Î ¹Ù²ã ³õ°í Å×½ºÆ®Çغ¸¸é ¾ó¸¶³ª ¾û¸ÁÀÌ µÇ´ÂÁö Á÷Á¢ È®ÀÎÇØ º¼ ¼ö ÀÖ´Ù. ÀÌ ¸Þ½ÃÁö¸¦ ó¸®ÇÑ ÈÄ return 0;¸¦ ÇÏ´Â °ÍÀº ¡®¿Ï¼º ¹®ÀÚ´Â ³»°¡ Àß Ã³¸®ÇßÀ¸´Ï ´õ ÀÌ»ó ½Å°æ¾²Áö ¸»¶ó¡¯´Â ¸íÈ®ÇÑ ÀÇ»ç Ç¥ÇöÀÌ´Ù. ±×·³ ÀÌÁ¦ ¿¹Á¦¸¦ ½ÇÇàÇغ¸°í Çѱ۰ú ¿µ¹®, ¼ýÀÚ µîÀ» ÀÔ·ÂÇغ¸ÀÚ.
Á¶¸³ÁßÀÎ ¹®ÀÚ¸¦ <BS>Å°·Î ¼öÁ¤ÇÒ ¼ö ÀÖÀ¸¸ç Èĺ¸ À©µµ¿ì¸¦ ÅëÇØ ÇÑÀÚ¸¦ ÀÔ·ÂÇÒ ¼öµµ ÀÖ´Ù. ÇÏÁö¸¸ ¾ÕÂÊÀ¸·Î À̵¿Çϰųª ÀÌ¹Ì ¿Ï¼ºÇÑ ¹®ÀÚ¸¦ »èÁ¦ÇÏ´Â °ÍÀº ¾ÆÁ÷ ¾ÈµÈ´Ù. ÀÌ·± 󸮴 Á» ´õ ¸¹Àº Äڵ带 ÀÛ¼ºÇØ¾ß °¡´ÉÇÏ´Ù.
Ime1 ¿¹Á¦´Â ªÀº ±æÀÌ¿¡ ºñÇØ ±²ÀåÈ÷ ¸¹Àº Àǹ̸¦ °¡Áö°í ÀÖ´Ù. ÅؽºÆ® ÆíÁý±â¸¦ ¸¸µå´Â ù°ÉÀ½¿¡ ÇØ´çÇÏ´Â Áß¿äÇÑ ¿¹Á¦À̸ç Ä¿½ºÅÒÄÁÆ®·ÑÀ̳ª ¿öµåÇÁ·Î¼¼¼¸¦ ¸¸µé´õ¶óµµ ÀÌ ¿¹Á¦¿¡ ´ëÇÑ Á¤È®ÇÑ ÀÌÇØ°¡ ÇÊ¿äÇÏ´Ù. IME ¸Þ½ÃÁö°¡ ¾ðÁ¦ ¾î¶² Á¤º¸¸¦ °¡Áö°í ¹ß»ýÇÏ´ÂÁö ImeMsg ¿¹Á¦·Î »ìÆì º¸°í °¢ ¸Þ½ÃÁöµéÀÌ Ime1 ¿¹Á¦¿¡¼ ¾î¶»°Ô 󸮵DZ淡 ¹®ÀÚ¿ÀÌ Á¦´ë·Î Á¶¸³µÇ´ÂÁö º¸±â ¹Ù¶õ´Ù.