1.¿É¼Ç Ãß°¡

°¡.ÈÙ ¹öÆ° È°¿ë

ÀÌ Àý¿¡¼­´Â ¿©·¯ °¡Áö ¿É¼ÇµéÀ» ´õ Ãß°¡ÇÑ´Ù. ¿É¼ÇÀ̶õ »ç¿ëÀÚ¿¡°Ô ÆíÁý±â¸¦ ´Ù¾çÇÑ ¹æ¹ýÀ¸·Î È°¿ëÇÒ ¼ö ÀÖ´Â ±âȸ¸¦ Á¦°øÇÏ´Â ¼ö´ÜÀ̹ǷΠ¸¹À»¼ö·Ï ÁÁ´Ù. ´ëºÎºÐÀÇ »ç¶÷µéÀÌ Àß ¾È¾²´Â ¿É¼ÇÀÏÁö¶óµµ °¡²ûÀº ¾ÆÁÖ À¯¿ëÇÏ°Ô È°¿ëµÉ ¼öµµ ÀÖÀ¸¹Ç·Î ¿É¼ÇÀÌ ¸¹´Ù°í Çؼ­ ¾²±â ¾î·Á¿öÁö´Â °ÍÀº ¾Æ´Ï´Ù. ´ë½Å Ãʺ¸ÀÚµéÀÌ ³Ê¹« ¾î·Á¿öÇÒ¸¸ÇÑ ¿É¼ÇÀº µðÆúÆ®·Î ¼±ÅÃÇØ µÎÁö ¾ÊÀ¸¸é µÈ´Ù. ¾ÕÀ¸·Î Ãß°¡ÇÒ ¿É¼ÇµéÀ» À§ÇØ ÇÊ¿äÇÑ ¸â¹ö º¯¼öµéÀ» ÀÏ°ý ¼±¾ðÇÏ°í »ý¼ºÀÚ¿¡¼­ ÃʱâÈ­ÇÑ´Ù.

 

class CApiEdit

{

private:

     ....

     int nWheel;

     int nCtrlWheel;

     int nShiftWheel;

     int nCtrlShiftWheel;

     BOOL bSwapDragButton;

     int CharExtra;

     int WordExtra;

     int CharRatio;

     int CursorEdit;

     BOOL bSmartSpace;

 

public:

     ....

     int GetWheel() { return nWheel; }

     int GetCtrlWheel() { return nCtrlWheel; }

     int GetShiftWheel() { return nShiftWheel; }

     int GetCtrlShiftWheel() { return nCtrlShiftWheel; }

     void SetWheel(int aWheel) { nWheel=aWheel; }

     void SetCtrlWheel(int aWheel) { nCtrlWheel=aWheel; }

     void SetShiftWheel(int aWheel) { nShiftWheel=aWheel; }

     void SetCtrlShiftWheel(int aWheel) { nCtrlShiftWheel=aWheel; }

     BOOL GetSwapDragButton() { return bSwapDragButton; }

     void SetSwapDragButton(int aValue) { bSwapDragButton=aValue; }

     int GetCharExtra() { return CharExtra; }

     void SetCharExtra(int aValue);

     int GetWordExtra() { return WordExtra; }

     void SetWordExtra(int aValue);

     int GetCharRatio() { return CharRatio; }

     void SetCharRatio(int aValue);

     int GetCursorEdit() { return CursorEdit; }

     void SetCursorEdit(int aValue) { CursorEdit=aValue; }

     BOOL GetSmartSpace() { return bSmartSpace; }

     void SetSmartSpace(BOOL aValue) { bSmartSpace=aValue; }

};

 

CApiEdit::CApiEdit()

{

     ....

     nWheel=1;

     nCtrlWheel=6;

     nShiftWheel=5;

     nCtrlShiftWheel=7;

     bSwapDragButton=FALSE;

     CharExtra=100;

     WordExtra=100;

     CharRatio=100;

     CursorEdit=0;

     bSmartSpace=FALSE;

}

 

°¢ ¸â¹öÀÇ ¿ªÇÒ¿¡ ´ëÇؼ­´Â ÇØ´ç ¿É¼ÇÀ» Ãß°¡ÇÒ ¶§ ¼³¸íÇϱâ·Î ÇÑ´Ù. ÈÙ ¸¶¿ì½ºÀÇ ÈÙ ¹öÆ°Àº ³»¿ëÀ» ½ºÅ©·ÑÇÒ ¶§ ÁÖ·Î »ç¿ëµÇÁö¸¸ ²À ½ºÅ©·Ñ¿¡¸¸ »ç¿ëÇ϶ó´Â ¹ýÀº ¾ø´Ù. ¹°·Ð ÁÖ ±â´ÉÀº ½ºÅ©·ÑÀÌÁö¸¸ Ctrl, ShiftÅ°¿Í Á¶ÇÕÇÏ¸é ºü¸¥ ¼Óµµ·Î °ªÀ» º¯°æÇÏ´Â ´Ù¸¥ ±â´ÉÀ» ÇÒ´çÇÒ ¼öµµ ÀÖ´Ù. ÈÙÀº ¿À¸¥¼ÕÀ¸·Î Æí¸®ÇÏ°Ô Á¶ÀÛÇÒ ¼ö ÀÖ´Â Æí¸®ÇÑ µµ±¸À̹ǷΠÀû±ØÀûÀ¸·Î È°¿ëÇØ¾ß ÇÑ´Ù. ÈÙ ¹öÆ°ÀÇ ±â´ÉÀº ½ÇÁ¦·Î ÈÙÀ» ±¼¸®±â Àü¿¡´Â µ¿ÀÛÇÏÁö ¾ÊÀ¸¸ç ±â´ÉÀÌ ¹Ù²ï´Ù°í Çؼ­ ºÎ°¡ÀûÀΠ󸮰¡ ´çÀå ÇÊ¿äÇÑ °ÍÀº ¾Æ´Ï¹Ç·Î ¾×¼¼½º ÇÔ¼öµéÀº ¸ðµÎ ÀζóÀÎÀ¸·Î ¼±¾ðÇß´Ù. ÈÙ ¹öÆ°À¸·Î ´ÙÀ½°ú °°Àº ´Ù¾çÇÑ µ¿ÀÛÀ» ÇÒ ¼ö ÀÖ´Ù.

 

µ¿ÀÛ

¼³¸í

0

¾Æ¹« µ¿ÀÛµµ ÇÏÁö ¾Ê´Â´Ù.

1

»óÇÏ·Î ¼¼ ÁÙ¾¿ ½ºÅ©·ÑÇÑ´Ù. ÈÙÀÇ ±âº» ±â´ÉÀÌ´Ù.

2

»óÇÏ·Î ÇÑ ÁÙ¾¿¸¸ ½ºÅ©·ÑÇÑ´Ù.

3

ÆäÀÌÁö ´ÜÀ§·Î ½ºÅ©·ÑÇÑ´Ù.

4

¹Ý ÆäÀÌÁö ´ÜÀ§·Î ½ºÅ©·ÑÇÑ´Ù.

5

ÁÙ°£À» Á¶Á¤ÇÑ´Ù.

6

±Û²Ã Å©±â¸¦ Á¶Á¤ÇÑ´Ù.

7

Ãë¼Ò ¹× Àç½ÇÇàÇÑ´Ù.

 

¸â¹ö º¯¼öµéÀº ÈÙ ¹öÆ°°ú Á¶ÇÕÅ°¸¦ Á¶ÀÛÇÒ ¶§ ¾î¶² µ¿ÀÛÀ» ÇÒ °ÍÀΰ¡¸¦ ±â¾ïÇÑ´Ù. CtrlÅ°¿Í Shift Á¶ÇÕÅ°¸¦ »ç¿ëÇÒ ¼ö ÀÖÀ¸¹Ç·Î 4°¡Áö µ¿ÀÛÀ» ÇÒ ¼ö ÀÖ´Ù. »ý¼ºÀÚ¿¡¼­ ½¬ÇÁÆ® ÈÙÀº ÁÙ°£ Á¶Á¤À¸·Î,  ÄÁÆ®·Ñ ÈÙÀº ±Û²Ã Å©±â º¯°æÀ¸·Î µðÆúÆ® ¼³Á¤Çߴµ¥ °¡Àå ½Ç¿ëÀûÀÎ ¿É¼ÇÀÎ °Í °°´Ù. OnMouseWheel¿¡ Äڵ带 ÀÛ¼ºÇÑ´Ù. º»¿¬ÀÇ ½ºÅ©·Ñ ±â´ÉÀº ½ºÅ©·Ñ ´ÜÀ§¿¡ º¯È­¸¦ ÁÙ ¼ö ÀÖ¾î¾ß ÇϹǷΠScrollÀ̶ó´Â º°µµÀÇ ÇÔ¼ö¿¡°Ô Àü´ã½ÃÅ°°í ÀÌ ÇÔ¼ö´Â ÀÌÁ¦ ¼³Á¤µÈ´ë·Î ¸í·ÉÀ» ó¸®ÇÑ´Ù.

 

void CApiEditText::OnMouseWheel(HWND hWnd, WPARAM wParam, LPARAM lParam)

{

     short zDelta;

     UINT Lines;

     int Unit;

     int nScroll=0;

     int Value;

     LOGFONT tFont;

     BOOL bShift, bControl;

     int action;

 

     bShift=((GetKeyState(VK_SHIFT) & 0x8000) != 0);

     bControl=((GetKeyState(VK_CONTROL) & 0x8000) != 0);

 

     SystemParametersInfo(SPI_GETWHEELSCROLLLINES,0,&Lines,0);

     Unit=WHEEL_DELTA/Lines;

     zDelta=(short)HIWORD(wParam);

     SumDelta += zDelta;

     while (abs(SumDelta) >= Unit) {

          if (SumDelta > 0) {

              nScroll--;

              SumDelta-=Unit;

          } else {

              nScroll++;

              SumDelta+=Unit;

          }

     }

 

     // ÄÁÆ®·Ñ Å°¿Í ½¬ÇÁƮŰÀÇ »óÅ·κÎÅÍ µ¿ÀÛÀ» °áÁ¤ÇÑ´Ù.

     if (bControl) {

          if (bShift) {

              action=pFrame->nCtrlShiftWheel;

          } else {

              action=pFrame->nCtrlWheel;

          }

     } else {

          if (bShift) {

              action=pFrame->nShiftWheel;

          } else {

              action=pFrame->nWheel;

          }

     }

 

     if (action==1) {

          Scroll(nScroll);

     } else {

          while ((UINT)abs(nScroll) >= Lines) {

              switch (action) {

              case 0:

                   break;

              case 2:

                   if (nScroll > 0) {

                        Scroll(1);

                   } else {

                        Scroll(-1);

                   }

                   break;

              case 3:

                   if (nScroll > 0) {

                        SendMessage(hWnd,WM_VSCROLL,MAKELONG(SB_PAGEDOWN,0),0);

                   } else {

                        SendMessage(hWnd,WM_VSCROLL,MAKELONG(SB_PAGEUP,0),0);

                   }

                   break;

              case 4:

                   if (nScroll > 0) {

                        Scroll(Fheight/LineHeight/2);

                   } else {

                        Scroll(-Fheight/LineHeight/2);

                   }

                   break;

              case 5:

                   Value=GetLineRatio();

                   if (nScroll > 0) {

                        Value=max(Value-10,100);

                   } else {

                        Value=min(Value+10,1000);

                   }

                   SetLineRatio(Value);

                   break;

              case 6:

                   GetFont(&tFont);

                   if (tFont.lfHeight != 0) {

                        if (nScroll > 0) {

                            tFont.lfHeight=max(tFont.lfHeight-3,12);

                        } else {

                            tFont.lfHeight=min(tFont.lfHeight+3,128);

                        }

                        SetFont(&tFont);

                   }

                   break;

              case 7:

                   if (nScroll > 0) {

                        if (pFrame->CanUndo()) {

                            pFrame->Undo();

                        }

                   } else {

                        if (pFrame->CanRedo()) {

                            pFrame->Redo();

                        }

                   }

                   break;

              }

              if (nScroll > 0) {

                   nScroll -= Lines;

              } else {

                   nScroll += Lines;

              }

          }

     }

}

 

CtrlÅ°¸¦ ´©¸¥ ä·Î ÈÙÀ» ±¼¸®¸é ÆäÀÌÁö ´ÜÀ§·Î ½ºÅ©·ÑµÇ¸ç ShiftÅ°¸¦ ´©¸£¸é ¹Ý ÆäÀÌÁö ´ÜÀ§·Î ½ºÅ©·ÑµÈ´Ù. Scroll ÇÔ¼ö°¡ Àß ÀÛ¼ºµÇ¾î ÀÖÀ¸¹Ç·Î ½ºÅ©·Ñ ´ÜÀ§¸¸ °è»êÇؼ­ ÀÌ ÇÔ¼ö¸¸ È£ÃâÇÏ¸é µÈ´Ù. ±Û²Ã º¯°æÀ̳ª ÁÙ°£ Á¶Á¤ µîµµ ¸â¹ö ÇÔ¼öµéÀÌ ÀÌ¹Ì ÀÛ¼ºµÇ¾î ÀÖÀ¸¹Ç·Î ÇöÀç°ªÀ» ¾à°£¾¿ Áõ°¨½ÃÅ°±â¸¸ ÇÏ¸é µÈ´Ù.

³ª.¹öÆ° ¹Ù²Ù±â

