°¡. ÀбâÀü¿ë

ÅؽºÆ® ÆíÁý±â´Â ÅؽºÆ®¸¦ ÆíÁýÇÏ´Â ¿ëµµ ¿Ü¿¡µµ ÇÑ °¡Áö ¿ëµµ¸¦ ´õ °¡Áö°í Àִµ¥ ÅؽºÆ® ³»¿ëÀ» º¸¿©ÁÖ´Â ºä¾î·Îµµ ¸¹ÀÌ È°¿ëµÈ´Ù. ÅؽºÆ®¸¦ ÆíÁýÇÏ·Á¸é ¾îÂ÷ÇÇ ³»¿ëÀ» º¸¿©ÁÖ¾î¾ß ÇϹǷΠÆíÁý±â´Â °ð ºä¾î¸¦ °âÇÏ°í ÀÖ´Ù. ÇÏÁö¸¸ ¾î¶² °æ¿ì´Â ¿À·ÎÁö ºä¾î·Î¸¸ µ¿ÀÛÇØ¾ß ÇÒ °æ¿ì°¡ Àִµ¥ º¯°æÇÒ ¼ö ¾ø´Â ÀбâÀü¿ë ¹®¼­¸¦ ÆíÁýÇÒ ¶§³ª ·ÎÄÿ¡ Á¸ÀçÇÏÁö ¾Ê´Â ³×Æ®¿öÅ©»óÀÇ ÅؽºÆ® ÆÄÀÏÀ» ´Ù¿î·Îµå¹Þ¾Æ º¸¿©ÁÙ ¶§´Â ÆíÁýÇØ ºÁ¾ß ÀúÀåÇÒ ´ë»óÀÌ ¾øÀ¸¹Ç·Î ºä¾î·Î¸¸ µ¿ÀÛÇØ¾ß ÇÑ´Ù.

ÆíÁý±â°¡ ºä¾î°¡ µÇ´Â ¹æ¹ýÀº ¾ÆÁÖ °£´ÜÇÏ´Ù. ÆíÁýÀ» ±ÝÁö½ÃÄÑ ¹®¼­¸¦ ÀбâÀü¿ëÀ¸·Î ¸¸µé¸é µÈ´Ù. Ç÷¡±×¸¦ Çϳª µÎ°í ÀÌ Ç÷¡±×ÀÇ °ª¿¡ µû¶ó ¹®¼­¸¦ ÀбâÀü¿ëÀ¸·Î ¸¸µé ¼ö ÀÖµµ·Ï Çغ¸ÀÚ. »õ·Î¿î ±â´ÉÀÌ Ãß°¡µÇ¹Ç·Î ApiEdit9 ÇÁ·ÎÁ§Æ®¸¦ »õ·Î ¸¸µé°í OnCreate¿¡ ÀÖ´Â »ùÇà ÅؽºÆ®´Â »èÁ¦Çϵµ·Ï ÇÏÀÚ. ±×¸®°í ´ÙÀ½ Àü¿ªº¯¼ö¸¦ ¼±¾ðÇÏ°í ÃʱâÈ­ÇÑ´Ù.

 

BOOL bReadOnly;

 

BOOL OnCreate(HWND hWnd, LPCREATESTRUCT lpCreateStruct)

