2.¿­ ¸ðµå

°¡.¿­¸ðµå

¿­ ¸ðµå(Column Mode)¶õ Á÷»ç°¢Çü ÇüÅ·Π¼±ÅÃÇÏ´Â ¸ðµåÀÌ´Ù. ºñ½ÁÇÏ°Ô ¹Ýº¹µÇ´Â ¾Æ·¡ À­ÁÙÀ» °°ÀÌ ¼±ÅÃÇؼ­ Áö¿ì°Å³ª º¹»çÇÏ°í ½ÍÀ» ¶§ ¿­ ¸ðµå¸¦ »ç¿ëÇÑ´Ù. Åë»óÀÇ ¼±Åà ¸ðµå¿Í´Â ´Þ¸® Á÷»ç°¢Çü ÇüÅ·Π¼±ÅõǹǷΠ¸ðµå¸¦ ±â¾ïÇÏ´Â º°µµÀÇ º¯¼ö°¡ ÇÊ¿äÇÏ´Ù. ±âº» ºä¿¡ ¼±Åà ¸ðµå¿Í ¿­ ¸ðµåÀÏ ¶§ÀÇ ¼±Åà ¿µ¿ªÀ» ±â¾ïÇÏ´Â ¸â¹ö º¯¼ö¸¦ ¼±¾ðÇÑ´Ù.

 

class CApiEditText : public CWindow

{

     ....

     BOOL bColumnMode;

     int SelExtraX;

 

public:

     virtual BOOL GetColumnMode() { return bColumnMode; }

     virtual void SetColumnMode(int aMode);

     virtual void GetSelInLine(int Line,int &s,int &e);

};

 

bColumnMode´Â ¸» ±×´ë·Î ¼±Åà ¸ðµåÀÎÁö¸¦ ±â¾ïÇÏ´Â º¯¼öÀ̸ç ÀÌ °ªÀÌ TRUEÀÌ¸é ¿­ ¸ðµå »óÅÂÀÌ´Ù. ¼±Åà ¸ðµå°¡ µÎ °¡Áö¹Û¿¡ ¾øÀ¸¹Ç·Î BOOLÇüÀÇ º¯¼ö·Î ¸ðµå¸¦ ±¸ºÐÇÑ´Ù. SelExtraX´Â SelEndÀÌÈÄÀÇ ÃÊ°úºÐÀε¥ Á÷»ç°¢Çü ÇüÅÂÀÇ ¼±Åà ºí·ÏÀ» ±â¾ïÇÏ·Á¸é SelStart, SelEnd¸¸À¸·Î ºí·ÏÀÇ ¹üÀ§¸¦ Á¤È®ÇÏ°Ô Ç¥ÇöÇÒ ¼ö ¾ø±â ¶§¹®¿¡ Ãß°¡ º¯¼ö°¡ ÇÊ¿äÇÏ´Ù. ÀÌ º¯¼ö´Â InitView¿¡¼­ 0À¸·Î ÃʱâÈ­ÇÑ´Ù.

 

void CApiEditText::InitView()

{

     ....

    SelExtraX=0;

     Invalidate(-1);

}

 

¼±Åà ¸ðµå¸¦ Á¶»çÇÏ´Â Get ÇÔ¼ö´Â ÀζóÀÎÀ¸·Î ÀÛ¼ºÇßÀ¸¸ç Set ÇÔ¼ö´Â ¸ðµå°¡ ¹Ù²ð ¶§ ¿©·¯ °¡Áö ÀϵéÀ» ÇØ¾ß ÇϹǷΠÀÏ¹Ý ÇÔ¼ö·Î ÀÛ¼ºÇÑ´Ù.

 

void CApiEditText::SetColumnMode(int aMode)

{

     bColumnMode=aMode;

     if (bColumnMode==FALSE) {

          if (SelStart != SelEnd) {

              if (ExtraX != 0) {

                   ExtraX=0;

                   SetCaret();

              }

              SelExtraX=0;

          }

     }

 

     if (SelStart != SelEnd) {

          Invalidate(-1);

     }

}

 

¿­ ¸ðµå°¡ Ç®¸± ¶§ ¼±Åà ¿µ¿ªÀÌ ÀÖ°í °¡»ó À§Ä¡¿¡ ij·µÀÌ ÀÖÀ¸¸é ÁÙ ³¡À¸·Î ij·µÀ» º¸³»¾ß ÇÑ´Ù. ÀÌ ¶§ ij·µÀÌ °¡»ó À§Ä¡¿¡¼­ ½ÇÁ¦ À§Ä¡·Î °­Á¦ À̵¿ÇϹǷΠSelExtraX´Â ¹«Á¶°Ç 0ÀÌ µÈ´Ù. bColumnModeÀÇ µðÆúÆ®°ªÀº FALSEÀÌµÇ ´çÀå Å×½ºÆ®¸¦ ÇØ¾ß ÇϹǷΠÀÏ´Ü TRUE·Î ÃʱâÈ­ÇÑ´Ù. bVirtualPos´Â Å×½ºÆ®°¡ ³¡³µÀ¸¹Ç·Î FALSE·Î ¹Ù²Û´Ù.

 

void CApiEditText::SetDefaultSetting()

{

     ....

     bVirtualPos=FALSE;

     bColumnMode=TRUE;

}

 

¿­ ¸ðµå¿¡¼­´Â ¼±Åà ¿µ¿ªÀ» Ç¥½ÃÇÏ´Â ¹æ¹ýÀÌ ´Þ¶óÁö´Âµ¥ Á÷»ç°¢Çü ¸ð¾çÀ¸·Î ¼±Åà ¿µ¿ªÀ» Ç¥½ÃÇÑ´Ù. DrawLine ÇÔ¼ö¸¦ ´ÙÀ½°ú °°ÀÌ ¼öÁ¤ÇÑ´Ù.

 

int CApiEditText::DrawLine(HDC hdc, int Line)