ApiEdit´Â ¼±Åà ¿µ¿ªÀ» ¸¶¿ì½º·Î µå·¡±×ÇÏ¸é ¹®ÀÚ¿­À» µå·ÓÇÑ À§Ä¡·Î À̵¿ÇÏ´Â ±â´ÉÀÌ ÀÖ¾î ¹®Àå Àç¹èÄ¡¸¦ ½±°Ô ÇÒ ¼ö ÀÖ´Ù. ´Ü, CtrlÅ°¸¦ ´©¸¥ ä·Î µå·ÓÇϸé À̵¿ÀÌ ¾Æ´Ñ º¹»ç¸¦ ¼öÇàÇÑ´Ù. ´Ü¼ø µå·¡±×´Â À̵¿ÀÌ°í Ctrl µå·¡±×´Â º¹»çÀε¥ º¹»ç ÀÛ¾÷º¸´Ù À̵¿ ÀÛ¾÷ÀÇ ºóµµ°¡ ÈξÀ ´õ ³ô±â ¶§¹®¿¡ À̵¿À» ´õ ½±°Ô ÇÒ ¼ö ÀÖµµ·Ï Çß´Ù. ±×·±µ¥ º¹»ç¸¦ ´õ ¸¹ÀÌ ÇÏ´Â »ç¶÷À̶ó¸é ¸Å¹ø CtrlÅ°¸¦ ´©¸£°í ÀÖ¾î¾ß ÇϹǷΠ¹«Ã´ ºÒÆíÇѵ¥ ÀÌ·± »ç¶÷À» À§ÇØ µÎ µ¿ÀÛÀ» Åä±ÛÇÏ´Â ±â´ÉÀ» ÀÛ¼ºÇØ º¸ÀÚ.

 

void CApiEditText::OnMouseMove(HWND hWnd, int x, int y, UINT keyFlags)

