¿î¿µÃ¼Á¦´Â ÇѱÛÀÌ Á¶¸³ÁßÀÏ ¶§ ÀÀ¿ë ÇÁ·Î±×·¥À¸·Î IME ¸Þ½ÃÁö¸¦ º¸³»ÁØ´Ù. ±×·¯³ª ÀÌ ¸Þ½ÃÁö¸¦ ó¸®ÇÏÁö ¾Ê¾Æµµ ¿Ï¼ºµÈ ¹®ÀÚ¸¦ WM_CHAR ¸Þ½ÃÁö·Î º¸³»±â ¶§¹®¿¡ ¹®ÀÚÀÔ·ÂÀ» À§ÇØ IME ¸Þ½ÃÁö¸¦ ¹Ýµå½Ã ó¸®ÇÒ ÇÊ¿ä´Â ¾øÀ¸¸ç, º¸Åë IME ¸Þ½ÃÁö´Â ¹«½ÃÇÑ´Ù. ¼³·É ÀÌ ¸Þ½ÃÁö¸¦ ó¸®ÇÏÁö ¾Ê´õ¶óµµ ¿¡µðÆ® ÄÁÆ®·ÑÀ» »ç¿ëÇÏ¸é ¹®ÀÚ¿À» ÀԷ¹޴µ¥ º° ºÒÆíÇÔÀÌ ¾ø±â ¶§¹®ÀÌ´Ù.
ÇÏÁö¸¸ ¸ÞÀÎ À©µµ¿ì°¡ Á÷Á¢ ¹®ÀÚ¸¦ ÀÔ·Â¹Þ¾Æ¾ß ÇѴٰųª ¾Æ´Ï¸é ¿¡µðÆ® ÄÁÆ®·ÑÀ» ´ëüÇϱâ À§ÇÑ Ä¿½ºÅÒÄÁÆ®·ÑÀ» ¸¸µé°íÀÚ ÇÒ ¶§´Â »óȲÀÌ Á¶±Ý ´Þ¶óÁø´Ù. IME ¸Þ½ÃÁö¸¦ ÀüÇô ó¸®ÇÏÁö ¾Ê°í ¹®ÀÚ¸¦ ÀԷ¹޴ ¿¹Á¦¸¦ ¸¸µé¾îº¸ÀÚ. ºñÁÖ¾ó ½ºÆ©µð¿À 7.0À» ½ÇÇàÇÏ°í [ÆÄÀÏ-»õ·Î ¸¸µé±â-ÇÁ·ÎÁ§Æ®] Ç׸ñÀ» ¼±ÅÃÇÑ´Ù.
ÇÁ·ÎÁ§Æ® Çü½ÄÀº Visual C++ ÇÁ·ÎÁ§Æ®¸¦ ¼±ÅÃÇÏ°í, ¿À¸¥ÂÊÀÇ ÅÛÇø´¿¡¼´Â Win32 ÇÁ·ÎÁ§Æ®¸¦ ¼±ÅÃÇÑ´Ù. À§Ä¡´Â ½Ç½À¿ëÀ¸·Î ¹Ì¸® ÁغñÇØ µÐ C:\ApiPractice\Ime Æú´õ¸¦ ÁöÁ¤ÇÏ°í ÇÁ·ÎÁ§Æ® À̸§Àº DefImef¶ó ÇÏÀÚ. È®ÀÎ ¹öÆ°À» Ŭ¸¯Çϸé, ´ÙÀ½ ´ëÈ»óÀÚ¸¦ ÅëÇØ ÇÁ·ÎÁ§Æ®ÀÇ Çü½ÄÀ» ¹°¾î¿Â´Ù.
¸¶¹ý»ç°¡ ¸¸µé¾îÁÖ´Â Äڵ带 »ç¿ëÇÏÁö ¾Ê°í óÀ½ºÎÅÍ ¼Ò½º¸¦ ÀÛ¼ºÇÒ °ÍÀ̹ǷΠºó ÇÁ·ÎÁ§Æ® ¿É¼ÇÀ» ¼±ÅÃÇϵµ·Ï ÇÏÀÚ. ±×·¯¸é ¾Æ¹« ºÎ¼ÓÆÄÀϵµ °¡ÁöÁö ¾Ê´Â ºñ¾î ÀÖ´Â ÇÁ·ÎÁ§Æ®¸¦ ¸¸µé¾î ÁÙ °ÍÀÌ´Ù. ÇÁ·ÎÁ§Æ®¸¦ ¸¸µç ÈÄ [ÇÁ·ÎÁ§Æ®-»õ Ç׸ñ Ãß°¡]¸¦ ¼±ÅÃÇÏ¿© ÀÌ ÇÁ·ÎÁ§Æ®¿¡ DefIme.cpp ¼Ò½ºÆÄÀÏÀ» Ãß°¡ÇÑ´Ù.
±×¸®°í ÀÌ ÆÄÀÏ¿¡ ´ÙÀ½°ú °°ÀÌ ¼Ò½º¸¦ ÀÔ·ÂÇÑ´Ù. ÀÌ»óÀº ºñÁÖ¾ó C++·Î ÇÁ·ÎÁ§Æ®¸¦ ¸¸µå´Â ÀϹÝÀûÀÎ °úÁ¤Àε¥ ´ÙÀ½ ÇÁ·ÎÁ§Æ®ºÎÅÍ ÀÌ ¹æ½Ä´ë·Î °è¼Ó ÀÛ¼ºÇÏ¸é µÈ´Ù. ºñÁÖ¾ó C++ 6.0À» »ç¿ëÇÒ °æ¿ìµµ ´ëÈ»óÀÚÀÇ ¸ð¾çÀÌ Á¶±Ý ´Ù¸¦ »Ó ÇÁ·ÎÁ§Æ®¸¦ ¸¸µå´Â ¹æ¹ýÀº °ÅÀÇ µ¿ÀÏÇÏ´Ù.
#include <windows.h>
LRESULT CALLBACK WndProc(HWND,UINT,WPARAM,LPARAM);
HINSTANCE g_hInst;
HWND hWndMain;
LPCTSTR lpszClass=TEXT("DefIme");
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_ARROW);
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;
}
TCHAR *buf;
LRESULT CALLBACK WndProc(HWND hWnd,UINT iMessage,WPARAM wParam,LPARAM lParam)
{
HDC hdc;
PAINTSTRUCT ps;
int len;
switch(iMessage) {
case WM_CREATE:
buf=(TCHAR *)malloc(65536);
memset(buf,0,65536);
return 0;
case WM_CHAR:
len=lstrlen(buf);
buf[len]=(TCHAR)wParam;
buf[len+1]=0;
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_PAINT¿¡¼ TextOutÀ¸·Î Ãâ·ÂÇϴµ¥ ÀÌ ÇÁ·Î±×·¥ÀÌ ¹®ÀÚÀÔ·ÂÀ» À§ÇØ Ã³¸®ÇÏ´Â ¸Þ½ÃÁö´Â WM_CHAR»ÓÀÌ´Ù. WM_CHAR ¸Þ½ÃÁö¸¦ ¹Þ¾ÒÀ» ¶§ wParamÀ¸·Î Àü´ÞµÈ ¹®ÀÚÄڵ带 buf ¹è¿ ³¡¿¡ ´©Àû½ÃÅ°±â¸¸ ÇÒ »ÓÀε¥ º¸´Ù½ÃÇÇ Çѱ۵µ Àß ÀԷµȴÙ.
ÇÑ±Û ¸ðµå¿¡¼ Å°º¸µå¸¦ ´©¸£¸é IME°¡ ¸ÕÀú ÀÌ Å°ÀÔ·ÂÀ» Çؼ®ÇÏ¿© ÇѱÛÁ¶¸³À» ó¸®ÇÑ´Ù. ±×¸®°í ÇÑ À½ÀýÀÌ ¿Ï¼ºµÇ¸é WM_CHAR ¸Þ½ÃÁö¸¦ º¸³» ÀÔ·ÂµÈ ¹®ÀÚ¸¦ Àü´ÞÇÑ´Ù. ÇѱÛÀº 2¹ÙÀÌÆ® ¹®ÀÚÀ̱⠶§¹®¿¡ WM_CHAR ¸Þ½ÃÁö°¡ µÎ ¹ø ¿À´Âµ¥, ¿¹¸¦ µé¾î ¡®ÇÑ¡¯À» ÀÔ·ÂÇϸé 199(0xc7), 209(0xd1)°¡ Â÷·Ê´ë·Î Àý´ÞµÈ´Ù. ¾î·µç WM_CHAR¿¡¼ ÀÌ µÎ ¹®ÀÚÄڵ带 ¹öÆÛ¿¡ ¸ð¾Ò´Ù°¡ TextOutÀ¸·Î Ãâ·ÂÇϱ⸸ Çϸé ÇѱÛÀÌ Á¦´ë·Î º¸ÀδÙ.
´Ü WM_CHAR ¸Þ½ÃÁö´Â ¿Ï¼ºµÈ À½Àý¿¡ ´ëÇؼ¸¸ Àü´ÞµÇ¹Ç·Î Á¶¸³ÁßÀÎ ¸ð¾çÀÌ ¹Ù·Î¹Ù·Î º¸ÀÌÁö´Â ¾Ê´Â´Ù. ¡®±â´Ù¸²¡¯À» ÀÔ·ÂÇÒ °æ¿ì Å°¸¦ ´©¸£´Â ¼ø¼¿¡ µû¶ó ¸Þ½ÃÁö°¡ ¾î¶² ¼ø¼´ë·Î Àü´ÞµÇ°í Á¶¸³ À©µµ¿ì¿Í ȸ鿡 ¹®ÀÚµéÀÌ ¾î¶»°Ô º¸ÀÌ´ÂÁö °üÂûÇغ¸ÀÚ.
Å° |
Á¶¸³ À©µµ¿ì |
ȸé |
¸Þ¸ðÀå |
¸Þ½ÃÁö |
¤¡ |
¤¡ |
|
¤¡ |
|
¤Ó |
±â |
|
±â |
|
¤§ |
±å |
|
±å |
|
¤¿ |
´Ù |
±â |
±â´Ù |
WM_CHAR ¡®±â¡¯ |
¤© |
´Þ |
|
±â´Þ |
|
¤Ó |
¸® |
±â´Ù |
±â´Ù¸® |
WM_CHAR ¡®´Ù¡¯ |
¤± |
¸² |
|
±â´Ù¸² |
|
½ºÆäÀ̽º |
|
±â´Ù¸² |
±â´Ù¸² |
WM_CHAR ¡®¸²¡¯ |
¶È°°Àº ¹®ÀÚ¿À» ¸Þ¸ðÀåÀ¸·Î ÀÔ·ÂÇϸé Á¶¸³ÁßÀÎ ¹®ÀÚµéÀ» Á¦´ë·Î º¸¿©Áִµ¥ ¿¡µðÆ® ÄÁÆ®·ÑÀÌ IME ¸Þ½ÃÁö¸¦ ó¸®ÇÏ°í Àֱ⠶§¹®ÀÌ´Ù. DefIme ¿¹Á¦´Â IME ¸Þ½ÃÁö¸¦ ¹«½ÃÇÏ°í WM_CHAR ¸Þ½ÃÁö¸¸ ó¸®ÇϹǷΠÁ¶¸³ÁßÀÎ ¹®ÀÚ´Â º¸ÀÌÁö ¾Ê´Â´Ù. ¸¸¾à Á¶¸³ÁßÀÎ ¹®ÀÚ¸¦ ȸ鿡 Ãâ·ÂÇÏ°í ½Í´Ù¸é Á÷Á¢ IME ¸Þ½ÃÁö¸¦ ó¸®ÇØ¾ß ÇÏ¸ç ±×·¡¼ ÅؽºÆ® ÆíÁý±â¸¦ ¸¸µé±â Àü¿¡ IME¸¦ ¸ÕÀú ¿¬±¸ÇØ¾ß ÇÏ´Â °ÍÀÌ´Ù.