´Ù. DefIme ¿¹Á¦

¿î¿µÃ¼Á¦´Â ÇѱÛÀÌ Á¶¸³ÁßÀÏ ¶§ ÀÀ¿ë ÇÁ·Î±×·¥À¸·Î 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¸¦ ¸ÕÀú ¿¬±¸ÇØ¾ß ÇÏ´Â °ÍÀÌ´Ù.