{

     ....

     bControl=((GetKeyState(VK_CONTROL) & 0x8000) != 0);

     if (pFrame->bSwapDragButton) {

          bControl=!bControl;

     }

 

void CApiEditText::OnLButtonUp(HWND hWnd, int x, int y, UINT keyFlags)

{

     ....

     bControl=((GetKeyState(VK_CONTROL) & 0x8000) != 0);

     if (pFrame->bSwapDragButton) {

          bControl=!bControl;

     }

     ....

 

¸¶¿ì½º À̵¿½Ã¿Í µå·Ó½Ã¿¡ Ctrl Å°ÀÇ ´­¸²À» °ËÃâÇÑ °á°ú¸¦ ¹Ý´ë·Î µÚÁý±â¸¸ ÇÏ¸é µÈ´Ù. OnKey ÇÔ¼ö¿¡´Â Ctrl Å°ÀÇ »óÅ¿¡ µû¶ó Ä¿¼­¸¦ º¯°æÇÏ´Â Äڵ尡 Àִµ¥ ÀÌ Äڵ嵵 ¼öÁ¤ÇÏ¿© ¼³Á¤µÈ ¿É¼Ç´ë·Î Ä¿¼­¸¦ Ç¥½ÃÇÑ´Ù.

 

void CApiEdit::OnKey(HWND hWnd, UINT vk, BOOL fDown, int cRepeat, UINT flags)

{

    BOOL bCopy;

 

     bShift=((GetKeyState(VK_SHIFT) & 0x8000) != 0);

     bControl=((GetKeyState(VK_CONTROL) & 0x8000) != 0);

 

     if (bDragSel) {

          if (vk==VK_CONTROL) {

           bCopy=fDown;

           if (pFrame->bSwapDragButton) {

               bCopy=!bCopy;

           }

           if (bCopy) {

                   SetCursor(hCCopy);

              } else {

                   SetCursor(hCMove);

               }

          }

          return;

     }

 

´Ü¼øÈ÷ µÎ ±â´ÉÀ» ¹Ù²Ù´Â °ÍÀ̹ǷΠÄڵ嵵 °£´ÜÇÏ´Ù. º¹»çÀÛ¾÷À» ¸¹ÀÌ ÇÏ´Â »ç¶÷¿¡°Ô´Â ÀÌ ±â´ÉÀÌ ²Ï À¯¿ëÇÒ °ÍÀÌ´Ù.

´Ù.ÀÚ°£

ÀÚ°£(CharExtra)Àº ±ÛÀÚ »çÀÌÀÇ °£°ÝÀ̸ç, ´Ü¾î °£°Ý(WordExtra)Àº ´Ü¾î »çÀÌÀÇ °£°ÝÀÌµÇ ±¸Ã¼ÀûÀ¸·Î ´Ü¾î »çÀÌ¿¡ »ðÀԵǴ °ø¹éÀÇ ÆøÀ̶ó°í º¸¸é µÈ´Ù. ÀåÆò(CharRatio)Àº ±ÛÀÚÀÇ °¡·Î, ¼¼·Î ºñÀ²ÀÌ´Ù. ¹®ÀÚ³ª ´Ü¾î »çÀÌÀÇ °£°Ý, ±ÛÀÚÀÇ Á¾È¾ºñ°¡ ¹Ù²î¸é Á¤·Ä ·çƾ°ú ¼±Åà ·çƾ µî ¸¹Àº ºÎºÐÀÌ ¿µÇâÀ» ¹ÞÀ¸¹Ç·Î ÀÌ ¿É¼ÇµéÀ» Á¦´ë·Î ±¸ÇöÇÏ´Â °ÍÀº »ç½Ç ½±Áö°¡ ¾Ê´Ù. ±×·¯³ª ´ÙÇàÈ÷ ApiEdit´Â ±¸Á¶»ó ÀÌ ¼¼ °¡Áö ¿É¼ÇÀ» Àû¿ëÇϱ⠾ÆÁÖ ½±°Ô µÇ¾î Àִµ¥ Á¶»çµÇ´Â ¹®ÀÚÀÇ Æø¸¸ Àß Á¶ÀÛÇÏ¸é µÈ´Ù.

ÀÌ ¼¼ ¿É¼ÇÀº ¸ðµÎ ¹éºÐÀ²ÀÌ¸ç »ý¼ºÀÚ¿¡¼­ ¸ðµÎ 100À¸·Î ÃʱâÈ­Çß´Ù. Áï, º°´Ù¸¥ Á¶ÀÛÀ» ÇÏÁö ¾ÊÀ» ¶§ÀÇ °£°Ý°ú ÀåÆòÀÌ µðÆúÆ®ÀÌ´Ù. ¿É¼Ç°ªÀ» Àд Get ÇÔ¼öµéÀº ÀζóÀÎÀ¸·Î ÀÛ¼ºÇß°í º¯°æÇÏ´Â Set ÇÔ¼öµéÀº ´ÙÀ½°ú °°ÀÌ ÀÛ¼ºÇÑ´Ù. °£°ÝÀ̳ª ÀåÆòÀÌ ¹Ù²î´Â °ÍÀº ±Û²ÃÀÌ ¹Ù²î´Â °Í°ú È¿°ú°¡ °°À¸¹Ç·Î SetFont ÇÔ¼ö¸¦ È£ÃâÇÏ¸é µÈ´Ù.

 

void CApiEdit::SetCharExtra(int aValue)

{

     CharExtra=aValue;

     for (int aet=0;aet<4 && arView[aet];aet++) {

          arView[aet]->SetFont(&arView[aet]->logfont);

     }

}

 

void CApiEdit::SetWordExtra(int aValue)

{

     WordExtra=aValue;

     for (int aet=0;aet<4 && arView[aet];aet++) {

          arView[aet]->SetFont(&arView[aet]->logfont);

     }

}

 

void CApiEdit::SetCharRatio(int aValue)

{

     CharRatio=aValue;

     for (int aet=0;aet<4 && arView[aet];aet++) {

          arView[aet]->SetFont(&arView[aet]->logfont);

     }

}

 

´Ü¾î °£°ÝÀ̶õ °ø¹éÀÇ ÆøÀ» ½ÇÁ¦Æøº¸´Ù ¾ó¸¶¸¸Å­ ´õ ´Ã¸± °ÍÀΰ¡¸¦ ÁöÁ¤ÇÑ´Ù. ºñÀ²·ÎºÎÅÍ ½Ç½Ã°£ °è»êÇÒ ¼ö ÀÖÁö¸¸ ÀÚÁÖ ÂüÁ¶µÇ¹Ç·Î º°µµÀÇ º¯¼ö¿¡ ¹Ì¸® ±¸ÇØ ³õ´Â °ÍÀÌ ÁÁ´Ù. °ø¹éÆøÀ» ±â¾ïÇÏ´Â SpaceWidth ¸â¹ö º¯¼ö¸¦ ¼±¾ðÇÏ°í PrepareCharWidth¿¡¼­ ÃʱâÈ­ÇÑ´Ù.

 

class CApiEditText : public CWindow

{

protected:

     ....

     int SpaceWidth;

 

void CApiEditText::PrepareCharWidth(HDC hdc)

{

     for (i=0;i<=255;i++) {

          Char[0]=i;

          GetTextExtentPoint32(hdc, Char, 1, &sz);

          arChWidth[i]=(BYTE)sz.cx;

     }

    SpaceWidth=arChWidth[' ']*pFrame->CharExtra*pFrame->WordExtra/100/100;

     ....

 

°ø¹éÀº ÀÚ°£°ú ´Ü¾î °£°Ý ¿É¼ÇÀÇ ¿µÇâÀ» ¸ðµÎ ¹Þ´Â´Ù. ¿ø·¡ÀÇ °ø¹éÆø¿¡ ÀÚ°£ ºñÀ²°ú ´Ü¾î °£°Ý ºñÀ²À» °öÇÏ¸é ½ÇÁ¦ Àû¿ëÇÒ °ø¹éÆøÀ» ±¸ÇÒ ¼ö ÀÖ´Ù. À̶§ ³ª´°¼À¿¡ ÀÇÇÑ ¿ÀÂ÷¸¦ ÃÖ¼ÒÈ­Çϱâ À§ÇØ °¡±ÞÀûÀÌ¸é °ö¼ÀÀ» ¸ÕÀúÇÏ°í ³ª´°¼ÀÀ» ³ªÁß¿¡ ÇÏ´Â °ÍÀÌ ÁÁ´Ù. GetCharWidth¿¡¼­ ¸ðµç ¹®ÀÚ¿¡ ÀÚ°£ ¿É¼ÇÀ» Àû¿ëÇÏ°í ´Ü¾î °£°ÝÀ» À§ÇØ °ø¹éÆøÀº µû·Î Á¶»çÇÏ¿© ¸®ÅÏÇÑ´Ù.

 

int CApiEditText::GetCharWidth(TCHAR *ch, int len)

{

     SIZE sz;

     HDC hdc;

     HFONT hFont, hOldFont=NULL;

     int code;

    int idx;

 

     if (len==1) {

        idx=*(BYTE *)ch;

        if (idx==' ') {

           return SpaceWidth;

        } else {

           return arChWidth[idx]*pFrame->CharExtra/100;

        }

     } else {

          ....

        return arHanWidth[code-0x8000]*pFrame->CharExtra/100;

     }

}

 

¹®ÀÚÆøÀ» ÀÚ°£¸¸Å­ ´ÃÀ̰ųª ÁÙÀ̱⸸ ÇÏ¸é µÈ´Ù. ±ÛÀÚÀÇ ÆøÀÌ ÀÌ·¸°Ô ¹Ù²î¸é Á¤·ÄÀ̳ª Ãâ·Â ÇÔ¼öµéµµ ¸ðµÎ ¼öÁ¤Çؾ߰ÚÁö¸¸ ´ÙÇàÈ÷ ÀÌ ÇÔ¼öµéÀº ¼öÁ¤ÇÒ ÇÊ¿ä°¡ ¾ø´Ù. ¿Ö³ÄÇÏ¸é ¹®ÀÚÀÇ ÆøÀÌ ÇÊ¿äÇÒ ¶§ Á÷Á¢ ±¸ÇÏÁö ¾Ê°í Ç×»ó GetCharWidth¸¦ È£ÃâÇϹǷΠÀÌ¹Ì ÀÚ°£ÀÌ Àû¿ëµÈ ÆøÀ» ¹Þ±â ¶§¹®ÀÌ´Ù. Á÷Á¢ ¹®ÀÚÆøÀ» ÂüÁ¶ÇÏ´Â ¸î ±ºµ¥¸¸ ¼öÁ¤ÇÏ¸é µÈ´Ù. ´ëÇ¥ÀûÀÎ ¿¹´Â SetCaret ÇÔ¼öÀÌ´Ù.

 

void CApiEditText::SetCaret(BOOL bUpdatePrevX/*=TRUE*/, BOOL bScrollToCaret/*=TRUE*/)

{

     ....

     if (bOvr) {

          if (pFrame->IsDBCS(toff)) {

              if (pFrame->IsEnterCode(toff)) {

                   caretwidth= arChWidth[' '];

 

°ø¹éÀÇ ÆøÀ» arChWidth¹è¿­¿¡¼­ ¹Ù·Î ±¸ÇßÀ¸³ª ÀÌÁ¦ ÀÚ°£°ú ´Ü¾î °£°Ý ¿É¼ÇÀÌ Àû¿ëµÈ SpaceWidth °ªÀ» »ç¿ëÇØ¾ß ÇÑ´Ù. arChWidth[' ']¸¦ ¸ðµÎ SpaceWidth·Î ¼öÁ¤ÇÑ´Ù. arChWidth[0x20]¶ó°í µÇ¾î ÀÖ´Â °÷µµ ¸¶Âù°¡Áö·Î ¼öÁ¤ÇØ¾ß ÇÑ´Ù. ApiEditText.cppÀÇ ¸ðµç °÷À» ã¾Æ ġȯÇ쵂 ´Ü PrepareCharWidth¿¡¼­ SpaceWidth¸¦ óÀ½ °è»êÇÏ´Â °÷Àº Á¦¿ÜÇØ¾ß ÇÑ´Ù. ÃÑ 17 ±ºµ¥°¡ ÀÖ´Ù.

SapceWidth º¯¼ö ´ë½Å GetCharWidth(" ",1) ÇÔ¼ö È£Ãâ¹®À¸·Î ½Ç½Ã°£À¸·Î ±¸ÇÒ ¼öµµ ÀÖÀ¸³ª º°µµÀÇ º¯¼ö¸¦ »ç¿ëÇÑ ÀÌÀ¯´Â ¼Óµµº¸´Ù´Â Å©±â¸¦ ÁÙÀ̱â À§Çؼ­ÀÌ´Ù. ÇÔ¼ö È£Ãâ¹®Àº º¯¼ö ÂüÁ¶¹®¿¡ ºñÇØ »ý°¢º¸´Ù ¿ë·®À» ¸¹ÀÌ Â÷ÁöÇÑ´Ù. ÀÚ°£°ú ´Ü¾î °£°ÝÀº ¿Ï·áµÇ¾ú´Ù. ÀåÆòÀº SetFont¿¡¼­ ±Û²ÃÀ» ¸¸µé ¶§ Àû¿ëÇÑ´Ù.

 

void CApiEditText::SetFont(LOGFONT *alogfont)

{

     ....

     logfont=*alogfont;

     hdc=GetDC(hWnd);

     if (logfont.lfHeight != 0) {

        if (pFrame->CharRatio != 100) {

           logfont.lfWidth=logfont.lfHeight*pFrame->CharRatio/200;

        } else {

           logfont.lfWidth=0;

        }

          hMainFont=CreateFontIndirect(&logfont);

          hOldFont=(HFONT)SelectObject(hdc,hMainFont);

     }

 

ÀåÆòÀÌ 100ÀÌ ¾Æ´Ï¸é ±Û²ÃÀÇ ÆøÀ» 0À¸·Î µÎÁö ¾Ê°í Á÷Á¢ °è»êÇÑ´Ù. ÆøÀÌ ³ôÀÌÀÇ Àý¹ÝÀÏ ¶§°¡ ÀåÆò 100%À̹ǷΠCharRatio¸¦ °öÇÏ°í 200À¸·Î ³ª´©¸é µÈ´Ù. GetCharWidth¿¡µµ µ¿ÀÏÇÑ Äڵ尡 ÇÊ¿äÇÏ´Ù.

 

int CApiEditText::GetCharWidth(TCHAR *ch, int len)

{

     ....

          if (arHanWidth[code-0x8000]==0xff) {

              hdc=GetDC(hWnd);

              if (logfont.lfHeight != 0) {

               if (pFrame->CharRatio != 100) {

                   logfont.lfWidth=logfont.lfHeight*pFrame->CharRatio/200;

               }

                   hFont=CreateFontIndirect(&logfont);

                   hOldFont=(HFONT)SelectObject(hdc,hFont);

              }

 

ij½ÃµÇÁö ¾ÊÀº DBCS ¹®ÀÚÀÇ ÆøÀ» Á÷Á¢ °è»êÇÒ ¶§ ÀåÆòÀ» Àû¿ëÇÑ´Ù. ÀåÆò Á¤º¸´Â LOGFONT ±¸Á¶Ã¼¿¡´Â ±â·ÏµÇÁö ¾Ê´Â Á¤º¸ÀÌ´Ù. ±×·¡¼­ ÀåÆòÀ» ÁöÁ¤ÇÑ ÈÄ º¸±â ¸Þ´ºÀÇ ¹Ì¸® µî·ÏµÈ ±Û²ÃÀ» ÁöÁ¤Çϸé ÀåÆòµµ ±×´ë·Î Àû¿ëµÇ¾î ¹ö¸°´Ù. Áï, Çѹø ÁöÁ¤ÇÑ ÀåÆòÀº ±Û²ÃÀÇ ¸ð¾çÀ̳ª Å©±â°¡ ¾î¶»°Ô ¹Ù²î´õ¶óµµ Áö¼ÓÀûÀ¸·Î Àû¿ëµÈ´Ù. ¾ÆÁ÷ ´ëÈ­»óÀÚ¿¡¼­ ¿É¼ÇÀ» Á÷Á¢ º¯°æÇÒ ¼ö´Â ¾øÁö¸¸ »ý¼ºÀÚÀÇ ÃʱⰪÀ» ¼öÁ¤ÇÏ¸é ´ÙÀ½ ÇüÅ·Π¹®¼­¸¦ ÀÐÀ» ¼ö ÀÖ´Ù.

ÀÚ°£°ú ´Ü¾î °£°ÝÀ» ¿øÇϴ´ë·Î ÁöÁ¤ÇÒ ¼ö ÀÖ¾î ¼±ÅÃÀÇ ÆøÀ» ³ÐÇû´Ù. ±×·¯³ª ÀÌ·± ±Û²Ã¿¡ ´ëÇÑ ´Ù¾çÇÑ º¯°æÀÌ ¾ÆÁ÷ Àμ⿡´Â Àû¿ëµÇÁö ¾Ê´Â´Ù. Àμâ´Â ÅؽºÆ® ÆíÁý±âÀÇ ´Ù¸¥ ±â´É°ú´Â ´Ù¼Ò µ¶¸³ÀûÀÎ ±â´ÉÀÌ¶ó º°´Ù¸¥ ¼öÁ¤À» ÇÏÁö ¾Ê¾Ò°í ±×·¯´Ù º¸´Ï ÀμⰡ ÇöÀçÀÇ ´ç±Ù ±â´ÉÀ» Àß µÞ¹ÞħÇÏÁö ¸øÇÑ´Ù. ¹æ±Ý Ãß°¡ÇÑ ÀåÆòµµ ¹°·ÐÀÌ°í ÆíÁý±âÀÇ ÇöÀç ±Û²Ãµµ Àû¿ëµÇÁö ¾Ê´Âµ¥ ±âº»ÀûÀÎ ¿É¼ÇÀº ÀνÄÇϵµ·Ï ¼öÁ¤ÇØ º¸ÀÚ. Print.cppÀÇ PrintDoc ÇÔ¼ö ÀϺκθ¸ ¼öÁ¤ÇÏ¸é µÈ´Ù.

 

BOOL PrintDoc(HWND hChild, HDC pdc, int nPages, int nCopies, int nFirst, int nFinal)

{

     ....

     prtfont=NULL;

     HDC hdc;

     int CharRatio;

     // ½Ã½ºÅÛ ±Û²ÃÀÌ ¾Æ´Ò ¶§¸¸ ±Û²ÃÀ» ¼³Á¤ÇÑ´Ù.

     if (Option.prtFont.lfHeight != 0) {

          // È­¸é ±Û²ÃÀ» »ç¿ëÇÒ °æ¿ì

          if (Option.prtFont.lfHeight==-1) {

              pSi->Ae.GetFont(&tLogFont);

              // È­¸é ±Û²ÃÀÌ ½Ã½ºÅÛ ±Û²ÃÀÌ¸é ¾Æ¹« °Íµµ ÇÒ ÇÊ¿ä¾ø´Ù.

              if (tLogFont.lfHeight != 0) {

                   // È­¸é ±Û²ÃÀÇ Çȼ¿ ´ÜÀ§´Â Æ÷ÀÎÆ®·Î º¯È¯ÇÑ´Ù.

                   if (tLogFont.lfWidth == 0) {

                        CharRatio=100;

                   } else {

                        CharRatio=tLogFont.lfWidth*200/tLogFont.lfHeight;

                   }

                   hdc=GetDC(NULL);

                   tLogFont.lfHeight=tLogFont.lfHeight*72/GetDeviceCaps(hdc,LOGPIXELSY);

                   ReleaseDC(NULL,hdc);

              }

          } else {

              tLogFont=Option.prtFont;

          }

          if (tLogFont.lfHeight) {

              tLogFont.lfHeight=tLogFont.lfHeight*dpiY/72;

              if (CharRatio != 100) {

                   tLogFont.lfWidth=tLogFont.lfHeight*CharRatio/200;

              } else {

                   tLogFont.lfWidth=0;

              }

              prtfont=CreateFontIndirect(&tLogFont);

              oldfont=(HFONT)SelectObject(pdc,prtfont);

          }

     }

 

ÀÌÀü ¹öÀü¿¡¼­´Â ÇöÀç ±Û²ÃÀ» »ç¿ëÇÒ °æ¿ì Option ±¸Á¶Ã¼ÀÇ ±Û²Ã Á¤º¸¸¦ °ð¹Ù·Î »ç¿ëÇß¾ú´Ù. ¹®¼­Ã¢ÀÇ ±Û²ÃÀº SetSetting¿¡¼­ Option ±¸Á¶Ã¼ÀÇ Á¤º¸´ë·Î ¼³Á¤ÇϹǷΠ´ç¿¬ÇßÁö¸¸ ÀÌÁ¦´Â »çÁ¤ÀÌ ´Þ¶óÁ³´Ù. ¸¶¿ì½ºÀÇ ÈÙÀ» µå·¡±×Çؼ­ ±Û²Ã Å©±â¸¦ ¾ðÁ¦µçÁö º¯°æÇÒ ¼ö Àֱ⠶§¹®¿¡ Option ±¸Á¶Ã¼ÀÇ ±Û²Ã°ú ÆíÁýâÀÇ ±Û²ÃÀÌ ´Þ¶óÁú ¼öµµ ÀÖ´Ù. ¶ÇÇÑ 1.0¿¡¼­µµ ÇöÀçâÀÇ ±Û²ÃÀ» ÀÓ½ÃÀûÀ¸·Î ¹Ù²Ù´Â ±â´ÉÀÌ ÀÖ¾úÀ¸¹Ç·Î Option ±¸Á¶Ã¼ÀÇ Á¤º¸¸¦ ÂüÁ¶ÇÏ´Â °ÍÀº ¸ÂÁö ¾Ê´Ù.

±×·¡¼­ ÇöÀçâÀÇ GetFont ÇÔ¼ö·Î ±¸ÇÑ ½ÇÁ¦ »ç¿ëÁßÀÎ ±Û²Ã ¼³Á¤À» ÀÐ°í ¿©±â¿¡ ÀåÆòµµ Àû¿ëÇÑ´Ù. ±×·±µ¥ ¿©±â¿¡ ¾à°£ÀÇ ¹®Á¦°¡ Àִµ¥ Option ±¸Á¶Ã¼ÀÇ ±Û²Ã Å©±â´Â Æ÷ÀÎÆ® ´ÜÀ§ÀÌÁö¸¸ ÆíÁýâÀÇ ±Û²ÃÀº Çȼ¿´ÜÀ§¶ó´Â Á¡ÀÌ´Ù. ±×·¡¼­ ÆíÁýâÀÇ ±Û²Ã Å©±â¸¦ Æ÷ÀÎÅÍ ´ÜÀ§·Î º¯È¯ÇØ µÐ´Ù. ÇÁ¸°ÅÍ DC¿¡ ÃÖÁ¾ÀûÀ¸·Î »ç¿ëµÇ´Â ±Û²ÃÀº ÇÁ¸°ÅÍÀÇ Çػ󵵿¡ ¸Â°Ô ´Ù½Ã Çȼ¿°ªÀ» °è»êÇÏÁö¸¸ ÀÌ °è»êÀ» À§Çؼ­´Â Æ÷ÀÎÆ® ´ÜÀ§°¡ ÇÊ¿äÇÏ´Ù.

ÀåÆòÀÌ ÁöÁ¤µÇ¾î ÀÖÀ¸¸é ÀÌ ÀåÆòµµ Æ÷ÀÎÆ® ´ÜÀ§¿¡ ¸Â°Ô °è»êÇØ¾ß ÇÑ´Ù. ÆíÁýâ¿¡ ¼³Á¤µÈ ÀåÆòÀº ±ÛÀÚÀÇ Æø°ú ³ôÀÌ ºñÀ²·ÎºÎÅÍ ±¸ÇÏ°í ÇÁ¸°ÅÍ DC¿¡¼­ ÀÌ ºñÀ²·ÎºÎÅÍ ±ÛÀÚÆøÀ» ´Ù½Ã ÁöÁ¤ÇÑ´Ù. ÇöÀç ApiEdit¿¡´Â ÀåÆòÀ» Option¿¡ ÁöÁ¤µÈ °Í ¿ÜÀÇ °ÍÀ¸·Î º¯°æÇÏ´Â ±â´ÉÀÌ ¾øÀ¸¹Ç·Î ÀåÆòÀº Option¿¡¼­ ¹Ù·Î ÀÐÀ» ¼öµµ ÀÖÁö¸¸ Â÷ÈÄÀÇ È®À强À» À§ÇØ Á÷Á¢ °è»êÇß´Ù. ÀÚ°£À̳ª ´Ü¾î °£°Ý µûÀ§ÀÇ ¿É¼ÇµéÀº Àμ⿡ ±»ÀÌ Àû¿ëÇÏÁö ¾Ê¾Ò´Ù. ¹°·Ð ¸¶À½¸¸ ¸ÔÀ¸¸é ¾ó¸¶µçÁö Àû¿ëÇÒ ¼ö ÀÖÁö¸¸ ÅؽºÆ® ÆíÁý±âÀÇ ÀμⰡ ÀÌÁ¤µµ±îÁö Á¤±³ÇÒ ÇÊ¿ä´Â ¾ø´Ù°í »ý°¢ÇÑ´Ù.

¶ó.ÀԷ½ÃÀÇ Ä¿¼­ ó¸®

Ä¿¼­´Â ¸¶¿ì½ºÀÇ ÇöÀç À§Ä¡¸¦ Ãâ·ÂÇÏ´Â ¾ÆÁÖ Áß¿äÇÑ ¿ªÇÒÀ» Çϸç Ç×»ó È­¸é¿¡ Ç¥½ÃµÇ¾î ÀÖ´Ù. ±×·±µ¥ ¹®ÀåÀ» ÀÔ·ÂÇÒ ¶§´Â Å°º¸µå¸¸ »ç¿ëÇϸç À̶§ ¸¶¿ì½º Ä¿¼­´Â »ó´çÈ÷ °É¸®Àû°Å¸®´Â Á¸ÀçÀÌ´Ù. ÀÔ·ÂÇÏ´Â À§Ä¡¿¡ Ä¿¼­°¡ ÀÖÀ¸¸é ±× ÀÛÀº Ä¿¼­¿¡ °¡·Á ¹®ÀåÀÌ Àß ¾È º¸À̸ç ŸÀÌÇÁ Ä¡´Ù°¡ ¸¶¿ì½º¸¦ ¿òÁ÷ÀÌ´Â °Íµµ ±ÍÂú´Ù. CursorEdit ¿É¼ÇÀº ÀÔ·ÂÁß¿¡ ¸¶¿ì½º Ä¿¼­¸¦ ¾î¶»°Ô ó¸®ÇÒ °ÍÀΰ¡¸¦ ÁöÁ¤ÇÑ´Ù.

 

°ª

¼³¸í

0

¾Æ¹« µ¿ÀÛµµ ÇÏÁö ¾Ê´Â´Ù.

1

Ä¿¼­¸¦ ¼û±ä´Ù.

2

Ä¿¼­¸¦ ÀÛ¾÷¿µ¿ª ¿À¸¥ÂÊ À§·Î º¸³½´Ù.

3

Ä¿¼­¸¦ ÀÛ¾÷¿µ¿ª ¿À¸¥ÂÊ ¾Æ·¡·Î º¸³½´Ù.

4

ij·µÀÇ ¿À¸¥ÂÊ ¾Æ·¡¿¡ µÐ´Ù.

 

µðÆúÆ®´Â ¹°·Ð ¾Æ¹« 󸮵µ ÇÏÁö ¾Ê°í Ä¿¼­¸¦ ³»¹ö·ÁµÎ´Â 0ÀÌ¸ç °¡Àå ÀÚ¿¬½º·´´Ù. ±×·¯³ª Ä¿¼­°¡ Á¤ ´«¿¡ °Å½½¸°´Ù¸é ´Ù¸¥ ¿É¼ÇÀ» ¼±ÅÃÇÏ¿© Àá½Ã ¼û±ä´Ù°Å³ª ÇÒ ¼öµµ ÀÖ´Ù. ÀÌ Ã³¸®¸¦ À§ÇØ º¯¼ö Çϳª¿Í ¸â¹ö ÇÔ¼ö µÎ °³¸¦ Ãß°¡ÇÑ´Ù. ´ÙÀ½ Ç׿¡ ÀÛ¼ºÇÒ ¸â¹ö º¯¼öÀÇ ¿øÇüµµ ¹Ì¸® ¼±¾ðÇß´Ù.

 

class CApiEditText : public CWindow

{

protected:

     ....

     BOOL bShowCursor;

 

public:

     ....

     virtual void ProcessCursorInEditing();

     virtual void ShowCursorEdit(BOOL bShow);

     virtual int AdjustSpace(int &nPos,BOOL bAdd);

     virtual int AdjustSpaceInsert(int &nPos1,int &nPos2);

};

 

ÀÌ ÇÔ¼öµéÀº Çí»ç ºä¿¡¼­µµ È£ÃâÇØ¾ß ÇϹǷΠ¹Ýµå½Ã °¡»óÇÔ¼ö¿©¾ß ÇÑ´Ù. bShowCursor´Â »ý¼ºÀÚ¿¡¼­ TRUE·Î ÃʱâÈ­ÇÑ´Ù.

 

CApiEditText::CApiEditText()

{

     ....

     bShowCursor=TRUE;

}

 

ÀÌ º¯¼ö´Â Ä¿¼­°¡ ÇöÀç º¸ÀÌ´Â ÁßÀΰ¡ ¾Æ´Ñ°¡¸¦ ±â¾ïÇÑ´Ù. ÀÔ·ÂÁßÀÇ Ä¿¼­´Â ´ÙÀ½ ÇÔ¼ö°¡ °ü¸®ÇÑ´Ù.

 

void CApiEditText::ProcessCursorInEditing()

{

     RECT crt;

     POINT pt;

 

     switch (pFrame->CursorEdit) {

     default:

     case 0:

          break;

     case 1:

          ShowCursorEdit(FALSE);

          break;

     case 2:

     case 3:

          GetClientRect(hWnd,&crt);

          ClientToScreen(hWnd,(LPPOINT)&crt);

          ClientToScreen(hWnd,(LPPOINT)&crt.right);

          if (pFrame->CursorEdit==2) {

              SetCursorPos(crt.right-25,crt.top+8);

          } else {

              SetCursorPos(crt.right-25,crt.bottom-33);

          }

          break;

     case 4:

          GetCaretPos(&pt);

          ClientToScreen(hWnd,&pt);

          SetCursorPos(pt.x+FontWidth*5,pt.y+LineHeight*2);

          break;

     }

}

 

void CApiEditText::ShowCursorEdit(BOOL bShow)

{

     if (bShow) {

          if (!bShowCursor) {

              ShowCursor(TRUE);

              bShowCursor=TRUE;

          }

     } else {

          if (bShowCursor) {

              ShowCursor(FALSE);

              bShowCursor=FALSE;

          }

     }

}

 

CursorEdit ¿É¼Ç¿¡ µû¶ó ÀûÀýÈ÷ Ä¿¼­¸¦ °ü¸®ÇÑ´Ù. 0ÀÌ¸é ¾Æ¹« µ¿ÀÛµµ ÇÏÁö ¾ÊÀ¸¸ç ±×·¸Áö ¾ÊÀ¸¸é ¿É¼Ç´ë·Î Ä¿¼­¸¦ Ãʸ®ÇÑ´Ù. Ä¿¼­¸¦ ƯÁ¤ À§Ä¡·Î ¿Å±æ ¶§´Â SetCursorPos ÇÔ¼ö·Î ÁÂÇ¥¸¸ ÁöÁ¤ÇÏ¸é µÈ´Ù. Ä¿¼­¸¦ ¼û±æ ¶§´Â ShowCursorEdit ÇÔ¼ö¸¦ È£ÃâÇÏ¿© Ä¿¼­¸¦ ¼û±ä´Ù. Ä¿¼­ÀÇ º¸À̱⠻óŸ¦ º¯°æÇÏ´Â ShowCursor¶ó´Â API ÇÔ¼ö°¡ Àִµ¥ ÀÌ ÇÔ¼ö´Â ³»ºÎÀûÀ¸·Î Ä«¿îÆ®¸¦ À¯ÁöÇϴ Ư¼ºÀÌ ÀÖ¾î ¿©·¯ ¹ø ¼û±â¸é ±× ȸ¼ö¸¸Å­ ´Ù½Ã º¸¿©¾ß ÇÏ´Â Á¦¾àÀÌ ÀÖ´Ù. ÀÌ Á¦¾àÀ» ¹«·ÂÈ­Çϱâ À§ÇØ º°µµÀÇ ÇÔ¼ö¸¦ ¸¸µç °ÍÀÌ´Ù. Ä¿¼­ ó¸® ÇÔ¼ö´Â Å°º¸µå·Î ¹®ÀÚ¿­À» ÀÔ·ÂÇÒ ¶§ È£ÃâµÈ´Ù.

 

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

{

     ....

     AeMc.RecordCommand(szCom);

     ProcessCursorInEditing();

 

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

{

     ....

     if (lParam & GCS_COMPSTR) {

          ProcessCursorInEditing();

 

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

{

     ....

     if (Value==-1) {

          return;

     }

     ProcessCursorInEditing();

 

¹®ÀÚ°¡ ÀÔ·ÂµÉ ¶§, ÇѱÛÀ» Á¶¸³ÁßÀÏ ¶§ ÀÌ ÇÔ¼ö¸¦ È£ÃâÇÑ´Ù. ProcessCursorInEditing ÇÔ¼ö¸¸ È£ÃâÇÏ¸é ¿É¼Ç¿¡ µû¶ó Ä¿¼­¸¦ Àû´çÈ÷ °ü¸®ÇÑ´Ù. OnImeComposition ÇÔ¼ö´Â ÇÑ±Û Á¶¸³ÁßÀÏ ¶§»Ó¸¸ ¾Æ´Ï¶ó Á¶¸³ÀÌ Ç®¸± ¶§µµ È£ÃâµÇ´Âµ¥ À̶§´Â Ä¿¼­¸¦ °Çµå¸®Áö ¸»¾Æ¾ß ÇÑ´Ù. ÇÑ±Û ÀÔ·ÂÁß¿¡ ¸¶¿ì½º·Î ij·µÀ» ¿Å±â¸é ÀÏ´Ü À̵¿Çß´Ù°¡ ´Ù½Ã ij·µ À§Ä¡·Î Ä¿¼­°¡ µ¹¾Æ¿À¸é¼­ ¼±ÅõǴ ºÎÀÛ¿ëÀÌ ÀÖ´Ù. Ä¿¼­°¡ ¼û°ÜÁø °æ¿ì ¸¶¿ì½º¸¦ ¿òÁ÷À̰ųª Ŭ¸¯ÇÒ ¶§ ´Ù½Ã Ç¥½ÃÇÑ´Ù.

 

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

{

     ....

     ShowCursorEdit(TRUE);

     GetClientRect(hWnd,&crt);

 

void CApiEditText::OnMouseMove(HWND hWnd, int x, int y, UINT keyFlags)

{

     ....

     ShowCursorEdit(TRUE);

     if (bCapture == FALSE) {

          return;

     }

 

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

{

     ....

     ShowCursorEdit(TRUE);

     GetClientRect(hWnd,&crt);

 

void CApiEditHexa::OnMouseMove(HWND hWnd, int x, int y, UINT keyFlags)

{

     ....

     ShowCursorEdit(TRUE);

     if (bCapture == FALSE) {

          return;

     }

 

ĸó ¿©ºÎ¿Í´Â »ó°ü¾øÀÌ ¸¶¿ì½º·ÎºÎÅÍ ¸Þ½ÃÁö°¡ Àü´ÞµÇ±â¸¸ ÇÏ¸é ¹«Á¶°Ç Ä¿¼­¸¦ Ç¥½ÃÇØ¾ß ÇÑ´Ù. ÀÌ ¿É¼ÇÀº ¾îµð±îÁö³ª ÀÔ·ÂÁß¿¡¸¸ Ä¿¼­¸¦ °ü¸®ÇÒ »ÓÀÌ´Ù.

¸¶.½º¸¶Æ® °ø¹é

À¥ÀÇ Ç¥ÁØ ¹®¼­ÀÎ HTMLÀº µÑ ÀÌ»óÀÇ °ø¹éÀ» Çã¿ëÇÏÁö ¾Ê´Âµ¥ ´ëºÎºÐÀÇ °æ¿ì ¿¬¼ÓµÈ °ø¹éÀÌ ºÒÇÊ¿äÇϱ⠶§¹®ÀÌ´Ù. ÀÏ¹Ý ¹®¼­µµ ¸¶Âù°¡Áö·Î µÑ ÀÌ»óÀÇ °ø¹éÀÌ ÇÊ¿äÇÑ °æ¿ì°¡ º°·Î ¾ø´Âµ¥´Ù ´ë°³ÀÇ °æ¿ì ÀÔ·ÂÁßÀÇ ¿ÀŸÀ̰ųª ÆíÁý¿¡ ÀÇÇØ °ø¹éÀÌ µÑ ÀÌ»óÀ¸·Î ´Ã¾î³­ °ÍÀÌ´Ù. ¹®¼­¸¦ ÀÔ·ÂÇÒ ¶§ °ø¹éÅ°¸¦ µÎ ¹ø ¿¬¼ÓÀ¸·Î ´©¸£´Â ½Ç¼ö´Â Àß ÇÏÁö ¾ÊÁö¸¸ ¹®¼­¸¦ ÆíÁýÇÏ´Ù º¸¸é ¿øÄ¡¾Ê°Ô µÑ ÀÌ»óÀÇ °ø¹éÀÌ »ý±â±âµµ ÇÑ´Ù.

½º¸¶Æ® °ø¹é ±â´ÉÀ̶õ ÆíÁýÇÒ ¶§ °ø¹éÀ» Àû´çÈ÷ Á¶Á¤ÇÏ¿© ºÒÇÊ¿äÇÑ °ø¹éÀ» ÃÖ¼ÒÈ­ÇÏ´Â ±â´ÉÀÌ´Ù. °ø¹é ¹®ÀÚ¸¸ Á¶Á¤ ´ë»óÀ̸ç ÅÇÀº °ø¹éÀ¸·Î Ãë±ÞÇÏÁö ¾Ê´Â´Ù. ÅÇÀº ´Ü¼øÇÑ °ø¹é°ú´Â ±â´ÉÀÌ ´Ù¸£°í ¼Ò½º ÄÚµåó·³ ¹®¼­ Çü½ÄÀ» ¸¸µé±â À§ÇØ ÀǵµÀûÀ¸·Î ¿©·¯¹ø ÀÔ·ÂÇÏ´Â °æ¿ìµµ ÀÖ´Ù. ½º¸¶Æ® °ø¹é ±â´ÉÀº ´ÙÀ½°ú °°Àº »óȲ¿¡¼­ ÇÊ¿äÇÏ´Ù°í ÆÇ´ÜµÉ °æ¿ì µ¿ÀÛÇÑ´Ù.

1.»èÁ¦³ª À߶󳻱⸦ ÇÒ ¶§ ³²Àº °ø¹éÀÌ µÑÀÌ µÇÁö ¾Ê°Ô ÇÑ´Ù. ´ÙÀ½ ±×¸²À» º¸ÀÚ. ÀÌÈÄÀÇ ±×¸²¿¡ - ¹®ÀÚ´Â °ø¹éÀ» ÀǹÌÇÑ´Ù.

¹®Àå Áß°£ÀÇ ´Ü¾î¸¦ ¼±ÅÃÇؼ­ »èÁ¦ÇÏ¸é ´Ü¾î ¾çÂÊÀÇ °ø¹éÀÌ ³²´Âµ¥ µÎ °³ÀÇ °ø¹éÁß Çϳª´Â ºÒÇÊ¿äÇÏ´Ù. ÀÌ µÎ °ø¹éÀ» ÇÕÃÄ Çϳª¸¸ ³²±â°í ³ª¸ÓÁö´Â Áö¿î´Ù. °ø¹éÀÌ µÎ °³ ÀÌ»ó ÀÖÀ» ¶§µµ Çϳª¸¸ ³²±â´Â °ÍÀÌ ÁÁ´Ù. ´Ü¾î¸¦ À߶ó³ÂÀ» °æ¿ì ¿©ºÐÀ¸·Î Áö¿öÁø °ø¹éÀº Ŭ¸³º¸µå¿¡ ³ÖÁö ¸»¾Æ¾ß ÇÑ´Ù. »ç¿ëÀÚ´Â ¼±ÅÃÇÑ ´Ü¾î¸¸ Ŭ¸³º¸µå¿¡ ³Ö¾ú´Ù°í »ý°¢ÇÏ¸ç ¹®¼­¿¡ Ãß°¡·Î Áö¿öÁø °ø¹é±îÁö Ŭ¸³º¸µå¿¡ ³ÖÀ» ÇÊ¿ä´Â ¾ø´Ù. »èÁ¦ ÈÄ ¾çÂÊ¿¡ °ø¹éÀÌ Çϳªµµ ¾øÀ»¶§ ÀϺη¯ °ø¹éÀ» ¸¸µé¾î ³ÖÀ» ÇÊ¿ä´Â ¾ø´Ù. ¿ø·¡ °ø¹éÀÌ ¾ø¾úÀ¸¸é ¾ø´Â ä·Î ³²°Ü µÎ¸é µÈ´Ù.

2.ºÙ¿© ³ÖÀ» ¶§´Â ¾çÂÊ¿¡ °ø¹éÀ» Çϳª¾¿ ³Ö´Â´Ù. ºÙ¿© ³ÖÀº ÈÄ °ø¹éÀÌ ¾ø´Ù¸é »ðÀÔÇÏ°í µÑ ÀÌ»óÀÇ °ø¹éÀÌ ÀÖÀ» ¶§´Â Çϳª·Î Á¤¸®ÇÑ´Ù.

º¸Åë ´Ü¾î¸¦ ºÙ¿© ³Ö±â ¶§¹®¿¡ ºÙ¿© ³ÖÀº ÈÄ ´Ü¾î »çÀÌ¿¡ °ø¹éÀÌ ¾ø´Âµ¥ ÀÎÀ§ÀûÀ¸·Î ¸¸µé¾î »ðÀÔµÈ ´Ü¾î¿Í °ø¹é »çÀ̸¦ ¶ç¿î´Ù. ´Ü ºÙ¿©³Ö´Â ÀÚ¸®°¡ ´Ü¾îÀÇ Áß°£ÀÏ ¶§´Â °ø¹é Á¶Á¤À» ÇÏÁö ¾Ê´Â´Ù. ¿¹¸¦ µé¾î "³ª¹«Å¸ºÒ" ´Ü¾îÀÇ ³ª¹« ´ÙÀ½¿¡ ¾Æ¹Ì¸¦ »ðÀÔÇÒ ¶§ "³ª¹«¾Æ¹ÌŸºÒ"ÀÌ µÇ¾î¾ßÁö "³ª¹« ¾Æ¹Ì ŸºÒ"·Î ¸¸µéÁö ¾Ê´Â´Ù. ÃÖ¼ÒÇÑ ºÙ¿© ³Ö´Â ÀÚ¸®ÀÇ ¾çÂÊ ÇÑ °÷¿¡´Â °ø¹éÀÌ ÀÖ¾î¾ß ÇÑ´Ù.

3.¸¶¿ì½º·Î µå·¡±×ÇÏ¿© ¹®ÀÚ¿­À» À̵¿ ¹× º¹»çÇÒ ¶§µµ °ø¹éÀ» Àû´çÈ÷ Á¶Á¤ÇÑ´Ù. ´õºíŬ¸¯À¸·Î ´Ü¾î¸¸ ¼±ÅÃÇÑ ÈÄ À̵¿ÇÏ´Â °æ¿ì°¡ ¸¹Àºµ¥ À̶§ À̵¿ÀüÀÇ ÀÚ¸®¿Í »ðÀÔµÈ ÀÚ¸®ÀÇ ¾çÂÊ °ø¹éÀ» ¸ðµÎ Á¶Á¤ÇØ¾ß ÇÑ´Ù.

¿ø·¡ ÀÚ¸®¿¡´Â µÎ °³ÀÇ °ø¹éÀÌ ³²°í »õ·Î À̵¿ÇÑ °÷¿¡´Â °ø¹éÀÌ ¾ø¾î »ó´çÈ÷ ¾î»öÇѵ¥ À̸¦ Á¶Á¤ÇÏ¿© ´Ü¾î »çÀÌ¿¡ Çϳª¾¿À» °ø¹éÀ» ³²±ä´Ù. À߶󳻱â¿Í ºÙ¿© ³Ö±â¸¦ ¿¬ÀÌ¾î ½ÇÇàÇÑ °Í°ú À¯»çÇÏÁö¸¸ ±¸Çö ÄÚµå´Â »ó´çÈ÷ ´Ù¸£´Ù.

ÀÌ Á¤µµ ¿¹¸¦ µé¸é ½º¸¶Æ® °ø¹éÀÌ ¿Ö ÇÊ¿äÇÏ¸é ¾î¶² ½Ç¿ë¼ºÀÌ ÀÖ´ÂÁö °¨À» ÀâÀ» ¼ö ÀÖÀ» °ÍÀÌ´Ù. ¸¸¾à ÀÌ·± ±â´ÉÀÌ ¾ø´Ù¸é ´Ü¾î¸¦ À̵¿ÇÑ ÈÄ °ø¹éÀ» ¼öµ¿À¸·Î Á¶Á¤ÇØ¾ß ÇϹǷΠºÒÆíÇØÁø´Ù. ¸ÕÀú »ó´ëÀûÀ¸·Î ½¬¿î »èÁ¦ÇÒ ¶§ÀÇ °ø¹é Á¶Á¤ ±â´ÉÀ» ÀÛ¼ºÇØ º¸ÀÚ. ´ÙÀ½ ÇÔ¼ö´Â nPos À§Ä¡ÀÇ °ø¹éÀ» Á¶Á¤ÇÑ´Ù.

 

// nPos ÀÚ¸®¿¡ °ø¹é Á¶Á¤. ¸®ÅÏ°ªÀº »ðÀÔµÈ ¹ÙÀÌÆ® ¼ö

int CApiEditText::AdjustSpace(int &nPos,BOOL bAdd)

{

     int toff;

     int s,e;

 

     // °ø¹é ½ÃÀÛ ¿ÀÇÁ¼Â

     for (toff=nPos-1;;toff--) {

          if (toff==0) {

              s=toff;

              break;

          }

          if (pFrame->buf[toff]!= ' ') {

              s=toff+1;

              break;

          }

     }

     // °ø¹é ³¡ ¿ÀÇÁ¼Â

     for (toff=s;;toff++) {

          if (toff==pFrame->doclen) {

              e=toff;

              break;

          }

          if (pFrame->buf[toff]!=' ') {

              e=toff;

              break;

          }

     }

 

     // ¹®´Ü óÀ½ÀÌ°í °ø¹éÀÌ ÀÖÀ» °æ¿ì. ¸ðµç °ø¹é »èÁ¦

     if (e-s > 0 && pFrame->FindParaStart(s)==s) {

          Delete(s,e-s);

          nPos=s;

          return -(e-s);

     }

     // 1º¸´Ù Å©¸é Çϳª¸¸ ³²±â°í »èÁ¦

     if (e-s > 1) {

          Delete(s+1,e-s-1);

          nPos=s+1;

          return -(e-s-1);

     }

     // °ø¹éÀÌ ¾ø°í bAddÀÌ¸é °ø¹é Çϳª »ðÀÔ

     if (bAdd && e-s==0) {

          Insert(nPos," ",1);

          nPos++;

          return 1;

     }

     // ¿ø·¡ °ø¹éÀÌ ÇϳªÀ̰ųª °ø¹éÀÌ ¾ø¾ú´ø °æ¿ì.

     return 0;

}

 

s,e¿¡ °ø¹éÀÇ ¹üÀ§¸¦ ±¸Çϴµ¥ e-s½ÄÀ¸·Î nPosÀ§Ä¡ÀÇ °ø¹é °³¼ö¸¦ ¾Ë ¼ö ÀÖ´Ù. ÇöÀç À§Ä¡ÀÇ °ø¹é °³¼ö¿Í nPosÀÇ À§Ä¡¿¡ µû¶ó °ø¹é Á¶Á¤ ¹æ¹ýÀÌ ´Þ¶óÁø´Ù. °¡Àå Ư¼öÇÏ°Ô Ãë±ÞµÇ¾î¾ß ÇÒ °æ¿ì´Â ¹®´Ü óÀ½¿¡ °ø¹éÀÌ ÀÖ´Â °æ¿ìÀÌ´Ù. ¹®´Ü óÀ½¿¡ °ø¹éÀÌ ¿À´Â °ÍÀº ¹Ù¶÷Á÷ÇÏÁö ¾ÊÀ¸¹Ç·Î ¸ðµç °ø¹éÀ» »èÁ¦ÇÏ°í nPos´Â °ø¹éÀ» »èÁ¦ÇÑ ÈÄÀÇ Ã¹ À§Ä¡°¡ µÈ´Ù. ¸®ÅÏ°ªÀº ÀÌ ÇÔ¼ö¿¡ ÀÇÇØ »ðÀÔµÈ ¹ÙÀÌÆ® ¼öÀÌ¸ç »èÁ¦µÇ¾úÀ¸¸é À½¼ö°¡ ¸®ÅϵȴÙ.

°ø¹éÀÌ µÑ ÀÌ»ó ÀÖÀ¸¸é Çϳª¸¸ ³²±â°í »èÁ¦ÇÑ´Ù. nPos´Â »èÁ¦µÈ °ø¹é ´ÙÀ½ ¿ÀÇÁ¼ÂÀÌ µÈ´Ù. °ø¹éÀÌ ¾øÀ» °æ¿ì´Â bAddÀμö¿¡ µû¶ó 󸮰¡ ´Þ¶óÁö´Âµ¥ ÀÌ °ªÀÌ FALSEÀÌ¸é ¾Æ¹«°Íµµ ÇÏÁö ¾Ê´Â´Ù. bAdd°¡ TRUEÀÌ¸é °ø¹é Çϳª¸¦ »ðÀÔÇÑ´Ù. »ó±â Á¶°ÇÀÇ ¾î´À °æ¿ì¿¡µµ ÇØ´çµÇÁö ¾ÊÀ¸¸é nPos´Â ÀüÇô °Çµå¸®Áö ¾Ê°í °ø¹é Á¶Á¤µµ ÇÏÁö ¾ÊÀ¸¸ç 0À» ¸®ÅÏÇÑ´Ù. DeleteSelection¿¡¼­ ÀÌ ÇÔ¼ö¸¦ È£ÃâÇÑ´Ù.

 

BOOL CApiEditText::DeleteSelection()

{

     int SelFirst, SelSecond;

     int idx,Acc,linelen;

 

     if (SelStart != SelEnd) {

          if (!bColumnMode) {

              SelFirst=min(SelStart,SelEnd);

              SelSecond=max(SelStart,SelEnd);

           if (pFrame->bSmartSpace && ViewType!=HEXA_VIEW) {

               pFrame->StartUndoGroup(24);

           }

              Delete(SelFirst,SelSecond-SelFirst);

              off=SelFirst;

           if (pFrame->bSmartSpace && ViewType!=HEXA_VIEW) {

               AdjustSpace(off,FALSE);

               pFrame->EndUndoGroup();

           }

 

¿­ ¸ðµå¿¡¼­´Â Á¤È®ÇÏ°Ô »ç°¢¿µ¿ªÀ» ¼±ÅÃÇÏ¿© »èÁ¦Çϱ⸦ ¹Ù¶ó¹Ç·Î °ø¹é Á¶Á¤À» ÇÒ ÇÊ¿ä°¡ ¾ø´Ù. Çí»ç ºä¿¡¼­µµ °ø¹é Á¶Á¤Àº ¾Æ¹« Àǹ̰¡ ¾ø´Ù. ¼±Åÿµ¿ª »èÁ¦¿Í °ø¹é Á¶Á¤ µ¿ÀÛÀÌ ÇϳªÀÇ ±×·ìÀ» ±¸¼ºÇÑ´Ù. ±×·¯³ª DelectSelection ÇÔ¼ö°¡ È£ÃâµÉ ¶§´Â ÀÌ¹Ì Áßø ±×·ìÀÇ ¾ÈÀÎ °æ¿ì°¡ ¸¹±â ¶§¹®¿¡ ½ÇÁ¦·Î ÀÌ ±×·ìÀÌ ¸ÞÀÎÀÌ µÇ´Â °æ¿ì´Â »ç½Ç»ó °ÅÀÇ ¾ø´Ù. ¼±Åÿµ¿ª »èÁ¦ÈÄ ÇöÀç À§Ä¡ÀÎ off¿¡ ´ëÇØ °ø¹éÀ» Á¶Á¤ÇÑ´Ù. À̶§ °ø¹éÀÌ ¾øÀ» ¶§ ÀϺη¯ ¸¸µé ÇÊ¿ä´Â ¾øÀ¸¹Ç·Î bAdd Àμö´Â FALSEÀÌ´Ù. AdjustSpaceÀÇ Ã¹ ¹ø° Àμö°¡ ÂüÁ¶ ÀμöÀ̹ǷΠ°ø¹é Á¶Á¤¿¡ ÀÇÇØ offÀ̵¿±îÁö °°ÀÌ Ã³¸®µÈ´Ù. ´ÙÀ½Àº ºÙ¿© ³Ö±â¸¦ ó¸®ÇØ º¸ÀÚ. ¾çÂÊÀÇ °ø¹éÀ» ¸ðµÎ °ü¸®ÇØ¾ß ÇÑ´Ù. ´ÙÀ½ ÇÔ¼ö¸¦ Ãß°¡ÇÑ´Ù.

 

// ¾çÂÊ¿¡ °ø¹é Á¤¸®.

int CApiEditText::AdjustSpaceInsert(int &nPos1,int &nPos2)

{

     int nIns;

 

     // ¹®´Ü óÀ½Àº µÚÂʸ¸ Á¶Á¤ÇÏ¸é µÈ´Ù.

     if (nPos1==pFrame->FindParaStart(nPos1)) {

          nIns=AdjustSpace(nPos2,TRUE);

          return nIns;

     }

 

     // ¾çÂÊ¿¡ °ø¹éÀÌ ¾øÀ¸¸é Á¶Á¤ÇÒ ÇÊ¿ä°¡ ¾øÀ½.

     if ((nPos1==0 || pFrame->buf[nPos1-1]!=' ') && pFrame->buf[nPos2]!=' ')

          return 0;

 

     // ¾ÕÂÊ Á¶Á¤. nPos2 °°ÀÌ À̵¿

     nIns=AdjustSpace(nPos1,TRUE);

     nPos2+=nIns;

 

     // µÚÂÊ Á¶Á¤. nPos2´Â Á¶Á¤ ÈÄÀÇ °ø¹é ¾Õ À§Ä¡

     nIns+=AdjustSpace(nPos2,TRUE);

     return nIns;

}

 

ÀÌ °æ¿ìµµ ¹®´Ü óÀ½Àº Ư¼öÇÏ°Ô Ãë±ÞµÇ´Âµ¥ ¾ÕÂÊ¿¡´Â °ø¹éÀ» »ðÀÔÇÏÁö ¾Ê°í µÚÂÊ¿¡¸¸ °ø¹éÀ» Á¶Á¤ÇÑ´Ù. ¹®´Ü óÀ½À̶ó´Â Á¶°Ç ÀÚü°¡ ¾ÕÂÊ¿¡ °ø¹éÀÌ ¾ø´Ù´Â ¾ê±âÀ̹ǷΠ¾ÕÂÊ °ø¹éÀº ÀϺη¯ Á¶Á¤ÇÒ ÇÊ¿äµµ ¾ø°í Á¶Á¤Çؼ­µµ ¾ÈµÈ´Ù. ¹®´Ü óÀ½ÀÌ ¾Æ´Ñ °æ¿ì´Â ¾çÂÊ¿¡ °ø¹éÀ» Á¤¸®ÇϵÇ, ´Ü ´Ü¾î Áß°£ÀÎ °æ¿ì´Â °ø¹éÀ» Á¶Á¤ÇÏÁö ¾Ê´Â´Ù. ÃÖ¼ÒÇÑ nPos1, nPos2 Áß ÇÑÂÊ¿¡´Â °ø¹éÀÌ ÀÖ¾î¾ß Á¶Á¤ÇÒ ÇÊ¿ä°¡ ÀÖ´Ù. ¾ÕÂÊ °ø¹éÀ» ¸ÕÀú Á¶Á¤Çϴµ¥ À̶§ »ðÀÔµÈ ¹ÙÀÌÆ® ¼ö¸¸Å­ µÚÂÊ ¿ÀÇÁ¼Â nPos2µµ °°ÀÌ À̵¿½ÃÄÑ¾ß ÇÑ´Ù. µÚÂÊ °ø¹éÀ» Á¶Á¤ÇÑ ÈÄ ÃÑ »ðÀÔµÈ ¹ÙÀÌÆ® ¼ö¸¦ ¸®ÅÏÇÑ´Ù. ÀÌ ÇÔ¼ö´Â IDM_AE_PASTE¿¡¼­ È£ÃâÇÑ´Ù.

 

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

{

     ....

     case IDM_AE_PASTE:

              ....

              } else {

                   InputExtraSpace(off);

               if (pFrame->bSmartSpace && ViewType!=HEXA_VIEW) {

                   pFrame->StartUndoGroup(25);

               }

                   if (SelStart != SelEnd) {

                        pFrame->StartUndoGroup(2);

                   }

                   ....

                   Invalidate(pFrame->FindParaStart(off));

               SelFirst=off;

                   off += lstrlen(ptr);

               SelSecond=off;

               if (pFrame->bSmartSpace && ViewType!=HEXA_VIEW) {

                   AdjustSpaceInsert(SelFirst,SelSecond);

                   off=SelSecond;

                   pFrame->EndUndoGroup();

               }

              }

              SetCaret();

          }

          return;

 

Ŭ¸³º¸µå ³»¿ëÀ» ºÙ¿© ³ÖÀº ÈÄ °ø¹éÀ» Á¶Á¤ÇÑ´Ù. ±×·ìÀº ¹°·Ð ±¸¼ºÇØ¾ß ÇÑ´Ù. ¼±Åà ´ëü ºÙ¿© ³Ö±â ±×·ìÀ» ¾ÈÂÊÀ¸·Î ÁßøÇÏ°í ÀÖ´Ù. ´ÙÀ½Àº ¸¶¿ì½º·Î À̵¿ ¹× º¹»ç½ÃÀÇ °ø¹éÀ» Á¤¸®Çϴµ¥ CopyString ÇÔ¼ö¿¡¼­ ó¸®ÇÑ´Ù.

 

void CApiEditText::CopyString(BOOL bCopy, int from, int &to, int len, BOOL bRec/*=TRUE*/)

{

     TCHAR *t;

     int orito=to;

     int BkExtraX;

    int ss,se;

    int nIns;

 

     BkExtraX=ExtraX;

     if (InputExtraSpace(to)) {

          if (from > to-BkExtraX) {

              from+=BkExtraX;

          }

     }

 

     t=(TCHAR *)malloc(len);

     memcpy(t,pFrame->buf+from,len);

     // ½º¸¶Æ® °ø¹éÀÌ°í ±â·Ï ¸ðµåÀÏ ¶§¸¸. Áï, Ãë¼Ò, Àç½ÇÇà½Ã´Â ½º¸¶Æ® °ø¹é µ¿ÀÛ ¾ÈÇÔ

    if (bRec==TRUE && pFrame->bSmartSpace && ViewType!=HEXA_VIEW) {

        if (bCopy) {

           pFrame->StartUndoGroup(26);

        } else {

           pFrame->StartUndoGroup(27);

        }

        Insert(to,t,len,TRUE);

        se=to+len;

        nIns=AdjustSpaceInsert(to,se);

 

        if (bCopy==FALSE) {

            if (to > from) {

               Delete(from,len,TRUE);

               nIns=AdjustSpace(from,FALSE);

               to=to-len+nIns;

           } else {

               from+=nIns;

               Delete(from+len,len,TRUE);

               ss=from+len;

               AdjustSpace(ss,FALSE);

           }

        }

        pFrame->EndUndoGroup();

    } else {

          Insert(to,t,len,FALSE);

 

          if (bCopy==FALSE) {

              if (to > from) {

                   Delete(from,len,FALSE);

                   to-=len;

              } else {

                   Delete(from+len,len,FALSE);

              }

          }

          if (bRec) {

              if (bCopy) {

                   pFrame->URInsert(to,t,len);

              } else {

                   pFrame->URMove(from,orito,t,len);

              }

          }

    }

     free(t);

}

 

ÀÌ °æ¿ì´Â ±âÁ¸ Äڵ带 Àç»ç¿ëÇÒ ¼ö ¾øÀ¸¸ç ¿ÏÀüÈ÷ µû·Î Äڵ带 ÀÛ¼ºÇØ¾ß ÇÑ´Ù. ¿Ö³ÄÇϸé UR_MOVE ·¹ÄÚµå¿Í °ø¹é Á¶Á¤¿¡ ÀÇÇÑ ÆíÁý µ¿ÀÛÀÌ ±×·ìÀ» ±¸¼ºÇÒ ¼ö ¾ø±â ¶§¹®ÀÌ´Ù. from, to ¸ðµÎ º¹ÀâÇÑ ±ÔÄ¢¿¡ ÀÇÇØ °ø¹éÀÌ Á¶Á¤µÇ±â ¶§¹®¿¡ UR_MOVE ·¹Äڵ忡 ±â·ÏÇÒ ¿ÀÇÁ¼ÂÀ» °è»êÇϱⰡ ³Ê¹« ±î´Ù·Ó´Ù. ±×·¡¼­ ¾Æ¿¹ À̵¿À» »ðÀÔ ÈÄ »èÁ¦·Î ´Ù½Ã Á¤ÀÇÇÏ°í ÀÌ µ¿ÀÛµéÀ» ±×·ìÀ¸·Î ¹­¾ú´Ù. ³»ºÎÀûÀÎ ±â·Ï ¹æ½ÄÀº »ó´çÈ÷ ´Þ¶óÁöÁö¸¸ »ç¿ëÀÚ°¡ º¸±â¿¡´Â Â÷ÀÌ°¡ ¾ø´Ù. ¸ÕÀú »ðÀÔÇÏ°í bCopy¿Í ¹æÇâ¿¡ µû¶ó ¿ÀÇÁ¼ÂµéÀ» Àû´çÈ÷ Á¶Á¤Çϸ鼭 ¿ø·¡ ¼±Åà ¿µ¿ªÀ» »èÁ¦ÇØ¾ß ÇÑ´Ù.

ÀÌ ±â´ÉÀÇ µðÆúÆ®°ªÀº FALSE·Î µÐ´Ù. ½º¸¶Æ® °ø¹éÀ̶õ Á» ÁÁ°Ô ¾ê±âÇÏ¸é »ç¿ëÀÚ¸¦ ¹è·ÁÇÑ ¶È¶ÈÇÑ °ø¹é °ü¸®¶ó°í ÇÒ ¼ö ÀÖÁö¸¸ ´Ù¸¥ °¢µµ·Î º¸¸é »ç¿ëÀÚÀÇ ÆíÁý µ¿ÀÛ¿¡ ´ëÇÑ ºÒÇÊ¿äÇÑ Âü°ßÀÏ ¼öµµ ÀÖ´Ù. ÀÌ ±â´ÉÀÇ µ¿ÀÛ ¹æ½Ä°ú Àǵµ¸¦ Àß ¸ð¸£´Â »ç¶÷Àº ¹®¼­ÀÇ º¯È­¸¦ ¼±¶æ ÀÌÇØÇϱ⠾î·Æ´Ù. ±×·¡¼­ ²À ÇÊ¿äÇÒ °æ¿ì, ±×¸®°í ÀÌ ±â´ÉÀÇ È¿°ú¸¦ Á¤È®È÷ ¾Æ´Â »ç¶÷¸¸ ¿É¼ÇÀ» ÄѼ­ »ç¿ëÇÏ´Â °ÍÀÌ ÁÁ´Ù. ¾Õ¼­ ÀÛ¼ºÇß´ø ÀÔ·ÂÁßÀÇ Ä¿¼­ ó¸® ±â´Éµµ ¸¶Âù°¡Áö ÀÌÀ¯·Î µðÆúÆ®´Â 0ÀÌ´Ù.

¹Ù.±Û²ÃÀÇ ¸ð¾ç

Áö±Ý±îÁö ¸¸µç ¿©·¯ ¿É¼ÇµéÀ» ¼³Á¤ ´ëÈ­»óÀÚ¿¡ ¹èÄ¡ÇÏ¿© »ç¿ëÀÚ°¡ ¿øÇÒ ¶§ ÆíÁýÇÒ ¼ö ÀÖ°Ô ÇÑ´Ù. ±×¸®°í ´õºÒ¾î ±Û²Ã¿¡ ´ëÇØ ±½°Ô, ±â¿ïÀÓ ¼Ó¼ºÀ» ÁöÁ¤ÇÏ´Â ¿É¼Çµµ °°ÀÌ ¸¸µé¾î Ãß°¡ÇÑ´Ù.. »ç½Ç ÀÌ µÎ ¿É¼ÇÀº ±×´ÙÁö ½Ç¿ëÀûÀÌÁö ¾Ê¾Æ 1.0¿¡¼­ »°¾ú´Âµ¥ ¾øÀ¸´Ï ¶Ç ¼·¼·ÇÑ °¨ÀÌ ÀÖ¾î Æ÷ÇÔ½ÃÅ°±â·Î Çß´Ù. SOption ±¸Á¶Ã¼¿¡ Áö±Ý±îÁö ¸¸µé¾ú´ø ¿É¼Ç ¸â¹ö¸¦ Ãß°¡ÇÑ´Ù. ApiEditÀÇ ¸â¹ö º¯¼ö¿Í °°Àº À̸§À» »ç¿ëÇß´Ù.

 

struct SOption

{

     ....

     int nWheel;

     int nCtrlWheel;

     int nShiftWheel;

     int nCtrlShiftWheel;

     BOOL bSwapDragButton;

     int CharExtra;

     int WordExtra;

     int CharRatio;

     int CursorEdit;

     BOOL bSmartSpace;

};

 

±Û²ÃÀÇ ¸ð¾çÀº logfont¿¡ °°ÀÌ ±â·ÏµÇ¹Ç·Î º°µµÀÇ º¯¼ö¸¦ ¼±¾ðÇÒ ÇÊ¿ä°¡ ¾ø´Ù. ÀÌ ¸â¹öµéÀ» ÃʱâÈ­, ÀúÀå, º¹±¸ÇÏ´Â Äڵ带 ÀÛ¼ºÇÑ´Ù.

 

void SOption::Init()

{

     ....

     nWheel=1;

     nCtrlWheel=6;

     nShiftWheel=5;

     nCtrlShiftWheel=7;

     bSwapDragButton=FALSE;

     CharExtra=100;

     WordExtra=100;

     CharRatio=100;

     CursorEdit=0;

     bSmartSpace=FALSE;

}

 

void SOption::Load(TCHAR *Key)

{

     ....

     logfont.lfWeight=SHRegReadInt(SHCU,szKey,"FontWeight",0);

     logfont.lfItalic=SHRegReadInt(SHCU,szKey,"FontItalic",0);

     ....

     nWheel=SHRegReadInt(SHCU,szKey,"nWheel",0);

     nCtrlWheel=SHRegReadInt(SHCU,szKey,"nCtrlWheel",0);

     nShiftWheel=SHRegReadInt(SHCU,szKey,"nShiftWheel",0);

     nCtrlShiftWheel=SHRegReadInt(SHCU,szKey,"nCtrlShiftWheel",0);

     bSwapDragButton=SHRegReadInt(SHCU,szKey,"bSwapDragButton",0);

     CharExtra=SHRegReadInt(SHCU,szKey,"CharExtra",0);

     WordExtra=SHRegReadInt(SHCU,szKey,"WordExtra",0);

     CharRatio=SHRegReadInt(SHCU,szKey,"CharRatio",0);

     CursorEdit=SHRegReadInt(SHCU,szKey,"CursorEdit",0);

     bSmartSpace=SHRegReadInt(SHCU,szKey,"bSmartSpace",0);

 

void SOption::Save(TCHAR *Key)

{

     ....

     SHRegWriteInt(SHCU,szKey,"FontWeight",logfont.lfWeight);

     SHRegWriteInt(SHCU,szKey,"FontItalic",logfont.lfItalic);

     ....

     SHRegWriteInt(SHCU,szKey,"nWheel",nWheel);

     SHRegWriteInt(SHCU,szKey,"nCtrlWheel",nCtrlWheel);

     SHRegWriteInt(SHCU,szKey,"nShiftWheel",nShiftWheel);

     SHRegWriteInt(SHCU,szKey,"nCtrlShiftWheel",nCtrlShiftWheel);

     SHRegWriteInt(SHCU,szKey,"bSwapDragButton",bSwapDragButton);

     SHRegWriteInt(SHCU,szKey,"CharExtra",CharExtra);

     SHRegWriteInt(SHCU,szKey,"WordExtra",WordExtra);

     SHRegWriteInt(SHCU,szKey,"CharRatio",CharRatio);

     SHRegWriteInt(SHCU,szKey,"CursorEdit",CursorEdit);

     SHRegWriteInt(SHCU,szKey,"bSmartSpace",bSmartSpace);

 

·¹Áö½ºÆ®¸® ÀúÀå ¼ø¼­´Â ¾Æ¹«·¡µµ »ó°ü¾øÁö¸¸ ±Û²Ã¿¡ °ü·ÃµÈ Á¤º¸´Â °¡±ÞÀû ÇÑ °÷¿¡ ¸ð¾Æ ³õ´Â °ÍÀÌ ÁÁÀ¸¹Ç·Î FontWeight ¿É¼ÇÀº FontHeight ¿É¼Ç ¹Ù·Î ´ÙÀ½¿¡ ÀúÀåÇÑ´Ù. ´ÙÀ½Àº ÀÌ ¿É¼ÇµéÀ» ´ëÈ­»óÀÚ¿¡ ¹èÄ¡ÇÑ´Ù. ÀÚ°£, ´Ü¾î °£°Ý, ÀåÆò, ±Û²Ã ¸ð¾ç ¿É¼ÇÀº º¸±â ÆäÀÌÁö¿¡ µÐ´Ù.

 

BOOL CALLBACK ViewDlgProc(HWND hDlg,UINT iMessage,WPARAM wParam,LPARAM lParam)

{

    int c1,c2,c3;

     ....

     case WM_INITDIALOG:

          ....

        SendDlgItemMessage(hDlg,IDC_SPINCHAREXTRA,UDM_SETRANGE,0,MAKELPARAM(300,50));

        SendDlgItemMessage(hDlg,IDC_SPINWORDEXTRA,UDM_SETRANGE,0,MAKELPARAM(400,20));

        SendDlgItemMessage(hDlg,IDC_SPINCHARRATIO,UDM_SETRANGE,0,MAKELPARAM(400,10));

          return TRUE;

     case WM_COMMAND:

          ....

          case IDC_CHKCAPITAL:

        case IDC_CHKBOLD:

        case IDC_CHKITALIC:

              PropSheet_Changed(GetParent(hDlg),hDlg);

              return TRUE;

          case IDC_RIGHTWRAP:

          case IDC_COLMARK:

        case IDC_EDCHAREXTRA:

        case IDC_EDWORDEXTRA:

        case IDC_EDCHARRATIO:

              if (HIWORD(wParam) == EN_CHANGE) {

                   if (bEditByCode==FALSE) {

                        PropSheet_Changed(GetParent(hDlg),hDlg);

                   }

              }

              return TRUE;

          }

          break;

     case WM_NOTIFY:

          switch (((LPNMHDR)lParam)->code) {

          case PSN_SETACTIVE:

              g_StartPage=1;

           bEditByCode=TRUE;

              SetDlgItemInt(hDlg,IDC_LINEHEIGHT,NewOption.LineRatio,FALSE);

              ....

              if (NewOption.logfont.lfHeight == 0) {

                   idx=0;

                   SetDlgItemInt(hDlg,IDC_FONTSIZE,10,FALSE);

               SetDlgItemInt(hDlg,IDC_EDCHARRATIO,100,FALSE);

                   EnableWindow(GetDlgItem(hDlg,IDC_FONTSIZE),FALSE);

              } else {

                   idx=SendDlgItemMessage(hDlg,IDC_FONTFACE,CB_FINDSTRING,-1,

                        (LPARAM)NewOption.logfont.lfFaceName);

                   SetDlgItemInt(hDlg,IDC_FONTSIZE,NewOption.logfont.lfHeight,FALSE);

               SetDlgItemInt(hDlg,IDC_EDCHARRATIO,NewOption.CharRatio,FALSE);

               CheckDlgButton(hDlg,IDC_CHKBOLD,NewOption.logfont.lfWeight==FW_BOLD);

               CheckDlgButton(hDlg,IDC_CHKITALIC,NewOption.logfont.lfItalic);

              }

              SendDlgItemMessage(hDlg,IDC_FONTFACE,CB_SETCURSEL,idx,0);

 

              SendDlgItemMessage(hDlg,IDC_SEL,CB_SETCURSEL,NewOption.HideSelType,0);

              SendDlgItemMessage(hDlg,IDC_CUR,CB_SETCURSEL,NewOption.nShowCurLine,0);

              SendDlgItemMessage(hDlg,IDC_WRAP,CB_SETCURSEL,NewOption.nWrap-1,0);

              SendDlgItemMessage(hDlg,IDC_CARETWIDTH,CB_SETCURSEL,NewOption.CaretWidth-1,0);

              SendDlgItemMessage(hDlg,IDC_CBBPL,CB_SETCURSEL,NewOption.bpl,0);

           bEditByCode=TRUE;

              SetDlgItemInt(hDlg,IDC_RIGHTWRAP,NewOption.RightWrap,FALSE);

              SetDlgItemInt(hDlg,IDC_COLMARK,NewOption.ColMark,FALSE);

           SetDlgItemInt(hDlg,IDC_EDCHAREXTRA,NewOption.CharExtra,FALSE);

           SetDlgItemInt(hDlg,IDC_EDWORDEXTRA,NewOption.WordExtra,FALSE);

              bEditByCode=FALSE;

              AdjustDlgUI(1,hDlg);

              return TRUE;

          case PSN_APPLY:

              ApplyNow();

              return TRUE;

          case PSN_KILLACTIVE:

              ....

           c1=GetDlgItemInt(hDlg,IDC_EDCHAREXTRA,NULL,FALSE);

           c2=GetDlgItemInt(hDlg,IDC_EDWORDEXTRA,NULL,FALSE);

           c3=GetDlgItemInt(hDlg,IDC_EDCHARRATIO,NULL,FALSE);

           if (c1 < 50 || c1 > 300) {

               MessageBox(hDlg,"ÀÚ°£Àº 50~300»çÀÌ¿©¾ß ÇÕ´Ï´Ù.","¾Ë¸²",MB_OK);

               SetWindowLong(hDlg,DWL_MSGRESULT,TRUE);

               return TRUE;

           }

           if (c2 < 20 || c2 > 400) {

               MessageBox(hDlg,"´Ü¾î°£°ÝÀº 20~400»çÀÌ¿©¾ß ÇÕ´Ï´Ù.","¾Ë¸²",MB_OK);

               SetWindowLong(hDlg,DWL_MSGRESULT,TRUE);

               return TRUE;

           }

           if (c3 < 10 || c3 > 400) {

               MessageBox(hDlg,"ÀåÆòÀº 10~400»çÀÌ¿©¾ß ÇÕ´Ï´Ù.","¾Ë¸²",MB_OK);

               SetWindowLong(hDlg,DWL_MSGRESULT,TRUE);

               return TRUE;

           }

              ....

           NewOption.CharExtra=c1;

           NewOption.WordExtra=c2;

           NewOption.CharRatio=c3;

 

              idx=SendDlgItemMessage(hDlg,IDC_FONTFACE,CB_GETCURSEL,0,0);

              if (idx==0) {

                   NewOption.logfont.lfHeight=0;

              } else {

                   SendDlgItemMessage(hDlg,IDC_FONTFACE,CB_GETLBTEXT,idx,(LPARAM)szFace);

                   for (i=0;i<FontNum;i++) {

                        if (lstrcmp(szFace,arFont[i].lfFaceName) == 0)

                            break;

                   }

                   NewOption.logfont=arFont[i];

                   NewOption.logfont.lfHeight=GetDlgItemInt(hDlg,IDC_FONTSIZE,NULL,FALSE);

               NewOption.logfont.lfWeight=IsDlgButtonChecked(hDlg,IDC_CHKBOLD) ?

                    FW_BOLD:FW_NORMAL;

               NewOption.logfont.lfItalic=IsDlgButtonChecked(hDlg,IDC_CHKITALIC);

              }

              ....

 

´ëÈ­»óÀÚ¿¡ ¿É¼ÇÀ» ¹èÄ¡ÇÏ´Â ÄÚµå´Â Áö±Ý±îÁö ¿©·¯ ¹ø ÀÛ¼ºÇØ ºÃÀ¸¹Ç·Î º°µµÀÇ ¼³¸íÀÌ ÇÊ¿ä¾øÀ» °ÍÀÌ´Ù. ÆíÁý ÆäÀÌÁö¿¡´Â ¹öÆ° ±³Ã¼ ¿É¼ÇÀÌ ¹èÄ¡µÈ´Ù.

 

BOOL CALLBACK EditDlgProc(HWND hDlg,UINT iMessage,WPARAM wParam,LPARAM lParam)

{

     switch(iMessage) {

     ....

     case WM_COMMAND:

          ....

          case IDC_CALCTABWITHAVG:

        case IDC_SWAPDRAGBTN:

              PropSheet_Changed(GetParent(hDlg),hDlg);

              return TRUE;

          }

          break;

     case WM_NOTIFY:

          switch (((LPNMHDR)lParam)->code) {

          case PSN_SETACTIVE:

              ....

           CheckDlgButton(hDlg,IDC_SWAPDRAGBTN,NewOption.bSwapDragButton);

              return TRUE;

          case PSN_KILLACTIVE:

              ....

           NewOption.bSwapDragButton=IsDlgButtonChecked(hDlg,IDC_SWAPDRAGBTN);

              ....

 

ÈÙ ¹öÆ° °ü·Ã ¿É¼Ç, ÆíÁýÁßÀÇ Ä¿¼­ ó¸®¿Í ½º¸¶Æ® °ø¹é ¿É¼ÇÀº µ¿ÀÛ ÆäÀÌÁö¿¡ µÐ´Ù.

 

BOOL CALLBACK OperationDlgProc(HWND hDlg,UINT iMessage,WPARAM wParam,LPARAM lParam)

{

     HWND hCon[4];

     int i;

 

     switch(iMessage) {

     case WM_INITDIALOG:

          hCon[0]=GetDlgItem(hDlg,IDC_WHEEL);

          hCon[1]=GetDlgItem(hDlg,IDC_CTRLWHEEL);

          hCon[2]=GetDlgItem(hDlg,IDC_SHIFTWHEEL);

          hCon[3]=GetDlgItem(hDlg,IDC_CTRLSHIFTWHEEL);

          for (i=0;i<4;i++) {

              SendMessage(hCon[i],CB_ADDSTRING,0,(LPARAM)"µ¿ÀÛ ¾øÀ½");

              SendMessage(hCon[i],CB_ADDSTRING,0,(LPARAM)"»óÇÏ ½ºÅ©·Ñ");

              SendMessage(hCon[i],CB_ADDSTRING,0,(LPARAM)"ÇÑÁÙ¾¿ ½ºÅ©·Ñ");

              SendMessage(hCon[i],CB_ADDSTRING,0,(LPARAM)"ÆäÀÌÁö ´ÜÀ§ ½ºÅ©·Ñ");

              SendMessage(hCon[i],CB_ADDSTRING,0,(LPARAM)"¹Ý ÆäÀÌÁö ´ÜÀ§ ½ºÅ©·Ñ");

              SendMessage(hCon[i],CB_ADDSTRING,0,(LPARAM)"ÁÙ°£ Á¶Á¤");

              SendMessage(hCon[i],CB_ADDSTRING,0,(LPARAM)"±Û²Ã Å©±â Á¶Á¤");

              SendMessage(hCon[i],CB_ADDSTRING,0,(LPARAM)"ÆíÁý Ãë¼Ò/Àç½ÇÇà");

          }

          hCon[0]=GetDlgItem(hDlg,IDC_CBCURSOREDIT);

          SendMessage(hCon[0],CB_ADDSTRING,0,(LPARAM)"ó¸®ÇÏÁö ¾ÊÀ½");

          SendMessage(hCon[0],CB_ADDSTRING,0,(LPARAM)"¼û±â±â");

          SendMessage(hCon[0],CB_ADDSTRING,0,(LPARAM)"¿À¸¥ÂÊ À§·Î Ãß¹æ");

          SendMessage(hCon[0],CB_ADDSTRING,0,(LPARAM)"¿À¸¥ÂÊ ¾Æ·¡·Î Ãß¹æ");

          SendMessage(hCon[0],CB_ADDSTRING,0,(LPARAM)"ij·µ µû¶ó ´Ù´Ï±â");

          return TRUE;

     case WM_COMMAND:

          switch (LOWORD(wParam))   {

          case IDC_WHEEL:

          case IDC_CTRLWHEEL:

          case IDC_SHIFTWHEEL:

          case IDC_CTRLSHIFTWHEEL:

          case IDC_CBCURSOREDIT:

              switch (HIWORD(wParam)) {

              case CBN_SELCHANGE:

                   PropSheet_Changed(GetParent(hDlg),hDlg);

                   return TRUE;

              }

              break;

          case IDC_USEAUTOCLIP:

              AdjustDlgUI(10,hDlg);

          case IDC_WORDWRAP:

          case IDC_HANGUL:

          case IDC_AUTOCLIPBYTAB:

          case IDC_PREVIEWCLIP:

          case IDC_CHKSMARTSPACE:

              PropSheet_Changed(GetParent(hDlg),hDlg);

              break;

          }

          return TRUE;

     case WM_NOTIFY:

          LPNMHDR hdr;

          hdr=(LPNMHDR)lParam;

          switch (hdr->code) {

          case PSN_SETACTIVE:

              g_StartPage=10;

              SendDlgItemMessage(hDlg,IDC_WHEEL,CB_SETCURSEL,NewOption.nWheel,0);

              SendDlgItemMessage(hDlg,IDC_CTRLWHEEL,CB_SETCURSEL,NewOption.nCtrlWheel,0);

              SendDlgItemMessage(hDlg,IDC_SHIFTWHEEL,CB_SETCURSEL,NewOption.nShiftWheel,0);

              SendDlgItemMessage(hDlg,IDC_CTRLSHIFTWHEEL,CB_SETCURSEL,NewOption.nCtrlShiftWheel,0);

              CheckDlgButton(hDlg,IDC_WORDWRAP,NewOption.bWrap);

              CheckDlgButton(hDlg,IDC_HANGUL,NewOption.Hangul);

              CheckDlgButton(hDlg,IDC_AUTOCONVERT,NewOption.bAutoConvert);

              CheckDlgButton(hDlg,IDC_PREVIEWCLIP,NewOption.bPreviewClip);

              CheckDlgButton(hDlg,IDC_USEAUTOCLIP,NewOption.bUseAutoClip);

              CheckDlgButton(hDlg,IDC_AUTOCLIPBYTAB,NewOption.bAutoClipByTab);

              SendDlgItemMessage(hDlg,IDC_CBCURSOREDIT,CB_SETCURSEL,NewOption.CursorEdit,0);

              CheckDlgButton(hDlg,IDC_CHKSMARTSPACE,NewOption.bSmartSpace);

              AdjustDlgUI(10,hDlg);

              return TRUE;

          case PSN_APPLY:

              ApplyNow();

              return TRUE;

          case PSN_KILLACTIVE:

              NewOption.nWheel=SendDlgItemMessage(hDlg,IDC_WHEEL,CB_GETCURSEL,0,0);

              NewOption.nCtrlWheel=SendDlgItemMessage(hDlg,IDC_CTRLWHEEL,CB_GETCURSEL,0,0);

              NewOption.nShiftWheel=SendDlgItemMessage(hDlg,IDC_SHIFTWHEEL,CB_GETCURSEL,0,0);

              NewOption.nCtrlShiftWheel=SendDlgItemMessage(hDlg,IDC_CTRLSHIFTWHEEL,CB_GETCURSEL,0,0);

              NewOption.bWrap=IsDlgButtonChecked(hDlg,IDC_WORDWRAP);

              NewOption.Hangul=IsDlgButtonChecked(hDlg,IDC_HANGUL);

              NewOption.bAutoConvert=IsDlgButtonChecked(hDlg,IDC_AUTOCONVERT);

              NewOption.bPreviewClip=IsDlgButtonChecked(hDlg,IDC_PREVIEWCLIP);

              NewOption.bUseAutoClip=IsDlgButtonChecked(hDlg,IDC_USEAUTOCLIP);

              NewOption.bAutoClipByTab=IsDlgButtonChecked(hDlg,IDC_AUTOCLIPBYTAB);

              NewOption.CursorEdit=SendDlgItemMessage(hDlg,IDC_CBCURSOREDIT,CB_GETCURSEL,0,0);

              NewOption.bSmartSpace=IsDlgButtonChecked(hDlg,IDC_CHKSMARTSPACE);

              return TRUE;

          }

          break;

     }

     return FALSE;

}

 

¿É¼ÇµéÀÌ º¯°æµÉ ¶§ÀÇ Ã³¸®´Â ApplyNow¿¡ ÀÛ¼ºÇÏ°í »õ·Î Ãß°¡µÈ ¿É¼Çµµ ApiEdit¿¡ Àû¿ëÇØ¾ß ÇϹǷΠSetSetting¿¡µµ ºñ½ÁÇÑ Äڵ尡 Ãß°¡µÈ´Ù.

 

void ApplyNow()

{

     ....

          if (lstrcmp(Option.logfont.lfFaceName,NewOption.logfont.lfFaceName) != 0 ||

              Option.logfont.lfHeight != NewOption.logfont.lfHeight ||

           Option.logfont.lfWeight != NewOption.logfont.lfWeight ||

           Option.logfont.lfItalic != NewOption.logfont.lfItalic ) {

              tFont=NewOption.logfont;

              hdc=GetDC(NULL);

              tFont.lfHeight=NewOption.logfont.lfHeight*GetDeviceCaps(hdc,LOGPIXELSY)/72;

              tFont.lfWidth=0;

              ReleaseDC(NULL,hdc);

              pSi->Ae.SetFont(&tFont);

          }

 

          ....

 

          if (Option.nWheel != NewOption.nWheel) {

              pSi->Ae.SetWheel(NewOption.nWheel);

          }

 

          if (Option.nCtrlWheel != NewOption.nCtrlWheel) {

              pSi->Ae.SetCtrlWheel(NewOption.nCtrlWheel);

          }

 

          if (Option.nShiftWheel != NewOption.nShiftWheel) {

              pSi->Ae.SetShiftWheel(NewOption.nShiftWheel);

          }

 

          if (Option.nCtrlShiftWheel != NewOption.nCtrlShiftWheel) {

              pSi->Ae.SetCtrlShiftWheel(NewOption.nCtrlShiftWheel);

          }

 

          if (Option.bSwapDragButton != NewOption.bSwapDragButton) {

              pSi->Ae.SetSwapDragButton(NewOption.bSwapDragButton);

          }

 

          if (Option.CharExtra != NewOption.CharExtra) {

              pSi->Ae.SetCharExtra(NewOption.CharExtra);

          }

 

          if (Option.WordExtra != NewOption.WordExtra) {

              pSi->Ae.SetWordExtra(NewOption.WordExtra);

          }

 

          if (Option.CharRatio != NewOption.CharRatio) {

              pSi->Ae.SetCharRatio(NewOption.CharRatio);

          }

 

          if (Option.CursorEdit != NewOption.CursorEdit) {

              pSi->Ae.SetCursorEdit(NewOption.CursorEdit);

          }

 

          if (Option.bSmartSpace != NewOption.bSmartSpace) {

              pSi->Ae.SetSmartSpace(NewOption.bSmartSpace);

          }

 

          hChild=GetWindow(hChild,GW_HWNDNEXT);

     }

     ....

 

void SetSetting(CApiEdit &Ae)

{

     ....

     if (Option.nWheel != Ori.nWheel) {

          Ae.SetWheel(Option.nWheel);

     }

 

     if (Option.nCtrlWheel != Ori.nCtrlWheel) {

          Ae.SetCtrlWheel(Option.nCtrlWheel);

     }

 

     if (Option.nShiftWheel != Ori.nShiftWheel) {

          Ae.SetShiftWheel(Option.nShiftWheel);

     }

 

     if (Option.nCtrlShiftWheel != Ori.nCtrlShiftWheel) {

          Ae.SetCtrlShiftWheel(Option.nCtrlShiftWheel);

     }

 

     if (Option.bSwapDragButton != Ori.bSwapDragButton) {

          Ae.SetSwapDragButton(Option.bSwapDragButton);

     }

 

     if (Option.CharExtra != Ori.CharExtra) {

          Ae.SetCharExtra(Option.CharExtra);

     }

 

     if (Option.WordExtra != Ori.WordExtra) {

          Ae.SetWordExtra(Option.WordExtra);

     }

    

     if (Option.CharRatio != Ori.CharRatio) {

          Ae.SetCharRatio(Option.CharRatio);

     }

    

     if (Option.CursorEdit != Ori.CursorEdit) {

          Ae.SetCursorEdit(Option.CursorEdit);

     }

 

     if (Option.bSmartSpace != Ori.bSmartSpace) {

          Ae.SetSmartSpace(Option.bSmartSpace);

     }

}

 

±Û²Ã À̸§, Å©±â»Ó¸¸ ¾Æ´Ï¶ó ±½°Ô, ÀÌÅŸ¯ ¿É¼ÇÀÌ º¯°æµÇ¾îµµ ±Û²ÃÀ» ´Ù½Ã ¸¸µé¾î¾ß ÇÑ´Ù. »ý¼ºÇÒ ±Û²ÃÀÇ Á¤º¸ÀÎ logfontÀÇ ¸â¹öµéÀÌ ¼öÁ¤µÇ¹Ç·Î SetFont µîÀÇ ÇÔ¼ö´Â ¼öÁ¤ÇÒ ÇÊ¿ä°¡ ¾ø´Ù. ¸¶Áö¸·À¸·Î ´ëÈ­»óÀÚÀÇ ÄÁÆ®·Ñ °ü¸®¸¦ À§ÇÑ Äڵ带 ÀÛ¼ºÇÑ´Ù.

 

void AdjustDlgUI(int Page,HWND hDlg)

{

     switch (Page) {

     ....

     case 1:

          if (SendDlgItemMessage(hDlg,IDC_FONTFACE,CB_GETCURSEL,0,0)==0) {

              EnableWindow(GetDlgItem(hDlg,IDC_FONTSIZE),FALSE);

           EnableWindow(GetDlgItem(hDlg,IDC_EDCHARRATIO),FALSE);

           EnableWindow(GetDlgItem(hDlg,IDC_SPINCHARRATIO),FALSE);

           EnableWindow(GetDlgItem(hDlg,IDC_CHKBOLD),FALSE);

           EnableWindow(GetDlgItem(hDlg,IDC_CHKITALIC),FALSE);

          } else {

              EnableWindow(GetDlgItem(hDlg,IDC_FONTSIZE),TRUE);

           EnableWindow(GetDlgItem(hDlg,IDC_EDCHARRATIO),TRUE);

           EnableWindow(GetDlgItem(hDlg,IDC_SPINCHARRATIO),TRUE);

           EnableWindow(GetDlgItem(hDlg,IDC_CHKBOLD),TRUE);

           EnableWindow(GetDlgItem(hDlg,IDC_CHKITALIC),TRUE);

          }

          break;

 

½Ã½ºÅÛ ±Û²ÃÀÏ ¶§´Â ÀåÆò, ±½°Ô, ±â¿ïÀÓ ¿É¼ÇÀ» ¼±ÅÃÇÒ ¼ö ¾øÀ¸¹Ç·Î °ü·Ã ÄÁÆ®·ÑÀ» »ç¿ë±ÝÁöÇÑ´Ù.