´Ù. Ŭ¸³º¸µå ó¸®

»ç¿ëÀÚ°¡ Æ˾÷¸Þ´º¸¦ ¼±ÅÃÇϸé WM_COMMAND ¸Þ½ÃÁö°¡ Àü´ÞµÇ°í À̶§ LOWORD(wParam)À» º¸¸é ¾î¶² ¸Þ´ºÇ׸ñÀ» ¼±ÅÃÇß´ÂÁö ¾Ë ¼ö ÀÖ´Ù. °¢ Æ˾÷¸Þ´º¿¡ ´ëÇÑ Çڵ鷯¸¦ OnCommand¿¡ ÀÛ¼ºÇÏ¿´´Ù.

 

void OnCommand(HWND hWnd, int id, HWND hwndCtl, UINT codeNotify)

{

     HGLOBAL hmem;

     TCHAR *ptr;

     int SelFirst, SelSecond;

 

     switch (id) {

     case IDM_AE_CUT:

          if (SelStart != SelEnd) {

               SendMessage(hWnd,WM_COMMAND,MAKEWPARAM(IDM_AE_COPY,0),0);

               DeleteSelection();

               InvalidateRect(hWnd,NULL,TRUE);

               SetCaret();

          }

          return;

     case IDM_AE_COPY:

          if (SelStart != SelEnd) {

               SelFirst=min(SelStart,SelEnd);

               SelSecond=max(SelStart,SelEnd);

               hmem=GlobalAlloc(GHND, SelSecond-SelFirst+1);

               ptr=(TCHAR *)GlobalLock(hmem);

               memcpy(ptr,buf+SelFirst,SelSecond-SelFirst);

               GlobalUnlock(hmem);

               if (OpenClipboard(hWnd)) {

                   EmptyClipboard();

                   SetClipboardData(CF_TEXT,hmem);

                   CloseClipboard();

               }

          }

          return;

     case IDM_AE_PASTE:

          if (IsClipboardFormatAvailable(CF_TEXT)) {

               DeleteSelection();

               OpenClipboard(hWnd);

               hmem=GetClipboardData(CF_TEXT);

               ptr=(TCHAR *)GlobalLock(hmem);

               Insert(off,ptr);

               GlobalUnlock(hmem);

               CloseClipboard();

               InvalidateRect(hWnd,NULL,TRUE);

               off += lstrlen(ptr);

               SetCaret();

          }

          return;

     case IDM_AE_SELALL:

          SelStart=0;

          SelEnd=lstrlen(buf);

          off=SelEnd;

          InvalidateRect(hWnd,NULL,TRUE);

          SetCaret();

          return;

     }

}

 

¼±Åÿµ¿ªÀ» º¹»çÇÒ ¶§´Â ¼±Åÿµ¿ª ±æÀ̸¸Å­ ¸Þ¸ð¸®¸¦ ÇÒ´çÇØ º¹»çÇÑ ÈÄ Å¬¸³º¸µå¿¡ ³Ñ°ÜÁÖ¸é µÈ´Ù. À̶§ ¼±Åÿµ¿ªÀº ¹Ýµå½Ã Á¤±ÔÈ­ÇÏ¿© ±æÀÌ¿Í ½ÃÀÛÀ§Ä¡¸¦ Á¦´ë·Î °è»êÇØ¾ß ÇÑ´Ù. À߶󳻱â´Â º¹»ç¿Í DeleteSelectionÀ» À̾ È£ÃâÇÏ¸é °£´ÜÇÏ°Ô ±¸ÇöÇÒ ¼ö ÀÖ´Ù. ¼±ÅÃÇÑ ¹®ÀÚ¿­ÀÌ »èÁ¦µÇ¹Ç·Î È­¸éÀ» ´Ù½Ã ±×¸®°í ij·µµµ ¿Å°Ü¾ß ÇÑ´Ù.

ºÙ¿©³Ö±â´Â Ŭ¸³º¸µå·ÎºÎÅÍ CF_TEXTÇü µ¥ÀÌÅ͸¦ ÀÐ¾î ¹®¼­¿¡ InsertÇÏ¸é µÇ´Âµ¥ ºÙ¿©³Ö±â Àü¿¡ ¼±Åÿµ¿ªÀÌ ÀÖ¾ú´Ù¸é ¸ÕÀú ¼±Åÿµ¿ªÀ» Á¦°ÅÇØ¾ß ÇÑ´Ù. ºÙ¿©³ÖÀº ÈÄ Ä³·µÀº »õ·Î »ðÀÔµÈ ¹®ÀÚ¿­ÀÇ ³¡À¸·Î º¸³» ÁÖ¾ú´Ù. Àüü ¼±ÅÃÀº Á¤¸» °£´ÜÇÏ´Ù. SelStart´Â ¹®¼­ÀÇ Ã³À½À¸·Î SelEnd´Â ¹®¼­ÀÇ ³¡À¸·Î ÁöÁ¤ÇÏ¿© ¹®¼­ Àüü¸¦ ¼±ÅÃÇÏ°í ij·µÀº ¹®¼­ÀÇ ³¡À¸·Î º¸³» ÁÖ¾ú´Ù.

¿©±â±îÁö ÀÛ¾÷ÇÑ ÈÄ ½ÇÇàÇغ¸ÀÚ. ¼±ÅÃÇÑ ¹®ÀåÀ» º¹»ç, »èÁ¦, À߶󳻱â ÇÒ ¼ö ÀÖ°í Ŭ¸³º¸µåÀÇ ÅؽºÆ®¸¦ °¡Á®¿Ã ¼öµµ ÀÖ´Ù. ±×·¡¼­ ÀÌÁ¦ºÎÅÍ´Â Å×½ºÆ®¸¦ À§ÇØ ¸Å¹ø ¡®µ¿Çع°°ú ¹éµÎ»êÀÌ~¡¯¸¦ ŸÀÌÇÁÇÒ ÇÊ¿ä¾øÀÌ ¸î °³ÀÇ ÅؽºÆ® ¹®¼­¸¦ ¸¸µé¾î ³õ°í ºÙ¿©³ÖÀ¸¸é µÉ °ÍÀÌ´Ù.