{

     bReadOnly=FALSE;

 

ÀÏ´ÜÀº FALSE·Î ÃʱâÈ­ÇÏ¿© ÆíÁýÀÌ °¡´ÉÇϵµ·Ï Çߴµ¥ ÀÌ º¯¼ö°¡ TRUE°ªÀ» °¡Áö¸é ÀбâÀü¿ëÀ¸·Î µ¿ÀÛÇÏ¸é µÈ´Ù. ÀÌ º¯¼öÀÇ °ªÀº ApiEdit°¡ ³»ºÎÀûÀ¸·Î º¯°æÇÒ ÇÊ¿ä°¡ ¾øÀ¸¸ç ¿ÜºÎ¿¡¼­ ÁÖ¾îÁø´Ù. ¿¹¸¦ µé¾î ÆÄÀÏÀ» Àоú´Âµ¥ ÀбâÀü¿ë ¼Ó¼ºÀ» °¡Áö°í ÀÖ´Ù¸é ÀÌ Ç÷¡±×¸¦ TRUE·Î ¹Ù²Ù°Ô µÉ °ÍÀÌ´Ù. ApiEdit´Â ÀÌ Ç÷¡±×ÀÇ °ªÀ» ÂüÁ¶¸¸ ÇÏ¸ç º¯¼ö°ª¿¡ µû¶ó ¹®¼­¸¦ º¯°æÇÏ´Â ¸ðµç Äڵ带 ¸·¾ÆÁÖ¸é µÈ´Ù.

¹®¼­¿¡ º¯°æÀÌ °¡ÇØÁö´Â ºÎºÐÀº ²Ï ¸¹ÀÌ Àִµ¥ ÀÏ´ÜÀº ¹öÆÛ¿¡ Á÷Á¢ ¹®ÀÚ¿­À» »ðÀÔ, »èÁ¦ÇÏ´Â Insert, Delete°¡ °¡Àå ¿ì¼±ÀûÀ¸·Î ¼öÁ¤µÇ¾î¾ß ÇÑ´Ù.

 

 

void Insert(int nPos, TCHAR *str)

{

     if (bReadOnly)

          return;

     ....

 

void Delete(int nPos, int nCount)

{

     if (bReadOnly)

          return;

     ....

 

ÇÔ¼öÀÇ °¡Àå ù ºÎºÐ¿¡¼­ bReadOnly º¯¼ö°ªÀ» º¸°í ÀÌ °ªÀÌ TRUEÀÌ¸é ¾Æ¹« °Íµµ ÇÏÁö ¾Ê°í ±×³É ¸®ÅÏÇÏ¸é µÈ´Ù. ÀÌ µÎ ÇÔ¼ö¸¦ ¸·¾Æ¹ö¸®¸é ÇÁ·Î±×·¥ ³»ÀÇ ¾î¶°ÇÑ Äڵ嵵 ¹öÆÛ¸¦ º¯°æÇÒ ¼ö ¾ø°Ô µÈ´Ù. ÀÌ·Î½á ¸ðµç 󸮰¡ ³¡³ª¸é ¾ó¸¶³ª °£´ÜÇϰڴ°¡¸¸ ´õ ½Å°æ½á¾ß ÇÒ °÷ÀÌ ¸¹´Ù. Á÷Á¢ ¹®ÀÚ¸¦ ÀԷ¹޴ OnChar, OnImeComposition ÇÔ¼öµµ ÀбâÀü¿ëÀÏ ¶§´Â ¾Æ¹« °Íµµ ÇÏÁö ¾Êµµ·Ï ÇØ¾ß ÇÑ´Ù.

 

void OnChar(HWND hWnd, TCHAR ch, int cRepeat)

{

     ....

     if ((ch < ¡® ¡® && ch != ¡®\r¡¯ && ch != ¡®\t¡¯) || ch==127)

          return;

    

     if (bReadOnly)

          return;

     ....

 

LRESULT OnImeComposition(HWND hWnd, WPARAM wParam, LPARAM lParam)

{

     ....

     if (bReadOnly)

          return 0;

     ....

 

OnCharÀÇ °æ¿ì ´ÜÃàÅ° Á¡°Ë ´ÙÀ½¿¡ ÀбâÀü¿ë Á¡°ËÀ» ÇØ¾ß ÇÑ´Ù. ÀбâÀü¿ëÀÌ´õ¶óµµ º¹»ç, Àüü ¼±Åà µîÀº °¡´ÉÇØ¾ß Çϱ⠶§¹®ÀÌ´Ù. ÀÌ µÎ ÇÔ¼ö¿¡¼­ ±»ÀÌ bReadOnly¸¦ Á¡°ËÇÏÁö ¾Ê¾Æµµ Insert, Delete°¡ ¹öÆÛ¸¦ º¯°æÇÏÁö ¾Ê±â ¶§¹®¿¡ ¹®¼­ ³»¿ëÀÌ ÆíÁýµÇÁö´Â ¾Ê´Â´Ù. ÇÏÁö¸¸ ÀÌ ÇÔ¼öµéÀº ½ÇÆÐ »ç½ÇÀ» ¸ð¸£°í ¼º°øÇß´Ù°í °¡Á¤ÇÏ°í ´ÙÀ½ µ¿ÀÛÀ» ÇÏ°Ô µÈ´Ù. ¹®ÀÚ°¡ »ðÀÔµÈ À§Ä¡¸¦ ¹«È¿È­½ÃÅ°°í ´ÙÀ½ ¹®ÀÚ À§Ä¡·Î ij·µÀ» ¿Å±â·Á°í Çϴµ¥ À̶§ ¹öÆÛ ³»¿ëÀÌ ÆíÁýµÇÁö ¾Ê¾Ò±â ¶§¹®¿¡ ¾û¶×ÇÑ µ¿ÀÛÀ» ÇÒ À§ÇèÀÌ ÀÖ´Ù.

¿¹¸¦ µé¾î ¡®´ëÇѹα¹¡¯ÀÇ ¡®¹Î¡¯ÀÚ ¾Õ¿¡¼­ ¿µ¹® a¸¦ ÀÔ·ÂÇß´Ù°í Çغ¸ÀÚ. ±×·¯¸é ÀÌ ÇÔ¼öµéÀº a°¡ ÀԷµǾú´Ù°í »ý°¢ÇÏ°í aÀÚ µÚ·Î ij·µÀ» º¸³»·Á°í Çϴµ¥ ¹öÆÛ´Â º¯°æµÇÁö ¾Ê¾Ò±â ¶§¹®¿¡ ij·µÀº ¡®¹Î¡¯ÀÚÀÇ Áß°£À¸·Î °¡·Á°í ÇÑ´Ù. ÀÌ À§Ä¡´Â ÇÑ±Û ÄÚµåÀÇ Áß°£À̱⠶§¹®¿¡ ´ëÀÀµÇ´Â ij·µ À§Ä¡°¡ ¾øÀ¸¸ç ¹«ÇÑ·çÇÁ¿¡ ºüÁ® ÇÁ·Î±×·¥Àº ¿¹¿Ü¸¦ ÀÏÀ¸Å°°í Á×°Ô µÈ´Ù. ±×·¡¼­ ¾Æ¿¹ ¿øõÀûÀ¸·Î ÄÚµå ½ÇÇàÀ» ¸·¾Æ¾ß ÇÑ´Ù. ¹®ÀÚ¸¦ »èÁ¦ÇÏ´Â VK_DELETE, VK_BACKµµ ¸·¾Æ¾ß ÇÑ´Ù.

 

     case VK_DELETE:

          if (bReadOnly)

              return;

     ....

     case VK_BACK:

          if (bReadOnly)

              return;

     ....

 

ÀÌ µÎ Å°µµ ¹®ÀÚ¸¦ ½ÇÁ¦ »èÁ¦ÇÏÁö´Â ¸øÇÏÁö¸¸ »èÁ¦Çß´Ù°í °¡Á¤ÇÏ°í ij·µ À§Ä¡¸¦ ¿Å±â±â ¶§¹®¿¡ ÀбâÀü¿ëÀÏ ¶§´Â ¾Æ¿¹ Å°ÀÔ·Â ÀÚü¸¦ ¹«½ÃÇØ¾ß ÇÑ´Ù. Ŭ¸³º¸µå °ü·Ã Äڵ嵵 ¼öÁ¤ÇÑ´Ù. º¹»ç µ¿ÀÛÀº ¹®¼­¿¡ ÀüÇô ¿µÇâÀ» ÁÖÁö ¾Ê±â ¶§¹®¿¡ ÀбâÀü¿ëÀÌ¶óµµ Çã¿ëÇØ¾ß ÇÑ´Ù. ¹Ý¸é À߶󳻱⳪ ºÙ¿©³Ö±â´Â Çã¿ëÇÒ ¼ö ¾ø´Ù. ÀÌ ±â´Éµéµµ ¹®¼­ ³»¿ëÀ» ¹Ù²ÙÁö´Â ¸øÇÏÁö¸¸ ij·µÀ» À̵¿½ÃÅ°´Â Äڵ尡 ÀÖ¾î ±ÝÁöÇØ¾ß ÇÑ´Ù.

 

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

{

     switch (id) {

     case IDM_AE_CUT:

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

     ....

     case IDM_AE_PASTE:

          if (IsClipboardFormatAvailable(CF_TEXT) && bReadOnly==FALSE) {

     ....

 

À߶󳻱â, ºÙ¿©³Ö±â¸¦ ÇÒ ¼ö ÀÖ´Â Á¶°Ç¿¡ bReadOnly°¡ FALSE¿©¾ß ÇÑ´Ù´Â Á¶°ÇÀÌ Çϳª ´õ Ãß°¡µÇ¾ú´Ù. À߶󳻱⸦ ÇÒ ¶§´Â ¸¶Ä¡ ¼±Åÿµ¿ªÀÌ ¾ø´Â °Íó·³ ¸¸µé¾î¹ö¸®°í, ºÙ¿©³Ö±â¸¦ ÇÒ ¶§´Â Ŭ¸³º¸µå¿¡ ÅؽºÆ® µ¥ÀÌÅÍ°¡ ¾ø´Â °Íó·³ ¸¸µé¾î ¹ö·È´Ù. ±×·¡¼­ ÀбâÀü¿ë »óÅ¿¡¼­´Â µÎ µ¿ÀÛ ¸ðµÎ ±ÝÁöµÈ´Ù. Ŭ¸³º¸µå °ü·Ã ¸Þ´ºµµ ÀбâÀü¿ëÀÏ ¶§´Â »ç¿ë±ÝÁö½ÃÅ°µµ·Ï OnInitMenu ÇÔ¼ö¸¦ ¼öÁ¤ÇÏ´Â °ÍÀÌ Á¤È®ÇÏ°ÚÁö¸¸ ±»ÀÌ ±×·¸°Ô±îÁö´Â ÇÏÁö ¾Ê¾Ò´Ù. ¾îÂ÷ÇÇ ¸Þ´º¸¦ ¼±ÅÃÇصµ ¾Æ¹« Àϵµ ÀϾÁö ¾Ê´Â´Ù.

¸¶¿ì½º ¾×¼ÇÀº ´ëºÎºÐ ¼±Åÿµ¿ªÀ» ¸¸µå´Â ÄÚµåµé·Î ±¸¼ºµÇ¾î Àִµ¥ ÀбâÀü¿ë »óÅ¿¡¼­µµ ¼±ÅÃÀº ÇÒ ¼ö ÀÖ´Ù. ¼±Åà ÀÚü°¡ ¹®¼­¸¦ º¯°æÇÏÁö ¾ÊÀ¸¸ç º¹»ç¸¦ Çã¿ëÇϱ⠶§¹®¿¡ ¼±Åõµ ´ç¿¬È÷ Çã¿ëµÇ¾î¾ß ÇÑ´Ù. ÇÏÁö¸¸ ¹®ÀÚ¿­ µå·¡±× ±â´ÉÀº ¹®¼­ ³»¿ëÀ» º¯°æÇϱ⠶§¹®¿¡ ¸·¾Æ¾ß ÇÑ´Ù. ´Ù¸¥ ÄÚµå´Â ±×´ë·Î µÎ°í bDragSel ¸ðµå·Î¸¸ µé¾î°¡Áö ¸øÇϵµ·Ï ÇÏ¸é µå·¡±× µ¿ÀÛÀ» ½ÃÀÛÇÒ ¼ö ¾øÀ¸¹Ç·Î ¹®¼­º¯°æÀ» ½±°Ô ¸·À» ¼ö ÀÖ´Ù.

 

void OnLButtonDown(HWND hWnd, BOOL fDoubleClick, int x, int y, UINT keyFlags)

{

     ....

     if (IsInSelection(x+xPos, y+yPos) && bReadOnly==FALSE) {

     ....

 

¹®ÀÚ¿­ µå·¡±×¸¦ ½ÃÀÛÇÒ Á¶°Ç¿¡ ÀбâÀü¿ëÀÌ ¾Æ´Ï¾î¾ß ÇÑ´Ù´Â Á¶°ÇÀÌ Çϳª ´õ Ãß°¡µÇ¾ú´Ù. bReadOnly¸¦ TRUE·Î ¹Ù²Ù¾î ³õ°í ÆíÁýÀÌ µÇ´ÂÁö Å×½ºÆ®Çغ¸¾Æ¶ó. ´Ù ¸·¾Æ ¹ö·È±â ¶§¹®¿¡ ¹°·Ð ÆíÁýÀÌ ¾ÈµÈ´Ù. ÀÌ·± °£´ÜÇÑ Ã³¸®¸¦ À§ÇØ ¿©±â Àú±â Äڵ带 ¸¹ÀÌ ¼Õ ´ë¾ß Çϴµ¥ ¸¸¾à Insert¿Í Delete¸¦ voidÇüÀ¸·Î ¸¸µéÁö ¾Ê°í »ðÀÔ, »èÁ¦ ¼º°ø ¿©ºÎ¸¦ ¸®ÅÏÇϵµ·Ï Çß´Ù¸é ´Ù¸¥ Äڵ尡 Á¶±Ý ´õ °£´ÜÇØÁ³À»Áöµµ ¸ð¸¥´Ù. ÇÏÁö¸¸ ÀÌ ÇÔ¼öµéÀÇ ¸®ÅÏ°ªÀ» Á¡°ËÇÏ´Â Äڵ峪 bReadOnly¸¦ Á÷Á¢ Á¡°ËÇÏ´Â Äڵ峪 °á±¹ ¾çÀº ºñ½ÁÇÏ´Ù.