{

     ....

     if (bColumnMode == FALSE) {

          SelFirst=min(SelStart,SelEnd);

          SelSecond=max(SelStart,SelEnd);

     } else {

          GetSelInLine(Line,SelFirst,SelSecond);

     }

 

ÀÏ¹Ý ¼±Åà ¸ðµå¿¡¼­´Â ¼±ÅÃÀÇ ½ÃÀÛÁ¡°ú ³¡Á¡¸¸ Á¶»çÇϸé ƯÁ¤ ¿ÀÇÁ¼ÂÀÌ ¼±Åà ¿µ¿ªÀÇ ¾ÈÀÎÁö ¾Æ´ÑÁö¸¦ ±¸ºÐÇÒ ¼ö ÀÖ´Ù. ±×·¯³ª ¿­ ¸ðµå´Â ´Ü¼øÈ÷ ½ÃÀÛ À§Ä¡¿Í ³¡ À§Ä¡¸¸À¸·Î ±¸¼ºµÇÁö ¾ÊÀ¸¸ç ¼±Åà ¿µ¿ªÀÌ ¿©·¯ ÁÙ¿¡ °ÉÄ¥ ¼ö ÀÖ´Ù. GetSelInLine ÇÔ¼ö´Â ¿­ ¸ðµå¿¡¼­ LineÁÙÀÇ ¼±Åà ½ÃÀÛÁ¡°ú ³¡Á¡À» ±¸ÇÑ´Ù.

 

void CApiEditText::GetSelInLine(int Line,int &s,int &e)

{

     int SelFirst, SelSecond;

     int sx,sy;

     int ex,ey;

     int left,right;

     int BkExtraX;

 

     s=e=0;

 

     if (SelStart == SelEnd) {

          return;

     }

 

     SelFirst=min(SelStart,SelEnd);

     SelSecond=max(SelStart,SelEnd);

     if (SelFirst > pLine[Line].End || SelSecond <= pLine[Line].Start) {

          return;

     }

 

     BkExtraX=ExtraX;

     ExtraX=0;

     ignoreVirt++;

 

     GetXYFromOff(SelStart,sx,sy);

     GetXYFromOff(SelEnd,ex,ey);

     ex+=SelExtraX*arChWidth[' '];

     left=min(sx,ex);

     right=left+abs(sx-ex);

 

     s=GetOffFromXY(left,Line*LineHeight);

     e=GetOffFromXY(right,Line*LineHeight);

     ignoreVirt--;

     ExtraX=BkExtraX;

}

 

Á¶»çÇÒ ÁÙ ¹øÈ£ LineÀ» Àμö·Î Àü´Þ¹ÞÀ¸¸ç ¿­ ¸ðµåÀÇ ¼±Åà ¿µ¿ªÀÌ ÀÌ ÁÙ³»ÀÇ ¾îµðÂë¿¡ °ÉÃÄ ÀÖ´ÂÁö¸¦ Ãâ·Â¿ë Àμö s, e¿¡ ´ëÀÔÇÏ´Â °ÍÀÌ ÀÌ ÇÔ¼öÀÇ ÀÓ¹«ÀÌ´Ù. ÀÏ´Ü s, e´Â ¼±Åà ¿µ¿ªÀÌ ¾ø´Â »óÅ·ΠÃʱâÈ­ÇÑ´Ù. ±×¸®°í SelStart¿Í SelEnd°ªÀ» ¿ì¼±ÀûÀ¸·Î Á¡°ËÇÏ¿© ¼±Åà ¿µ¿ªÀÌ ¾ø´Ù¸é ±×´ë·Î ¸®ÅÏÇÑ´Ù. ¼±Åà ¿µ¿ªÀÌ ¾ø´Ù¸é ¿­ ¸ðµåÀÌ°Ç ¾Æ´Ñ°Ç ÀÌ ÁÙ ³»¿¡ ¼±ÅÃµÈ ¿µ¿ªÀÌ ÀÖÀ»¸® ¸¸¹«ÇÏ´Ù.

¼±Åà ¿µ¿ªÀÌ ÀÖ´Ù¸é ÀÌ ÁÙ¿¡ ¼±Åà ¿µ¿ªÀÌ °ÉÃÄ ÀÖ´ÂÁö Á¡°ËÇϴµ¥ ¼±Åà ½ÃÀÛÀÌ ÁÙ ¼±µÎº¸´Ù µÚ¿¡ Àְųª ¼±Åà ³¡ÀÌ ÁÙ ³¡º¸´Ù ¾ÕÂÊ¿¡ ÀÖ´Ù¸é ¼±Åà ¿µ¿ªÀº ÀÌ ÁÙ¿¡´Â °ÉÃÄ ÀÖÁö ¾Ê´Ù. À̶§µµ ±×³É ¸®ÅÏÇϱ⸸ Çϸé s, e°¡ ¸ðµÎ 0ÀÎ »óÅ·Πµ¹¾Æ°£´Ù. ¼±Åà ºí·ÏÀÇ ÀϺΰ¡ ÀÌ ÁÙ¿¡ °ÉÃÄ ÀÖ´Ù¸é ÁÙ ³»ÀÇ ¼±Åà ½ÃÀÛÁ¡°ú ³¡Á¡À» ±¸ÇÑ´Ù.

¼±Åà ºí·ÏÀÇ Á»ó´Ü°ú ¿ìÇÏ´ÜÀÇ ÁÂÇ¥¸¦ °¢°¢ ±¸ÇÑ ÈÄ xÁÂÇ¥ÀÇ ÀÛÀº °ªÀ» left·Î ÃëÇÏ°í Å« °ªÀ» right·Î ÃëÇÏ¸é ¼±Åà ºí·ÏÀÇ ¼öÆò ½ÃÀÛ, ³¡ Á¡À» °¢°¢ ±¸ÇÒ ¼ö ÀÖ´Ù. ÀÌ·¸°Ô ±¸ÇÑ x ÁÂÇ¥µéÀ» ÁÙ ³»ÀÇ ¿ÀÇÁ¼ÂÀ¸·Î ¹Ù²Ù¾î s, e¿¡ ´ëÀÔÇÏ¸é °Ë»ö ´ë»óÁÙÀÌ ¼±Åà ºí·Ï¿¡ ¼ÓÇÑ ¿ÀÇÁ¼ÂÀ» ±¸ÇÒ ¼ö ÀÖ´Ù.

ÀÌ °è»êÀ» ÇÏ´Â Áß¿¡ Çà¿­ ¹× ÁÂÇ¥ °è»ê À¯Æ¿¸®Æ¼ ÇÔ¼öµé¿¡ ÀÇÇØ ExtraX´Â º¯°æµÇ¾î¼­´Â ¾ÈµÇ¸ç ¶ÇÇÑ ÂüÁ¶µÇ¾î¼­µµ ¾ÈµÈ´Ù. ±×·¡¼­ ÀÌ °ªÀ» º°µµÀÇ º¯¼ö¿¡ ¹é¾÷ÇØ ³õ°í Àá½Ã 0À¸·Î ¸¸µé¾î µÎ¾úÀ¸¸ç ignoreVirt¸¦ 1 Áõ°¡½ÃÄÑ ÀÌ ÇÔ¼ö ³»ºÎ¿¡¼­ È£ÃâÇÏ´Â ÇÔ¼öµéÀÌ ExtraX¸¦ ¹Ù²ÙÁö ¸øÇÏ°Ô Çß´Ù. °è»êÀÌ ³¡³­ ÈÄ ExtraX´Â ¿ø·¡ °ªÀ¸·Î º¹±¸ÇÑ´Ù.

DrawLineÀº ÇÑ ÁÙ ´ÜÀ§·Î ±×¸®±â¸¦ ÇϹǷΠÁö±Ý Ãâ·ÂÇÏ°í ÀÖ´Â °¢ ÁÙ¿¡ ´ëÇؼ­¸¸ ¼±Åÿµ¿ªÀ» ±¸ÇÏ°í ÀÌ ¿µ¿ª¿¡ ´ëÇؼ­¸¸ ¼±Åà ºí·Ï Ç¥½Ã¸¦ ÇÏ¸é ±×¸¸ÀÌ´Ù. Á÷»ç°¢ÇüÀÇ ¼±Åÿµ¿ª Àüü¸¦ ´Ù ¾Ë¾Æ¾ß ÇÒ ÇÊ¿ä´Â ¾ø´Ù. DrawLineÀÇ ³ª¸ÓÁö ÄÚµå´Â GetSelInLine ÇÔ¼ö°¡ ±¸ÇÑ SelFirst, SelSecond¸¦ ¼±Åÿµ¿ªÀ¸·Î ÂüÁ¶ÇÏ¿© ÁÙÀ» ±×¸°´Ù.

¿­ ¸ðµå¿¡¼­´Â ¹«È¿È­¸¦ ó¸®ÇÏ´Â ºÎºÐ¿¡ º¯È­°¡ ÇÊ¿äÇÏ´Ù. ÀÏ¹Ý ¸ðµå¿¡¼­´Â »õ·Î ¼±ÅÃÀÌ È®ÀåµÈ ºÎºÎ¸¸ ¹«È¿È­ÇÏ¿© ´Ù½Ã ±×¸®¸é µÇÁö¸¸ ¿­ ¸ðµå¿¡¼­´Â ij·µÀÌ ´Ü ÇÑÄ­¸¸ ¿òÁ÷¿©µµ ¼±Åà ¿µ¿ª Àüü°¡ ¹Ù²ð ¼ö Àֱ⠶§¹®¿¡ Àüü¸¦ ´Ù½Ã ±×·Á¾ß ÇÑ´Ù. ¼±Åà ¿µ¿ªÀ» È®ÀåÇÏ´Â ÇÔ¼ö¸¦ ´ÙÀ½°ú °°ÀÌ ¼öÁ¤ÇÑ´Ù.

 

void CApiEditText::ExpandSelection(int Start, int End)

{

     int OldSelEnd;

 

     if (SelStart==SelEnd) {

          SelStart=Start;

          SelEnd=End;

          Invalidate(min(SelStart,SelEnd),max(SelStart,SelEnd));

     } else {

          OldSelEnd=SelEnd;

          SelEnd=End;

          Invalidate(min(OldSelEnd,SelEnd),max(OldSelEnd,SelEnd));

     }

    if (bColumnMode) {

        Invalidate(min(SelStart,SelEnd),max(SelStart,SelEnd));

    }

}

 

¾ÕÂÊ¿¡´Â ¼±Åÿ¡ ÀÇÇØ Ãß°¡·Î È®ÀåµÈ ºÎºÐÀ» ¹«È¿È­ÇÏ´Â Äڵ尡 ÀÖ´Ù. ±×¸®°í »õ·Î ÀÛ¼ºµÈ ÄÚµå´Â ¿­¸ðµåÀÏ ¶§ ¼±Åà ¿µ¿ªÀ» Àüü¸¦ ´Ù½Ã ¹«È¿È­ÇÑ´Ù. Invalidate¸¦ µÎ ¹ø È£ÃâÇϴµ¥ º¯È­°¡ ÀÖ¾ú´ø ºÎºÐÀ» ÀÏÂ÷·Î ¹«È¿È­ÇÏ°í ¿­¸ðµåÀÏ ¶§ ¼±Åà ¿µ¿ª Àüü°¡ ´Ù½Ã ¹«È¿È­µÈ´Ù. ¿­¸ðµå¶ó°í Çؼ­ ¼±Åà ¿µ¿ª¸¸ ¹«È¿È­µÇ´Â °ÍÀÌ ¾Æ´Ï¶ó µÎ ¿µ¿ªÀÇ ÇÕÁýÇÕÀÌ ¹«È¿È­µÇ´Â °ÍÀÌ´Ù.

Invalidate´Â ÇÊ¿äÇѸ¸Å­ ¿©·¯ ¹ø È£ÃâÇÒ ¼ö ÀÖÀ¸¸ç ¿©·¯ ¹ø È£ÃâÇÑ´Ù°í Çؼ­ ¾î¶² ºÒÀÌÀÍÀÌ ÀÖ´Â °ÍÀº ¾Æ´Ï´Ù. WM_PAINT´Â ¹«È¿ ¿µ¿ªÀÇ ÇÕÁýÇÕ¿¡ ´ëÇØ ÇÑ ¹ø¸¸ ±×¸®±â¸¦ ¼öÇàÇϹǷΠµÎ ¹ø ³ª´©¾î ¹«È¿È­¸¦ Çصµ »ó°ü¾ø´Ù. ¶ÇÇÑ ÀÌ Äڵ带 ÅëÇÕÇÏ·Á°í ¾Ö¾µ ÇÊ¿äµµ ¾ø´Ù. ´ë°³ÀÇ °æ¿ì´Â È®ÀåµÈ ¿µ¿ª¿¡ ´ëÇؼ­¸¸ ¹«È¿È­¸¦ ÇϹǷΠ±×¸®±â ¼Óµµ°¡ ºü¸¦ °ÍÀÌ°í ¿­ ¸ðµåÀÏ ¶§¸¸ ¼±Åà ¿µ¿ªÀ» Åë°·Î ±×¸®¹Ç·Î ÇöÀç Äڵ尡 °¡Àå ÀÌ»óÀûÀÌ´Ù. ÀÌ ÇÔ¼ö¿Ü¿¡µµ ¸¶¿ì½º·Î ¼±Åÿµ¿ªÀ» È®ÀåÇÒ ¶§µµ µ¿ÀÏÇÑ ¹æ½ÄÀ» »ç¿ëÇØ¾ß ÇÑ´Ù.

 

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

{

     ....

     if (bDragSel) {

          ....

     } else {

          ....

          SetCaret();

          Invalidate(min(OldOff,off),max(OldOff,off));

        if (bColumnMode) {

           Invalidate(min(SelStart,SelEnd),max(SelStart,SelEnd));

        }

     }

 

¸¶¿ì½º°¡ ¿òÁ÷ÀÏ ¶§¸¶´Ù È®ÀåµÈ ¼±Åÿµ¿ª°ú Àüü ¼±Åÿµ¿ªÀ» µÎ¹ø ¹«È¿È­Çß´Ù. ÀÌÁ¦ Å°º¸µå·Î ¼±ÅÃÇϳª ¸¶¿ì½º·Î ¼±ÅÃÇϳª È®ÀåµÈ ¿µ¿ªÀÌ Àß ±×·ÁÁú °ÍÀÌ´Ù. ¿­ ¸ðµå¿¡¼­ ¼±ÅÃÁßÀÏ ¶§´Â ÀÓ½ÃÀûÀ¸·Î °¡»ó À§Ä¡·Î À̵¿ÇÒ ¼ö ÀÖ¾î¾ß ÇÑ´Ù. IsVirtualPosable ÇÔ¼ö¿¡ ´ÙÀ½ Á¶°ÇÀ» Ãß°¡ÇÑ´Ù.

 

BOOL CApiEditText::IsVirtualPosable()

{

     if (bVirtualPos || (bColumnMode && SelStart != SelEnd)) {

          if (ignoreVirt > 0) {

              return FALSE;

          } else {

              return TRUE;

          }

     }

     return FALSE;

}

 

¿­ ¸ðµå¿¡¼­ ¼±Åà ¿µ¿ªÀÌ ÀÖÀ» ¶§¸¦ °¡»ó À§Ä¡ ¿É¼Ç°ú µ¿ÀÏÇÏ°Ô Ãë±ÞÇÑ´Ù´Â ¶æÀÌ´Ù. À̶§µµ ignoreVirt´Â °è¼Ó À¯È¿ÇÏ´Ù. ¿­¸ðµå¿¡¼­ ¼±ÅÃÁßÀÏ ¶§´Â bVirtualPos ¿É¼ÇÀÌ FALSEÀÌ´õ¶óµµ °¡»ó À§Ä¡·ÎÀÇ À̵¿À» Çã°¡Çϴµ¥ ±×·¡¾ß ´ÙÀ½°ú °°Àº ¼±ÅÃÀÌ °¡´ÉÇÏ´Ù.

¸¶Áö¸· ÁÙÀÌ À§ÂÊ ÁÙº¸´Ù ª´õ¶óµµ °¡»ó À§Ä¡·Î À̵¿ÇÒ ¼ö ÀÖ¾î¾ß À§ÂʱîÁö Á÷»ç°¢ÇüÀ¸·Î ¼±Åúí·ÏÀ» ¸¸µé ¼ö ÀÖ´Ù. ÀÌ·± ¼±ÅÃÀÌ °¡´ÉÇϱâ À§ÇØ °¡»ó À§Ä¡ À̵¿ ±â´ÉÀÌ ¸ÕÀú ÀÛ¼ºµÇ¾î¾ß ÇÏ¸ç ±×·¡¼­ ¿­¸ðµå¸¦ ÀÛ¼ºÇϱâ Àü¿¡ °¡»ó À§Ä¡ À̵¿ ±â´ÉÀ» ¸ÕÀú ÀÛ¼ºÇÏ°í IsVirtualPosableÀ̶ó´Â Áß°£ ÇÔ¼ö¸¦ µÎ´Â °ÍÀÌ´Ù. ¼±Åÿµ¿ªÀ» Ç¥½ÃÇÏ´Â ÄÚµå´Â ¿Ï¼ºµÇ¾ú°í ÀÌÁ¦ ½ÇÁ¦·Î ¿­¸ðµå·Î ¼±ÅÃÀ» ÇÏ´Â Äڵ带 ÀÛ¼ºÇØ º¸ÀÚ. ¸ÕÀú ¸¶¿ì½º·Î ¼±ÅÃÇÏ´Â Äڵ带 ÀÛ¼ºÇÑ´Ù.

 

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

{

     ....

              // ¼±Åà Áß¿¡´Â °¡»ó À§Ä¡·Î ¹þ¾î³¯ ¼ö ¾øÀ½. ´Ü, Ä÷³ ¸ðµåÀÏ ¶§´Â ¿¹¿Ü

           if (!bColumnMode) {

                   ignoreVirt++;

           }

              off=SelEnd=GetOffFromXY(x+xPos,y+yPos);

           if (!bColumnMode) {

                   ignoreVirt--;

           } else {

               SelExtraX=ExtraX;

           }

 

¸¶¿ì½º·Î ¼±ÅÃÀ» ÇÒ ¶§´Â °¡»ó À§Ä¡·Î À̵¿ÇÏÁö ¾Êµµ·Ï Çߴµ¥ ¿­ ¸ðµåÀÏ ¶§´Â ¼±ÅÃÁßÀÏ ¶§¶óµµ °¡»ó À§Ä¡·Î °¥ ¼ö ÀÖ¾î¾ß ÇÑ´Ù. ¿­ ¸ðµå¿¡¼­ ¼±ÅÃÁßÀÏ ¶§ °¡»ó À§Ä¡·Î À̵¿ÇÒ ¼ö ÀÖµµ·Ï ÇÏ´Â Á¶Ä¡°¡ IsVirtualPosable ÇÔ¼ö¿¡ ÀÌ¹Ì µÇ¾î ÀÖÁö¸¸ ÀÌ ÇÔ¼ö¿¡¼­ ignoreVirt·Î ÀÌ Á¶°ÇÀ» ´Ù½Ã ±ÝÁö½ÃÅ°°í ÀÖÀ¸¹Ç·Î ¿­¸ðµåÀÏ ¶§´Â ÀÌ ±ÝÁö µ¿ÀÛÀ» ´Ù½Ã ±ÝÁöÇØ¾ß ÇÑ´Ù. ¼±Åÿµ¿ªÀÇ È®Àå°ªÀÎ SelExtraX´Â SelEnd°è»ê½Ã Á¶»çµÈ ExtraX·Î Á¤ÀÇÇÏ¸é µÈ´Ù. Å°º¸µå·Î ¼±ÅÃÇÒ ¶§µµ ¸¶Âù°¡Áö 󸮰¡ ÇÊ¿äÇÏ´Ù.

 

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

{

     ....

     if (bShift && !bColumnMode) {

          ignoreVirt++;

     }

     ....

     if (bShift && !bColumnMode) {

          ignoreVirt--;

     }

    if (bShift && bColumnMode && SelStart != SelEnd) {

        SelExtraX=ExtraX;

    }

}

 

¼±Åà ÁßÀÏ ¶§´Â °¡»ó À§Ä¡·Î À̵¿ÀÌ ±ÝÁöµÇ´Âµ¥ ¿­¸ðµåÀÏ ¶§´Â °¡»ó À§Ä¡·Î °¥ ¼ö ÀÖ´Ù. SelExtraX´Â SelEnd °è»ê½Ã Á¶»çµÈ ExtraX·Î Á¤ÀÇÇÑ´Ù. ¸¶¿ì½º·Î ¼±ÅÃÇÒ ¶§¿Í µ¿ÀÏÇÑ ³í¸®¸¦ »ç¿ëÇÑ´Ù.

¿©±â±îÁö ÀÛ¾÷Çϸé Å°º¸µå³ª ¸¶¿ì½º·Î ÀÌ¹Ì ¿­ ¼±ÅÃÀ» ÇÒ ¼ö ÀÖ´Ù. ÇÏÁö¸¸ ¼±ÅÃÀÇ ³¡ÀÌ °¡»ó À§Ä¡·Î À̵¿ÇÒ ¶§ ¼±ÅÃÀÇ ½ÃÀÛÁ¡µµ °°ÀÌ À̵¿ÇÏ´Â ¹®Á¦°¡ ÀÖ´Ù. ¼±ÅÃÁß¿¡ ½¬ÇÁÆ® Å°¸¦ ³õÀ» ¶§ ExtraX¿Í SelExtraX¸¦ ¸ðµÎ 0À¸·Î ¸¸µé¾î¾ß Çϴµ¥ OnKey¼±µÎ¿¡¼­ ÀÏ°ý ó¸®ÇÑ´Ù.

 

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

{

     ....

     if (fDown==FALSE)

          return;

 

    if (bColumnMode && SelStart != SelEnd && !bShift) {

        if (vk==VK_LEFT || vk==VK_RIGHT || vk==VK_UP || vk==VK_DOWN ||

           vk==VK_PRIOR || vk==VK_NEXT || vk==VK_HOME || vk==VK_END) {

           ClearSelection();

           ExtraX=0;

           SelExtraX=0;

        }

    }

 

     if (bShift && !bColumnMode) {

          ignoreVirt++;

     }

 

¿­ ¸ðµå¿¡¼­ ¼±Åà ¿µ¿ªÀÌ Àִµ¥ ½¬ÇÁƮ۸¦ ´©¸£Áö ¾Ê¾ÒÀ¸¸é ¼±ÅÃÀ» Ç®¾î ¹ö¸®°í ÁÙ ³¡À¸·Î ij·µÀ» º¸³½´Ù. IsVirutalPosable¿¡¼­ ¼±Åà ¿µ¿ªÀÇ À¯¹«¸¦ Á¶°Ç ÆÇ´Ü¿¡ »ç¿ëÇϱ⠶§¹®¿¡ ¼±ÅÃÀ» ¸ÕÀú Ç®¾î¾ß ÇÑ´Ù. º¸Åë »óÅ¿¡¼­ÀÇ À̵¿°ú´Â Á¶±Ý ´Þ¶óÁø´Ù. ¿¹¸¦ µé¾î ¼±Åà ¿µ¿ªÀÌ ÀÖ´Â »óÅ¿¡¼­ ¿ÞÂÊ À̵¿½Ã ¼±Åà ¿µ¿ªÀÇ ¿ÞÂÊÀ¸·Î °¡Áö¸¸ ÀÌ °æ¿ì´Â ij·µÀÇ ¿ÞÂÊÀ¸·Î °£´Ù. ÁöÁ¤ÇÑ ÁÂÇ¥°¡ ¼±Åÿµ¿ªÀÇ ¾ÈÂÊÀÎÁö¸¦ Á¶»çÇÏ´Â IsInSelection ÇÔ¼öµµ ¿­¸ðµå¸¦ ÀνÄÇϵµ·Ï ¼öÁ¤ÇÑ´Ù.

 

BOOL CApiEditText::IsInSelection(int x,int y)

{

     ....

    if (bColumnMode) {

        GetSelInLine(r,ss,se);

    } else {

          if (SelFirst < pLine[r].Start) {

              ss=pLine[r].Start;

          } else {

              ss=SelFirst;

          }

 

          if (SelSecond > pLine[r].End) {

              se=pLine[r].End;

          } else {

              se=SelSecond;

          }

    }

 

     se= pFrame->GetPrevOff(se);

     ....

 

ÁÙ ³»ÀÇ ¼±Åà ¿µ¿ª ¹üÀ§ ss, se¸¦ ±¸ÇÏ´Â ¹æ¹ýÀÌ ´Ù¸¥µ¥ ¾Õ¿¡¼­ ¸¸µé¾î ³õÀº GetSelInLine ÇÔ¼ö¸¦ »ç¿ëÇÏ¸é ¹®Á¦¸¦ ½±°Ô Ç® ¼ö ÀÖ´Ù.

³ª.¸Þ´º ¼öÁ¤

Å×½ºÆ®°¡ ³¡³µÀ¸¹Ç·Î SetDefultSettingÀ» ¼öÁ¤ÇÏ¿© bColumnModeÀÇ µðÆúÆ®¸¦ FALSE·Î º¯°æÇϵµ·Ï ÇÏÀÚ.

 

void CApiEditText::SetDefaultSetting()

{

     ....

     bColumnMode=FALSE;

}

 

ÀÌÁ¦ »ç¿ëÀÚ°¡ ¿øÇÒ °æ¿ì ¾ðÁ¦µçÁö °¡»ó À§Ä¡¿Í ¿­¸ðµå¸¦ º¯°æÇÒ ¼ö ÀÖ´Â ¸í·ÉÀ» ÀÛ¼ºÇÑ´Ù. ¸®¼Ò½º¿¡ ¸Þ´º Ç׸ñÀº ÀÌ¹Ì ¸¸µé¾îÁ® ÀÖÀ¸¹Ç·Î ÀÌ Ç׸ñÀ» ó¸®ÇÏ´Â Äڵ常 ÀÛ¼ºÇÏ¸é µÈ´Ù.

 

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

{

     ....

     case IDM_EDIT_VIRT:

          if (pView->ViewType != HEXA_VIEW)

              pView->SetVirtualPos(!pView->GetVirtualPos());

          break;

     case IDM_EDIT_COLUMN:

          if (pView->ViewType != HEXA_VIEW)

              pView->SetColumnMode(!pView->GetColumnMode());

          break;

 

µÎ ¿É¼Ç ¸ðµÎ Åä±ÛµÇ´Â ¿É¼ÇÀ̱⠶§¹®¿¡ ÇöÀç »óÅÂÀÇ ¹Ý´ë·Î¸¸ ¸¸µé¸é µÈ´Ù. Çí»ç ºä¿¡¼­´Â °¡»ó À§Ä¡³ª ¿­ ¸ðµåÀÇ Àǹ̰¡ ÀüÇô ¾øÀ¸¹Ç·Î À̶§´Â Åä±ÛÇÒ ÇÊ¿äµµ ¾ø´Ù. CloneView¿¡¼­ º¹Á¦ÇÒ ¶§ ÀÌ µÎ º¯¼ö´Â º¹Á¦ÇÏÁö ¾ÊÀ¸¹Ç·Î Çí»ç ºä¿¡¼­´Â µÑ ´Ù Ç×»ó FALSE°¡ µÈ´Ù. ¸Þ´º¿¡ ¿É¼ÇÀÇ »óŸ¦ Ç¥½ÃÇÑ´Ù.

 

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

{

     ....

     if (hActive) {

          ....

          if (pView->ViewType==HEXA_VIEW) {

              EnableMenuItem(hMenu,IDM_EDIT_VIRT, MF_BYCOMMAND | MF_GRAYED);

              EnableMenuItem(hMenu,IDM_EDIT_COLUMN, MF_BYCOMMAND | MF_GRAYED);

          } else {

              EnableMenuItem(hMenu,IDM_EDIT_VIRT, MF_BYCOMMAND | MF_ENABLED);

              EnableMenuItem(hMenu,IDM_EDIT_COLUMN, MF_BYCOMMAND | MF_ENABLED);

 

              if (pView->GetVirtualPos()) {

                   CheckMenuItem(hMenu,IDM_EDIT_VIRT, MF_BYCOMMAND | MF_CHECKED);

              } else {

                   CheckMenuItem(hMenu,IDM_EDIT_VIRT, MF_BYCOMMAND | MF_UNCHECKED);

              }

              if (pView->GetColumnMode()) {

                   CheckMenuItem(hMenu,IDM_EDIT_COLUMN, MF_BYCOMMAND | MF_CHECKED);

              } else {

                   CheckMenuItem(hMenu,IDM_EDIT_COLUMN, MF_BYCOMMAND | MF_UNCHECKED);

              }

          }

 

Çí»ç ºä¿¡¼­´Â ÀÌ ¸í·ÉµéÀÌ »ç¿ë ±ÝÁöµÈ´Ù. ¾×¼¿·¯·¹ÀÌÅÍ¿¡ ´ÜÃàÅ°°¡ Á¤ÀǵǾî ÀÖÀ¸¹Ç·Î ¿­ ¸ðµå·Î ÀüȯÇÒ ¶§ Alt+C¸¸ ´©¸£¸é µÈ´Ù. ¶ÇÇÑ Åø¹Ù¿¡µµ ¿­¸ðµå Àüȯ ¹öÆ°ÀÌ ÀÖÀ¸¹Ç·Î ÀÌ ¹öÆ°À» ´­·¯µµ ¿­¸ðµå·Î ÀüȯÇÒ ¼ö ÀÖ´Ù. Åø¹ÙÀÇ ¹öÆ°Àº OnIdle¿¡¼­ °ü¸®ÇØ¾ß ÇÑ´Ù.

 

void OnIdle()

{

     if (hActive) {

     ....

          if (pView->GetColumnMode()) {

              SendMessage(hToolBar,TB_SETSTATE,IDM_EDIT_COLUMN,

                   MAKELONG(TBSTATE_ENABLED | TBSTATE_CHECKED,0));

          } else {

              SendMessage(hToolBar,TB_SETSTATE,IDM_EDIT_COLUMN,MAKELONG(TBSTATE_ENABLED,0));

          }

     } else {

          ....

          SendMessage(hToolBar,TB_SETSTATE,IDM_EDIT_COLUMN,MAKELONG(0,0));

     }

}

 

Çí»ç ºä³ª ÀÚµ¿ °³Çà »óÅÂÀÇ ¹öÆ°À» °ü¸®ÇÏ´Â ¹æ¹ý°ú µ¿ÀÏÇÏ´Ù. GetColumnMode·Î Á¶»çÇÑ ¼±Åà ¸ðµå°¡ ¿­¸ðµåÀÌ¸é ¹öÆ°À» ´©¸¥ »óÅ·Π¸¸µç´Ù.

´Ù.¿­ ¸ðµåÀÇ ¿É¼Ç

¿­ ¸ðµå´Â ¿©·¯ ¹®´Ü¿¡¼­ ¼öÆòÀûÀ¸·Î °°Àº À§Ä¡¿¡ ÀÖ´Â ¹®ÀåµéÀ» ÀÏ°ýÀûÀ¸·Î ¼±ÅÃÇÏ´Â ±â´ÉÀÌ´Ù. ±×·¡¼­ ÇÑ ¹®´ÜÀÌ ÇÑ ÁÙ¿¡ Ãâ·ÂµÉ ¶§ ½ÇÁúÀûÀÎ Àǹ̰¡ ÀÖÀ¸¸ç ÀÚµ¿ °³ÇàµÈ »óÅ¿ʹ Àß ¾î¿ï¸®Áö ¾Ê´Â´Ù. ÀÚµ¿ °³ÇàµÈ »óÅ´ ÇÑ ¹®´ÜÀÌ ¿©·¯ ÁÙ¿¡ °ÉÄ¡¹Ç·Î ¿­ ¸ðµå°¡ º° Àǹ̰¡ ¾ø´Ù°í º¸´Â °ÍÀÌ Å¸´çÇÏ´Ù.

¶ÇÇÑ ¿­ ¸ðµå´Â °¡º¯ÆøÀÇ ±Û²ÃÀ» °¡Áö´Â »óÅ¿¡¼­´Â ¾²±â ºÒÆíÇÏ´Ù. ¿Ö³ÄÇÏ¸é ¶È°°Àº ¿­ÀÌ¶óµµ ¾ÕÂÊÀÇ ±ÛÀÚ ±¸¼º¿¡ µû¶ó xÁÂÇ¥°¡ ´Þ¶óÁö±â ¶§¹®¿¡ Á÷»ç°¢Çü ÇüÅ·Π¼±ÅÃÇصµ ¾Æ·¡ À§ ¹®´Üµé¿¡¼­ ¼±ÅõǴ ¿­ÀÌ ´Þ¶óÁú ¼ö Àֱ⠶§¹®ÀÌ´Ù. ±×·¡¼­ ¿­ ¸ðµå·Î ¼±ÅÃÀ» ÇÒ ¶§´Â °íÁ¤Æø ±Û²ÃÀ» »ç¿ëÇÏ´Â °ÍÀÌ º¸ÅëÀÌ´Ù.

¿ä¾àÇÏÀÚ¸é ¿­¸ðµå´Â ÀÚµ¿ °³Çà »óÅ¿ʹ Àß ¾î¿ï¸®Áö ¾Ê°í °¡º¯Æø ÆùÆ®¿¡¼­ ¾²±â ºÒÆíÇÏ´Ù. ApiEdit´Â ³»ºÎÀûÀÎ ±¸Á¶»ó ÀÌ µÎ°¡Áö°¡ ¸ðµÎ °¡´ÉÇѵ¥ pLineÀÌ ¹®´ÜÀÌ ¾Æ´Ñ °³ÇàµÈ °¢ ÁÙÀÇ ¹üÀ§¸¦ °¡Áö°í Àֱ⠶§¹®¿¡ ÀÚµ¿ °³ÇàµÈ »óÅ¿¡¼­µµ ¿­ ¼±ÅÃÀÌ °¡´ÉÇϸç GetOffFromXY µîÀÇ ÇÔ¼ö°¡ °¡º¯Æø ±Û²ÃÀ» °í·ÁÇÏ¿© ¿ÀÇÁ¼ÂÀ» Á¤È®ÇÏ°Ô °è»êÇϹǷΠ°¡º¯Æø ±Û²Ã¿¡ ´ëÇؼ­µµ Àß µ¿ÀÛÇÑ´Ù.

´Ù¸¥ ÆíÁý±â´Â ¿­¸ðµå·Î µé¾î°¥ ¶§ °­Á¦·Î ÀÚµ¿ °³Çà »óŸ¦ Ç®¾î¹ö¸®°í °íÁ¤ÆøÀÏ ¶§¸¸ ¿­¸ðµå°¡ °¡´ÉÇÑ °Íµµ ÀÖ´Ù. ¿Ö ±×·¸°Ô Çϴ°¡ Çϸé ÀÚµ¿ °³Çà »óųª °¡º¯Æø ±Û²Ã¿¡¼­ ¿­ ¼±ÅÃÀ» ÇÏ´Â °ÍÀº »ý°¢º¸´Ù ÈξÀ ´õ º¹ÀâÇϱ⠶§¹®¿¡ ÇÏ°í ½Í¾îµµ ÇÏÁö ¸øÇÏ´Â °ÍÀÌ´Ù. ApiEdit´Â ÀϺη¯ ÀǵµÇÑ °ÍÀº ¾Æ´ÏÁö¸¸ ³»ºÎÀûÀÎ ±¸Á¶¿¡ ÀÇÇØ ÀÚ¿¬½º·´°Ô ÀÌ·± °ÍµéÀÌ °¡´ÉÇÏ°Ô µÇ¾ú´Ù. ±×·¡¼­ ÀϺη¯ ÀÚµ¿ °³Çà »óŸ¦ Ç®°Å³ª ÇÏÁö ¾Ê¾Æµµ ¿­ ¼±ÅÃÀ» ÇÒ ¼ö Àִµ¥ ÀÌ´Â ApiEditÀÇ ÀÚ¶û°Å¸®À̱⵵ ÇÏÁö¸¸ ´Ù¸¥ ÆíÁý±â¿¡ Àͼ÷ÇÑ »ç¶÷µé¿¡°Ô´Â ¶§·Î´Â ÀÌ·± Á¡ÀÌ ºÒÆíÇÒ ¼öµµ ÀÖ´Ù. ±×·¡¼­ ÀÌ·± µ¿ÀÛÀ» ¼±ÅÃÇÒ ¼ö ÀÖ´Â ¿É¼Ç ¸î°¡Áö¸¦ Ãß°¡Çß´Ù.

 

class CApiEdit : public CWindow

{

private:

     ....

     BOOL bFixedColumn;

     BOOL bNoWrapColumn;

     LOGFONT FixedFont;

 

public:

     ....

     BOOL GetFixedColumn() { return bFixedColumn; }

     void SetFixedColumn(int aValue);

     BOOL GetNoWrapColumn() { return bNoWrapColumn; }

     void SetNoWrapColumn(int aValue);

     void GetFixedFont(LOGFONT *alogfont);

     void SetFixedFont(LOGFONT *alogfont);

 

class CApiEditText : public CWindow

{

     LOGFONT Bklogfont;

     ....

 

bFixedColumnÀº ¿­¸ðµåÀÏ ¶§ °íÁ¤Æø ±Û²Ã·Î ÀüȯÇÏ´Â ¿É¼ÇÀ̸ç bNoWrapColumnÀº ¿­¸ðµå·Î ÀüȯÇÒ ¶§ ÀÚµ¿ °³ÇàÀ» ÇØÁ¦ÇÑ´Ù. FixedFont´Â °íÁ¤Æø ±Û²Ã·Î ÀüȯÇÒ ¶§ ¾î¶² ÆùÆ®¸¦ »ç¿ëÇÒ °ÍÀΰ¡¸¦ ÁöÁ¤ÇÑ´Ù. Bklogfont´Â °íÁ¤ÆøÀ¸·Î ÀüȯÇϱâ Àü¿¡ ¿ø·¡ »ç¿ëÇÏ´ø ÆùÆ®¸¦ ¹é¾÷Çϱâ À§ÇÑ ±Û²Ã ±¸Á¶Ã¼ÀÌ´Ù. ¿­¸ðµå¸¦ ÇØÁ¦ÇÒ ¶§ °­Á¦·Î °íÁ¤ÆøÀ¸·Î ÀüȯÇÒ °æ¿ì ¿­¸ðµå¸¦ Ç®¸é ´Ù½Ã ¿ø·¡ ±Û²Ã·Î µ¹¾Æ¿Í¾ß ÇϹǷΠÀÌ ÆùÆ®¿¡ ´ëÇÑ Á¤º¸¸¦ ¹é¾÷ÇØ¾ß ÇÑ´Ù. ÀÌ ¿É¼ÇµéÀÇ µðÆúÆ®¸¦ ´ÙÀ½°ú °°ÀÌ ÃʱâÈ­ÇÑ´Ù.

 

CApiEdit::CApiEdit()

{

     ....

     bNoWrapColumn=FALSE;

     bFixedColumn=FALSE;

     FixedFont.lfHeight=0;

}

 

CApiEditText::CApiEditText()

{

     ....

     Bklogfont.lfHeight=-1;

}

 

Àß »ç¿ëµÇÁö ¾Ê´Â ¿É¼ÇÀ̹ǷΠ¸ðµÎ FALSE·Î ÃʱâÈ­ÇßÀ¸¸ç ¹é¾÷ ÆùÆ®´Â Á¤ÀǵǾî ÀÖÁö ¾ÊÀº °ÍÀ¸·Î ÃʱâÈ­ÇÏ¿´´Ù. ¿É¼Ç ¾×¼¼½º ÇÔ¼ö¸¦ ÀÛ¼ºÇÑ´Ù.

 

void CApiEdit::SetFixedColumn(int aValue)

{

     bFixedColumn=aValue;

}

 

void CApiEdit::SetNoWrapColumn(int aValue)

{

     bNoWrapColumn=aValue;

}

 

void CApiEdit::GetFixedFont(LOGFONT *alogfont)

{

     *alogfont=FixedFont;

}

 

void CApiEdit::SetFixedFont(LOGFONT *alogfont)

{

     FixedFont=*alogfont;

}

 

ÀÌ ¿É¼ÇµéÀ» Àû¿ëÇÒ ½ÃÁ¡Àº ¿­¸ðµå·Î Àüȯ ¶Ç´Â º¹±ÍÇÒ ¶§ÀÌ´Ù. SetColumnMode¿¡¼­ ÀÌ ¿É¼Ç¿¡ µû¶ó ÀÚµ¿ °³Çà »óÅÂ¿Í ±Û²ÃÀ» º¯°æÇÏ°í º¹±¸ÇÑ´Ù.

 

void CApiEditText::SetColumnMode(int aMode)

{

    LOGFONT tFont;

    HFONT hFont;

 

     bColumnMode=aMode;

     if (bColumnMode==FALSE) {

          if (SelStart != SelEnd) {

              if (ExtraX != 0) {

                   ExtraX=0;

                   SetCaret();

              }

              SelExtraX=0;

          }

        if (pFrame->bFixedColumn && Bklogfont.lfHeight!=-1) {

           SetFont(&Bklogfont);

           Bklogfont.lfHeight=-1;

        }

    } else {

        if (pFrame->bNoWrapColumn && GetWrap()!=0) {

           SetWrap(0);

        }

        if (pFrame->bFixedColumn) {

           if (pFrame->FixedFont.lfHeight==0) {

               hFont=(HFONT)GetStockObject(SYSTEM_FIXED_FONT);

               GetObject(hFont,sizeof(LOGFONT),&tFont);

           } else {

               tFont= pFrame->FixedFont;

           }

           GetFont(&Bklogfont);

           SetFont(&tFont);

        }

     }

 

     if (SelStart != SelEnd) {

          Invalidate(-1);

     }

}

 

¿­¸ðµå·Î ¹Ù²ð ¶§ bNoWrapColumnÀÌ ¼±ÅõǾî ÀÖ°í ÀÚµ¿ °³Çà »óÅÂÀÌ¸é °­Á¦·Î ÀÚµ¿ °³Çà »óŸ¦ Ǭ´Ù. ±×·¯³ª ´Ù½Ã º¸Åë ¸ðµå·Î µ¹¾Æ¿Ã ¶§´Â ¿ø·¡ »óÅ·Πº¹±¸ÇÏÁö ¾Ê´Âµ¥ ÀÌ·¸°Ô ÇÏÀÚ¸é º°µµÀÇ ¹é¾÷ º¯¼ö°¡ Çϳª ´õ ÇÊ¿äÇÏ´Ù. ÀÚµ¿ °³Çà »óÅ´ ¾ðÁ¦µçÁö Åä±ÛÇÒ ¼ö ÀÖ´Â ¼Ó¼ºÀ̹ǷΠ±»ÀÌ ±×·¸°Ô±îÁö´Â ÇÏÁö ¾Ê¾Ò´Ù.

bFixedColumnÀÌ ¼±ÅõǾî ÀÖÀ¸¸é °íÁ¤Æø ±Û²Ã·Î º¯°æÇÑ´Ù. lfHeight°¡ 0ÀÌ¸é °íÁ¤ÆøÀÇ ½ºÅå ÆùÆ®¸¦ ÁöÁ¤ÇÑ´Ù. ¿­ ¸ðµå°¡ Ç®¸± ¶§ ¿ø·¡ ÆùÆ®·Î µ¹¾Æ°¡±â À§ÇØ Bklogfont¿¡ ¿ø·¡ ÆùÆ® ¼³Á¤ »óŸ¦ µû·Î ±â¾ïÇØ ³õ°í ¿­¸ðµå¸¦ ÇØÁ¦ÇÒ ¶§ ´Ù½Ã ÀÌ ÆùÆ®·Î ¼³Á¤ÇÑ´Ù.

ÀÌ¹Ì ¿­¸ðµåÀÎ »óÅ¿¡¼­ bFixedColumn ¿É¼ÇÀ» º¯°æÇÒ ¶§´Â ¾à°£ÀÇ ¹®Á¦°¡ ÀÖ´Ù. ¿¹¸¦ µé¾î °íÁ¤ÆøÀ¸·Î ¹Ù²ï »óÅ¿¡¼­ ÀÌ ¿É¼ÇÀ» ²ô¸é ´Ù½Ã ¿ø·¡ ÆùÆ®·Î µ¹¾Æ¿ÀÁö ¸øÇÑ´Ù. SetFixedColumn ÇÔ¼ö¿¡¼­ ÀÌ¹Ì ¿­¸ðµåÀÏ ¶§´Â ÀÌ ¿É¼Ç º¯°æÀ» °ÅºÎÇÒ ¼öµµ ÀÖÀ» °Í °°Áö¸¸ ±×·² ¼ö ¾ø´Â °ÍÀÌ ÀÌ ¿É¼ÇÀº ÇÁ·¹ÀÓÀÌ °¡Áö°í ÀÖ°í ¿­ ¸ðµå´Â °¢ ºäÀÇ »óÅÂÀ̱⠶§¹®¿¡ ÇÁ·¹ÀÓÀÌ ÇöÀç ¸ðµå¸¦ Á¤È®ÇÏ°Ô ÆÇ´ÜÇϱ⠾î·Æ±â ¶§¹®ÀÌ´Ù. ½ÇÇàÁß¿¡ ÀÚÁÖ º¯°æÇÏ´Â ¿É¼ÇÀÌ ¾Æ´Ï¹Ç·Î ¹«½ÃÇϱâ·Î ÇÑ´Ù.

¶ó.¿É¼Ç ÀúÀå

¾Õ Ç׿¡¼­ Ãß°¡ÇÑ ¼¼ °³ÀÇ ¿É¼Çµµ ÀúÀå ´ë»óÀ̹ǷΠ¿É¼Ç ±¸Á¶Ã¼¿¡ Æ÷ÇÔ½ÃŲ´Ù.

 

struct SOption

{

     ....

     BOOL bFixedColumn;

     BOOL bNoWrapColumn;

     LOGFONT FixedFont;

};

 

ApiEdit¿Í °°Àº ¿É¼Ç À̸§À» »ç¿ëÇÑ´Ù. Init¿¡¼­ ÃʱâÈ­ÇÏ°í Save, Load¿¡¼­ ÀÔÃâ·ÂÇÑ´Ù.

 

void SOption::Init()

{

     ....

     bFixedColumn=FALSE;

     bNoWrapColumn=FALSE;

     FixedFont.lfHeight=0;

}

 

void SOption::Load(TCHAR *Key)

{

     ....

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

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

     SHRegReadString(SHCU,szKey,"FixedFaceName","",FixedFont.lfFaceName,32);

     FixedFont.lfPitchAndFamily=SHRegReadInt(SHCU,szKey,"FixedPitchAndFamily",0);

     FixedFont.lfCharSet=SHRegReadInt(SHCU,szKey,"FixedCharSet",0);

     FixedFont.lfHeight=SHRegReadInt(SHCU,szKey,"FixedFontHeight",0);

 

void SOption::Save(TCHAR *Key)

{

     ....

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

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

     SHRegWriteString(SHCU,szKey,"FixedFaceName",FixedFont.lfFaceName);

     SHRegWriteInt(SHCU,szKey,"FixedPitchAndFamily",FixedFont.lfPitchAndFamily);

     SHRegWriteInt(SHCU,szKey,"FixedCharSet",FixedFont.lfCharSet);

     SHRegWriteInt(SHCU,szKey,"FixedFontHeight",FixedFont.lfHeight);

 

È£½ºÆ®ÀÇ µðÆúÆ®µµ ApiEditÀÇ µðÆúÆ®°ª°ú °°´Ù. ÀÌ ¿É¼ÇµéÀº ¼³Á¤ ´ëÈ­»óÀÚ¿¡´Â Æ÷ÇÔ½ÃÅ°Áö ¾Ê´Â´Ù. µû¶ó¼­ ÀÌ ¿É¼ÇµéÀº Ç×»ó FALSE°ªÀ» °¡Áú °ÍÀÌ´Ù. Á¤ ÇÊ¿äÇÏ´Ù¸é ·¹Áö½ºÆ®¸®¸¦ Á÷Á¢ ÆíÁýÇÏ´Â ¹æ¹ý¸¸ Á¦°øÇÑ´Ù. ±×´ÙÁö ½Ç¿ëÀûÀÎ ¿É¼ÇÀÌ ¾Æ´Ï±â ¶§¹®¿¡ ÄÁÆ®·ÑÀº ¿É¼ÇÀ» Á¦°øÇÏÁö¸¸ È£½ºÆ®´Â ÀÌ ¿É¼Ç¿¡ ´ëÇÑ À¯Àú ÀÎÅÍÆäÀ̽º¸¦ Á¦°øÇÏÁö ¾Ê´Â´Ù.

ApiEditÀÇ ¿­¸ðµå´Â ÀÚµ¿ °³Çà »óÅ¿¡¼­µµ ¿­ ¼±ÅÃÀ» Çã¿ëÇÑ´Ù´Â °Í°ú °¡º¯Æø ÆùÆ® »óÅ¿¡¼­µµ ¿­ ¼±ÅÃÀ» ÇÒ ¼ö ÀÖ´Ù´Â Á¡¿¡¼­ ´Ù¸¥ ÆíÁý±â¿Í´Â Á¶±Ý ´Ù¸£´Ù. ±×·¯´Ù º¸´Ï µ¿ÀÛ»ó Á¶±Ý ÀÌ»óÇÏ°Ô ¿©°ÜÁö´Â ºÎºÐÀÌ ÀÖ´Ù.

 

1.¼±Åà ¿µ¿ªÀÌ ÀÖ´Â »óÅ¿¡¼­ ¿­ ¸ðµå¿Í ÀÏ¹Ý ¸ðµå¸¦ º¯È¯ÇÒ ¶§µµ ¼±Åà ¿µ¿ªÀ» ±×´ë·Î À¯ÁöÇÒ ¼ö ÀÖ´Ù. µÎ ¸ðµå ¸ðµÎ SelStart, SelEnd·Î ½ÃÀÛÁ¡°ú ³¡Á¡À» ±â¾ïÇÑ´Ù´Â °øÅëÁ¡ÀÌ Àֱ⠶§¹®ÀÌ´Ù. À¯ÁöµÈ´Ù°í Çؼ­ Ưº°È÷ ½Ç¿ë¼ºÀÌ ÀÖ´Â °ÍÀº ¾Æ´ÏÁö¸¸ ±×·¸´Ù°í Çؼ­ ±»ÀÌ ¸ðµå°¡ ¹Ù²ï´Ù°í Çؼ­ ¼±Åà ¿µ¿ªÀ» °­Á¦·Î ÇØÁ¦ÇÒ ÇÊ¿ä±îÁö´Â ¾ø´Â °Í °°´Ù.

2.¿­ ¼±Åà »óÅ¿¡¼­ ±Û²Ã ¸ð¾çÀ» º¯°æÇÒ ¶§ ¼±Åà ¿µ¿ªÀÌ ¹Ù²ð ¼ö ÀÖ´Ù. °íÁ¤Æø ±Û²ÃÀÏ ¶§´Â »ó°ü¾øÁö¸¸ °¡º¯Æø ±Û²ÃÀÏ ¶§´Â Á÷»ç°¢ÇüÀÌ ¾Æ´Ñ ¿ïÅø ºÒÅüÇÑ ¼±Åà ¿µ¿ªÀÌ ¸¸µé¾îÁú °ÍÀÌ´Ù. ÀÌ Æ¯Â¡µµ Ưº°ÇÑ ºÎÀÛ¿ëÀÌ ¾øÀ¸¹Ç·Î ±×³É µÎ±â·Î ÇÑ´Ù. ¾îÂ¸é ÀÌ·±°Ô °¡´ÉÇÏ´Ù´Â °Ô ³î¶ø°Ô º¸ÀÏ ¼öµµ ÀÖ´Ù.