´Ù. µ¡ºÙÀ̱â

À©µµ¿ìÁîÀÇ Å¬¸³º¸µå´Â ´Ü ÇϳªÀÇ µ¥ÀÌÅ͸¸ ÀúÀåÇÒ ¼ö ÀÖÀ¸¸ç »õ·Î¿î µ¥ÀÌÅ͸¦ º¹»çÇϸé Ŭ¸³º¸µå¿¡ µé¾îÀÖ´ø ¿ø·¡ µ¥ÀÌÅÍ´Â Æı«µÈ´Ù. ±×·¡¼­ ºÐ¸®µÇ¾î ÀÖ´Â ¿©·¯ °³ÀÇ ÅؽºÆ®¸¦ Çϳª·Î ÇÕÄ¡·Á¸é ÀÏÀÏÀÌ º¹»ç, ºÙÀ̱⸦ ¹Ýº¹Çؾ߸¸ ÇÑ´Ù. µ¡ºÙÀ̱⠱â´ÉÀº Ŭ¸³º¸µå¿¡ ÀÌ¹Ì µé¾î ÀÖ´Â µ¥ÀÌÅÍ¿Í »õ·Î º¹»çµÈ µ¥ÀÌÅ͸¦ Çϳª·Î ÇÕÃÄ ´Ù½Ã Ŭ¸³º¸µå¿¡ ³Ö´Â ±â´ÉÀÌ´Ù. Èð¾îÁø ÅؽºÆ®¸¦ Çϳª·Î ÇÕÃļ­ ´Ù¸¥ °÷À¸·Î º¹»çÇÏ°íÀÚ ÇÒ ¶§ À¯¿ëÇÏ°Ô »ç¿ëÇÒ ¼ö ÀÖ´Ù.

ÀÌ ±â´ÉÀº ¹®¼­ÀÇ ³»¿ë°ú Ŭ¸³º¸µåÀÇ ³»¿ëÀ» ÇÕÄ¡´Â °ÍÀ̹ǷΠÄÁÆ®·ÑÀÌ Á÷Á¢ Á¦°øÇØ¾ß ÇÑ´Ù. ApiEdit´Â Ŭ¸³º¸µå °ü·Ã ¸í·ÉÀ» WM_COMMAND·Î ¸Þ½ÃÁö¸¦ º¸³» ó¸®ÇϹǷΠµ¡ºÙÀ̱⠸í·Éµµ °°Àº ¹æ½ÄÀ¸·Î ó¸®Çϵµ·Ï ÇÏÀÚ. ApiEdit.hÀÇ ¼±µÎ¿¡ Á¤ÀÇµÈ ¸í·É ID¿¡ ´ÙÀ½ µÎ °³¸¦ ´õ Ãß°¡ÇÑ´Ù.

 

#define IDM_AE_CUT 40001

#define IDM_AE_COPY 40002

#define IDM_AE_PASTE 40003

#define IDM_AE_SELALL 40004

#define IDM_AE_COPYAPPEND 40005

#define IDM_AE_CUTAPPEND 40006

 

°¢°¢ º¹»çÇؼ­ Ãß°¡Çϱâ, Àß¶ó¼­ Ãß°¡Çϱ⠸í·ÉÀÌ´Ù. CApiEdit::OnCommand¿¡ ÀÌ µÎ ¸í·É¿¡ ´ëÇÑ Äڵ带 ÀÛ¼ºÇÑ´Ù.

 

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

{

     TCHAR *ptr2;

 

     switch (id) {

     ....

     case IDM_AE_CUTAPPEND:

          if (!IsClipboardFormatAvailable(CF_TEXT)) {

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

              return;

          }

          if (SelStart != SelEnd && bReadOnly==FALSE && bCapture==FALSE) {

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

              DeleteSelection();

              Invalidate(FindParaStart(off));

              SetCaret();

          }

          return;

     case IDM_AE_COPYAPPEND:

          if (!IsClipboardFormatAvailable(CF_TEXT)) {

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

              return;

          }

          if (SelStart != SelEnd) {

              OpenClipboard(hWnd);

              hmem=GetClipboardData(CF_TEXT);

              ptr=(TCHAR *)GlobalLock(hmem);

              GlobalUnlock(hmem);

              CloseClipboard();

 

              SelFirst=min(SelStart,SelEnd);

              SelSecond=max(SelStart,SelEnd);

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

              ptr2=(TCHAR *)GlobalLock(hmem);

              lstrcpy(ptr2,ptr);

              memcpy(ptr2+lstrlen(ptr2),buf+SelFirst,SelSecond-SelFirst);

              GlobalUnlock(hmem);

              if (OpenClipboard(hWnd)) {

                   EmptyClipboard();

                   SetClipboardData(CF_TEXT,hmem);

                   CloseClipboard();

              }

          }

          return;

 

±â´ÉÀÇ °³³äÀÌ °£´ÜÇϱ⠶§¹®¿¡ Äڵ嵵 ¾ÆÁÖ ¿ø·ÐÀûÀÌ´Ù. Ŭ¸³º¸µåÀÇ ÅؽºÆ®¸¦ ¸ÕÀú ÀÐ¾î ³õ°í ¿©±â¿¡ ¼±Åÿµ¿ªÀÇ ÅؽºÆ®¸¦ µ¡ºÙ¿©¼­ ´Ù½Ã Ŭ¸³º¸µå·Î ¹Ð¾î ³ÖÀ¸¸é µÈ´Ù. º° Ưº°ÇÑ ±â±³ °°Àº °ÍÀº ¾ø°í ¾ÆÁÖ Æò¹üÇÑ ÄÚµåÀÏ »ÓÀÌ´Ù. Àß¶ó¼­ Ãß°¡Çϱâ´Â º¹»çÇؼ­ Ãß°¡ÇÑ ÈÄ ¼±Åÿµ¿ªÀ» »èÁ¦ÇÏ¸é µÈ´Ù. ¸¸¾à Ŭ¸³º¸µå¿¡ ÅؽºÆ®°¡ ¾ø´Ù¸é, Áï µ¡ºÙÀÏ ¿øº»ÀÌ ¾ø´Ù¸é Ãß°¡ ±â´ÉÀº Ãë¼ÒµÇ°í º¹»ç, ÀÚ¸£±â¿Í µ¿ÀÏÇØÁø´Ù. À̶§´Â ¸Þ½ÃÁö¸¦ º¹»ç, ÀÚ¸£±â·Î ¹Ù²ã¼­ ´Ù½Ã Àڽſ¡°Ô º¸³»¸é µÈ´Ù.

ApiEdit°¡ µ¡ºÙÀ̱⠱â´ÉÀ» ±¸ÇöÇÏ°í ÀÌ ±â´É¿¡ ´ëÇÑ ¸í·É ID¸¦ Á¤ÀÇÇÏ°í ÀÖÀ¸¹Ç·Î È£½ºÆ®´Â ¸í·É ID¿Í ÇÔ²² WM_COMMAND ¸Þ½ÃÁö¸¸ º¸³»ÁÖ¸é µÈ´Ù. ´ÙÀ½ Äڵ带 Ãß°¡Çϵµ·Ï ÇÏÀÚ.

 

void OnCommand(HWND hWnd,WPARAM wParam,LPARAM lParam)

{

     ....

     case IDM_EDIT_COPYAPPEND:

          SendMessage(pSi->Ae.hWnd,WM_COMMAND,MAKEWPARAM(IDM_AE_COPYAPPEND,0),0);

          break;

     case IDM_EDIT_CUTAPPEND:

          SendMessage(pSi->Ae.hWnd,WM_COMMAND,MAKEWPARAM(IDM_AE_CUTAPPEND,0),0);

          break;

 

´Ù¸¥ Ŭ¸³º¸µå ¸í·É°ú ¸¶Âù°¡Áö·Î ÀÌ µÎ ±â´Éµµ ¼±Åÿµ¿ªÀÌ ÀÖ¾î¾ß¸¸ »ç¿ëÇÒ ¼ö ÀÖ´Ù. OnInitMenu¿¡¼­ ÀÌ µÎ ¸Þ´º ¸í·ÉÀ» °ü¸®ÇØ¾ß ÇÑ´Ù.

 

void OnInitMenu(HWND hWnd,WPARAM wParam,LPARAM lParam)

{

          ....

          if (s == e) {

              EnableMenuItem(hMenu, IDM_EDIT_CUT, MF_BYCOMMAND | MF_GRAYED);

              EnableMenuItem(hMenu, IDM_EDIT_COPY, MF_BYCOMMAND | MF_GRAYED);

           EnableMenuItem(hMenu, IDM_EDIT_CUTAPPEND, MF_BYCOMMAND | MF_GRAYED);

           EnableMenuItem(hMenu, IDM_EDIT_COPYAPPEND, MF_BYCOMMAND | MF_GRAYED);

              ....

          } else {

              EnableMenuItem(hMenu, IDM_EDIT_CUT, MF_BYCOMMAND | MF_ENABLED);

              EnableMenuItem(hMenu, IDM_EDIT_COPY, MF_BYCOMMAND | MF_ENABLED);

           EnableMenuItem(hMenu, IDM_EDIT_CUTAPPEND, MF_BYCOMMAND | MF_ENABLED);

           EnableMenuItem(hMenu, IDM_EDIT_COPYAPPEND, MF_BYCOMMAND | MF_ENABLED);

               ....

 

ÀÌ ±â´É¿¡ ´ëÇؼ­´Â <Ctrl+Shift+C>, <Ctrl+Shift+X> ¾×¼¿·¯·¹ÀÌÅÍ°¡ Á¤ÀǵǾî ÀÖÀ¸¹Ç·Î ´ÜÃàÅ°·Îµµ ½ÇÇàÇÒ ¼ö ÀÖ´Ù. ÇÏÁö¸¸ ApiEdit ÄÁÆ®·Ñ ÀÚü´Â ÀÌ ¸í·É¿¡ ´ëÇÑ UI¸¦ Á¦°øÇÏÁö ¾ÊÀ¸¹Ç·Î È£½ºÆ®°¡ Áö¿øÇÏÁö ¾ÊÀ¸¸é ÀÌ ±â´ÉÀº »ç¿ëÇÒ ¼ö ¾øµµ·Ï µÇ¾î ÀÖ´Ù. ¸¸¾à ApiEdit ÄÁÆ®·ÑÀÌ ÀÚüÀûÀ¸·Î ÀÌ ¸í·ÉÀ» Áö¿øÇÏ°íÀÚ ÇÑ´Ù¸é Æ˾÷¸Þ´º¿¡ ¸í·É Ç׸ñÀ» ³Ö°Å³ª ¾Æ´Ï¸é OnChar¿¡¼­ ´ÜÃàÅ° 󸮸¦ ÇØ¾ß ÇÑ´Ù.