2.¹®´Ü À籸¼º

°¡.±â´É¼Ò°³

¹®´Ü À籸¼º ±â´ÉÀ̶õ ÅØ½ºÆ®ÀÇ ¹®´ÜÀ» º¸±â ÁÁ°í Àб⠽±°Ô Àç¹è¿­ÇÏ´Â ±â´ÉÀÌ´Ù. ÅØ½ºÆ® ÆÄÀÏÀº º°µµÀÇ ¼­½ÄÀÌ ¾ø±â ¶§¹®¿¡ ÁÖ·Î °³Çà ÄÚµå¿Í °ø¹éÀ» Àç¹èÄ¡ÇØ¼­ ¿øÇÏ´Â ¹®´ÜÀÇ ¸ð¾çÀ» ¸¸µé¾î³½´Ù. ¿öµå ÇÁ·Î¼¼¼­ÀÇ ¹®´Ü ¼Ó¼º Á¶Á¤ ±â´É°ú´Â ´Ù¸¥µ¥ ¿öµå ÇÁ·Î¼¼¼­´Â ¹®´ÜÀÇ ³»¿ëÀº ±×´ë·Î À¯ÁöÇÑ Ã¤·Î ¼­½Ä Á¤º¸µé¸¸ Á¶ÀÛÇÏÁö¸¸ ÅØ½ºÆ® ÆíÁý±â´Â ¿øÇÏ´Â ¸ð¾çÀ» ¸¸µé±â À§ÇØ ¹®´ÜÀÇ ³»¿ëÀ» º¯°æÇØ¾ß ÇÑ´Ù.

À籸¼º ÀýÂ÷´Â ¾ÆÁÖ ¿ø·ÐÀûÀε¥ ¿ø·¡ÀÇ ¹®´ÜÀ» ¹öÆÛ¿¡ ÀÐ°í »ç¿ëÀÚÀÇ Áö½Ã´ë·Î Á¶ÀÛÇÑ ÈÄ ´Ù½Ã ½á ³Ö´Â °ÍÀÌ´Ù. ÀÌ ½Ç½ÀÀº 1±ÇÀÇ °í±Þ ÆíÁý ±â´É°ú ±¸Çö ¹æ¹ýÀÌ °ÅÀÇ À¯»çÇϹǷΠ°í±Þ ÆíÁý Äڵ带 Àß ¾Ë°í ÀÖ´Ù¸é ÀÌÇØÇϱ⠽±´Ù. ¸¸¾à ±×·¸Áö ¾Ê´Ù¸é 1±ÇÀÇ °í±Þ ÆíÁý Äڵ带 ¸ÕÀú º¹½ÀÇÑ ÈÄ ºÐ¼®ÇÏ´Â °ÍÀÌ ÁÁÀ» °ÍÀÌ´Ù. ¹®´ÜÀ» À籸¼ºÇÏ´Â ¹æ¹ý¿¡´Â ¿©·¯ °¡Áö°¡ Àִµ¥ °¢ µ¿ÀÛº°·Î ÆäÀÌÁö¸¦ °¡Áö´Â ÅÇ ´ëÈ­»óÀÚ¸¦ ±¸¼ºÇϱâ·Î ÇÑ´Ù. ºñ½Á ºñ½ÁÇÑ ÄÚµåµéÀÌ ¹Ýº¹µÇ¹Ç·Î ¸î °¡Áö °øÅëÀûÀÎ Äڵ带 ¹Ì¸® ¸¸µé¾î ³õ´Â °ÍÀÌ È¿À²ÀûÀÌ´Ù. ´ÙÀ½ ±¸Á¶Ã¼¿Í ¹®´Ü À籸¼º ÇÔ¼ö ¿øÇüÀ» Dangeun.h¿¡ ¼±¾ðÇÑ´Ù.

 

struct SParaOption

{

     SParaOption();

 

     int startpage;

     int p1_Type;

     TCHAR p1_szRep[32];

     int p1_MultiEnter;

     int p2_Type;

     int p2_nChar;

     int p2_nPixel;

     BOOL p2_bIndent;

     int p2_nIndent;

     BOOL p2_bRemoveSpace;

     int p3_Orient;

     int p3_Type;

     int p3_nChar;

     int p3_nPixel;

     int p4_Type;

     BOOL p4_Case;

     BOOL p4_Unique;

     int p5_Type;

     int p5_Num;

};

 

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

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

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

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

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

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

 

¹®´Ü À籸¼º ¸í·ÉÀÇ ¿É¼ÇµéÀÌ´Ù. ´ëÈ­»óÀÚ¸¦ ¿­ ¶§¸¶´Ù ¿É¼ÇµéÀÌ ÃʱâÈ­µÇ¸é ºÒÆíÇϹǷΠÇÑ ¹ø ¼±ÅÃÇØ ³õÀº ¿É¼ÇÀº ±¸Á¶Ã¼¿¡ ±â¾ïÇÑ´Ù. ´Ü, ÀÌ °ªÀ» ·¹Áö½ºÆ®¸®¿¡ ÀúÀåÇÏÁö´Â ¾ÊÀ¸¹Ç·Î ¸Å¹ø ½ÇÇàµÉ ¶§¸¶´Ù ÃʱâÈ­µÈ´Ù. ±¸Á¶Ã¼¸¦ ·¹Áö½ºÆ®¸®¿¡ ÀúÀåÇϸé Çѹø ¼±ÅÃÇÑ ¿É¼ÇÀÌ °è¼Ó ±â¾ïµÇÁö¸¸ ±»ÀÌ ±×·¸°Ô±îÁö ÇÒ ÇÊ¿ä´Â ¾øÀ» °Í °°´Ù. Dangeun.cpp¿¡ »ý¼ºÀÚ Äڵ带 ÀÛ¼ºÇÏ¿© ¹«³­ÇÑ °ªÀ¸·Î ÃʱâÈ­ÇÑ´Ù.

 

HWND hParaTab;

SParaOption ParaOption;

....

SParaOption::SParaOption()

{

     startpage=0;

     p1_Type=1;

     lstrcpy(p1_szRep,"");

     p1_MultiEnter=0;

     p2_Type=0;

     p2_nChar=80;

     p2_nPixel=640;

     p2_bIndent=FALSE;

     p2_nIndent=4;

     p2_bRemoveSpace=TRUE;

     p3_Orient=0;

     p3_Type=1;

     p3_nChar=80;

     p3_nPixel=640;

     p4_Type=0;

     p4_Case=FALSE;

     p4_Unique=FALSE;

     p5_Type=1;

     p5_Num=1;

}

 

ÅÇ ´ëÈ­»óÀÚÀÇ ÅÇ ÄÁÆ®·Ñ°ú ¿É¼Ç ±¸Á¶Ã¼´Â Àü¿ªÀ¸·Î ¼±¾ðÇÑ´Ù. ¹®´ÜÀ» À籸¼ºÇÏ´Â ÁÖü´Â ÅØ½ºÆ® ºäÀÌ´Ù. ÅØ½ºÆ® ºä¿¡ °¢ ÆäÀÌÁöÀÇ ¿äûÀ» ó¸®ÇÏ´Â ´ÙÀ½ ¸â¹ö ÇÔ¼öµéÀ» ¼±¾ðÇÑ´Ù.

 

class CApiEditText : public CWindow

{

     ....

     virtual void SelectParas(int &SelFirst,int &SelSecond,int &st,int &ed);

     virtual void MergePara(int MultiEnterType,TCHAR *szRep);

     virtual void SplitPara(int type, int num, BOOL bRemoveSpace, int iIndent);

     virtual void AlignPara(int orient, int type, int num);

     virtual void SortPara(int asc, BOOL Case, BOOL Unique);

     virtual void ArrangeEmptyPara(int type, int num);

};

 

¹®´ÜÀ» Á¶ÀÛÇÏ´Â ÀýÂ÷´Â ´ëü·Î ºñ½ÁÇѵ¥ 1±Ç¿¡¼­ °í±Þ ÆíÁý ÇÔ¼ö¸¦ ÀÛ¼ºÇÒ ¶§ ¾ê±âÇßµíÀÌ ÄÚ³¢¸¦ ³ÃÀå°í¿¡ ³Ö´Â ¹æ¹ý°ú À¯»çÇÏ´Ù. ±×·¡¼­ °øÅëµÇ´Â Äڵ带 »Ì¾Æ³»¾î ÇÔ¼ö ¹× ¸ÅÅ©·Î·Î ¹Ì¸® ¼±¾ðÇØ µÐ´Ù. ApiEditText.cpp¿¡ ´ÙÀ½ ÇÔ¼ö ¹× ¸ÅÅ©·Î¸¦ ¼±¾ðÇÑ´Ù.

 

// ¼±ÅÃµÈ ¹®´ÜÀÇ ½ÃÀÛ, ³¡ ¿ÀÇÁ¼ÂÀ» ±¸ÇØÁØ´Ù.

void CApiEditText::SelectParas(int &SelFirst,int &SelSecond,int &st,int &ed)

{

     int pr1,pr2,pc;

     int Line;

 

     // ¼±Åà ¿µ¿ªÀÌ ¾øÀ¸¸é ¹®¼­ Àüü¸¦ ´ë»óÀ¸·Î ÇÑ´Ù.

     if (SelStart==SelEnd) {

          SelFirst=0;

          SelSecond=pFrame->doclen;

     } else {

          SelFirst=min(SelStart,SelEnd);

          SelSecond=max(SelStart,SelEnd);

     }

 

     // ½ÃÀÛ ¹®´ÜÀÇ Ã¹ ¿ÀÇÁ¼Â

     GetParaFromOff(SelFirst,pr1,pc);

     Line=GetParaFirstLine(pr1);

     st=pLine[Line].Start;

 

     // ³¡ ¹®´ÜÀÇ ³¡ ¿ÀÇÁ¼Â. ¼±Åà ³¡ÀÌ ¹®´Ü ¼±µÎÀ̸é ÀÌ ¹®´ÜÀº Á¦¿ÜµÈ´Ù.

     GetParaFromOff(SelSecond,pr2,pc);

     Line=GetParaFirstLine(pr2);

     if (SelSecond==pLine[Line].Start) {

          pr2--;

     }

     Line=GetParaLastLine(pr2);

     ed=pLine[Line].End;

}

 

#define BEFOREARRANGEPARA      \

     int SelFirst, SelSecond;\

     int st,ed,nDiff=0;\

     TCHAR *src,*dest,*s,*d;\

     SelectParas(SelFirst,SelSecond,st,ed);\

     s=src=(TCHAR *)malloc(ed-st);\

     d=dest=(TCHAR *)malloc(ed-st);\

     memcpy(src,pFrame->buf+st,ed-st);

 

#define ENDARRANGEPARA(grpid) \

     SelSecond-=nDiff;\

     pFrame->StartUndoGroup(grpid);\

     Delete(st,ed-st);\

     Insert(st,dest,d-dest);\

     pFrame->EndUndoGroup();\

     if (SelStart == SelEnd) {\

          off=SelStart=SelEnd=st;\

     } else if (SelStart < SelEnd) {\

          off=SelEnd=SelSecond;\

          SelStart=SelFirst;\

     } else {\

          off=SelEnd=SelFirst;\

          SelStart=SelSecond;\

     }\

     if (pFrame->IsInDBCS(off)) off=pFrame->GetPrevOff(off);\

     if (pFrame->IsInDBCS(SelStart)) SelStart=pFrame->GetPrevOff(SelStart);\

     if (pFrame->IsInDBCS(SelEnd)) SelEnd=pFrame->GetPrevOff(SelEnd);\

     Invalidate(st);\

     SetCaret();\

     free(src);\

     free(dest);

 

SelectParas ÇÔ¼ö´Â ÇöÀç ¼±Åà ¿µ¿ªÀ¸·ÎºÎÅÍ À籸¼ºÇÒ ¹®´ÜÀÇ ¿ÀÇÁ¼Â ¹üÀ§¸¦ ±¸ÇÑ´Ù. Á¶±ÝÀÌ¶óµµ ¼±ÅÃµÈ ¹®´ÜÀÌ ¸ðµÎ ó¸® ´ë»óÀÌ¸ç ¼±Åà ¿µ¿ªÀÌ ¾øÀ¸¸é ¹®¼­ Àüü°¡ ´ë»óÀÌ´Ù. ¹®´Ü À籸¼º ÇÔ¼öµéÀº ÀÌ ÇÔ¼ö¸¦ È£ÃâÇÏ¿© ´ë»ó ¹®´ÜÀ» ¼±Á¤ÇÑ´Ù.

BEFOREARRANGEPARA´Â "³ÃÀå°í ¹®À» ¿¬´Ù"¿¡ ÇØ´çÇÏ´Â ÄÚµåÀÌ´Ù. Áö¿ª º¯¼ö ¼±¾ð ¹× ¸Þ¸ð¸® ÇÒ´ç µîÀ» º°µµÀÇ ÇÔ¼ö°¡ ´ë½Å ÇÒ ¼ö ¾ø±â ¶§¹®¿¡ ¸ÅÅ©·Î·Î ¼±¾ðÇß´Ù. ENDARRANGEPARA´Â "³ÃÀå°í ¹®À» ´Ý´Â´Ù"¿¡ ÇØ´çÇÏ´Â ÄÚµåÀε¥ Á¶Á¤ °á°ú¸¦ ½á ³Ö°í ¼±Åà ¿µ¿ªÀ» »õ·Î ¼³Á¤ÇÏ°í ¸Þ¸ð¸®¸¦ ÇØÁ¦ÇÑ´Ù. Á¶Á¤ °á°ú ¿ÀÇÁ¼ÂÀ̳ª ¼±Åÿµ¿ªÀÌ DBCSÀÇ Áß°£¿¡ °ÉÄ¡Áö ¾Êµµ·Ï ÇØ¾ß ÇÑ´Ù. ´ÙÀ½ ÇÔ¼ö´Â »ç¿ëÁßÀÎ ¸Þ¸ð¸®¸¦ ÀçÇÒ´çÇϴµ¥ Àç»ç¿ë °¡´ÉÇÑ ÀϹÝÀûÀÎ ÇÔ¼öÀ̹ǷΠAeUtil.cpp¿¡ ÀÛ¼ºÇÑ´Ù.

 

void ReallocBuf(TCHAR *&mem,TCHAR *&now,int Require,int Extra)

{

     unsigned toff;

     toff=now-mem;

     if (_msize(mem) < toff+Require) {

          mem=(TCHAR *)realloc(mem,_msize(mem)+Extra);

          now=mem+toff;

     }

}

 

´Ü¼øÈ÷ reallocÇÏ´Â °Í°ú´Â ´Þ¸® ÀÌ¹Ì ÀÌ ¸Þ¸ð¸®¸¦ °¡¸®Å°´Â Æ÷ÀÎÅͰ¡ ÀÖÀ» ¶§ ±× Æ÷ÀÎÅÍÀÇ À§Ä¡±îÁö °°ÀÌ Á¶Á¤ÇÑ´Ù´Â Á¡ÀÌ ´Ù¸£´Ù. Require¿¡ ÇÊ¿ä ¸Þ¸ð¸®·®À» ÁÖ°í Extra¿¡ Ãß°¡ ÇÒ´çÇÒ ¸Þ¸ð¸®¾çÀ» ÁÖ¸é µÈ´Ù.

¹®´Ü À籸¼º ÈÄ¿¡ ÇÊ¿äÇÑ ¸Þ¸ð¸®¾çÀ» ¹Ì¸® ¿¹ÃøÇÒ ¼ö ¾ø±â ¶§¹®¿¡ ½ÇÇàÁß¿¡ ¸Þ¸ð¸®¸¦ Ç×»ó ÀçÇÒ´çÇØ¾ß ÇÑ´Ù. µ¥ÀÌÅͰ¡ »èÁ¦µÉ ¶§´Â ¿øº» ¹®ÀÚ¿­°ú °°Àº Á¤µµ¸é ÃæºÐÇϳª »ðÀ﵃ ¶§´Â ±× ¾çÀ» ¹Ì¸® ¾Ë ¼ö ¾ø´Ù. ¿¹¸¦ µé¾î Á¤·Ä ±â´ÉÀÇ °æ¿ì 100¹®ÀÚÆø ±âÁØÀ¸·Î ¿ìÃø Á¤·ÄÇÏ¸é °¢ ÁÙ¿¡ ÃÖ´ë 99°³ÀÇ °ø¹éÀ» ½á ³Ö¾î¾ß Çϴµ¥ ÀÌ·¸°Ô µÇ¸é ÃÖ´ë 100¹èÀÇ ¸Þ¸ð¸®°¡ ÇÊ¿äÇÒ ¼öµµ ÀÖ´Ù.

³ª.ÅÇ ´ëÈ­»óÀÚ

¹®´Ü À籸¼º ¿É¼ÇµéÀº ÅÇ ´ëÈ­»óÀÚÀÇ ÆäÀÌÁö·Î »ý¼ºµÈ´Ù. ¸®¼Ò½º¿¡´Â ¸ÞÀÎ ´ëÈ­»óÀÚ¿Í °¢ ÆäÀÌÁö¸¦ ±¸¼ºÇÏ´Â ´ëÈ­»óÀÚµéÀÌ ÀÌ¹Ì ÀÛ¼ºµÇ¾î ÀÖ´Ù. ÅÇ ´ëÈ­»óÀÚÀÇ ÄÚµå´Â ´ÙÀ½°ú °°´Ù.

 

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

{

     TCITEM tie;

     static HWND hTabDlg;

     HWND hActive;

     SInfo *pSi;

     TCHAR szTemp[256];

     int iTemp;

     RECT art,drt,irt;

 

     switch(iMessage) {

     case WM_INITDIALOG:

          MoveToParentCenter(hDlg);

          hActive=(HWND)SendMessage(g_hMDIClient,WM_MDIGETACTIVE,0,NULL);

          pSi=(SInfo *)GetWindowLong(hActive,0);

          GetWindowRect(pSi->Ae.GetActiveView()->hWnd,&art);

          GetWindowRect(hDlg,&drt);

          IntersectRect(&irt,&art,&drt);

          if (!IsRectEmpty(&irt)) {

              // ¿ÞÂÊ¿¡ °ø°£ÀÌ ÀÖÀ¸¸é ¿ÞÂÊ¿¡ ¸ÕÀú ºÙ¿© º»´Ù.

              if (art.left > (drt.right-drt.left)) {

                   drt.left=art.left-(drt.right-drt.left);

              // ¾Æ´Ï¸é ¿À¸¥ÂÊ¿¡ ºÙÀÌµÇ È­¸éÀ» ¹þ¾î³ªÁö´Â ¾Êµµ·Ï ÇÑ´Ù.

              } else {

                   drt.left=min(art.right,GetSystemMetrics(SM_CXSCREEN)-(drt.right-drt.left));

              }

              SetWindowPos(hDlg,HWND_NOTOPMOST,drt.left,drt.top,0,0,SWP_NOSIZE);

          }

 

          hParaTab=GetDlgItem(hDlg,IDC_PARATAB);

          tie.mask=TCIF_TEXT;

          tie.pszText="º´ÇÕ";

          TabCtrl_InsertItem(hParaTab,0,&tie);

          tie.pszText="ºÐÇÒ";

          TabCtrl_InsertItem(hParaTab,1,&tie);

          tie.pszText="¼öÆò Á¤·Ä";

          TabCtrl_InsertItem(hParaTab,2,&tie);

          tie.pszText="Å©±â¼ø Á¤·Ä";

          TabCtrl_InsertItem(hParaTab,3,&tie);

          tie.pszText="ºóÁÙ Á¶Á¤";

          TabCtrl_InsertItem(hParaTab,4,&tie);

 

          // ÅÇÀ» ¹Ù²ãµµ ÅëÁö ¸Þ½ÃÁö¸¦ º¸³»Áö ¾ÊÀ¸¹Ç·Î Á÷Á¢ º¸³»¾ß ÇÑ´Ù.

          TabCtrl_SetCurSel(hParaTab,ParaOption.startpage);

          SendMessage(hDlg,WM_USER+1,ParaOption.startpage,0);

          return TRUE;

     case WM_NOTIFY:

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

          case TCN_SELCHANGE:

              SendMessage(hDlg,WM_USER+1,TabCtrl_GetCurSel(hParaTab),0);

              break;

          }

          return TRUE;

     case WM_USER+1:

          if (hTabDlg) {

              DestroyWindow(hTabDlg);

          }

          switch (wParam) {

          case 0:

              hTabDlg=CreateDialog(g_hInst,MAKEINTRESOURCE(IDD_PARA1),hDlg,Para1Proc);

              break;

          case 1:

              hTabDlg=CreateDialog(g_hInst,MAKEINTRESOURCE(IDD_PARA2),hDlg,Para2Proc);

              break;

          case 2:

              hTabDlg=CreateDialog(g_hInst,MAKEINTRESOURCE(IDD_PARA3),hDlg,Para3Proc);

              break;

          case 3:

              hTabDlg=CreateDialog(g_hInst,MAKEINTRESOURCE(IDD_PARA4),hDlg,Para4Proc);

              break;

          case 4:

              hTabDlg=CreateDialog(g_hInst,MAKEINTRESOURCE(IDD_PARA5),hDlg,Para5Proc);

              break;

          }

          return TRUE;

     case WM_COMMAND:

          switch (LOWORD(wParam)) {

          case IDOK:

          case IDC_BTNAPPLY:

              hActive=(HWND)SendMessage(g_hMDIClient,WM_MDIGETACTIVE,0,NULL);

              pSi=(SInfo *)GetWindowLong(hActive,0);

               switch (TabCtrl_GetCurSel(hParaTab)) {

              case 0:

                   ParaOption.p1_MultiEnter=SendDlgItemMessage(hTabDlg,IDC_P1_CB1,CB_GETCURSEL,0,0);

                   if (IsDlgButtonChecked(hTabDlg,IDC_P1_RA1)==BST_CHECKED) {

                        ParaOption.p1_Type=0;

                        lstrcpy(szTemp,"");

                   }

                   if (IsDlgButtonChecked(hTabDlg,IDC_P1_RA2)==BST_CHECKED) {

                        ParaOption.p1_Type=1;

                        lstrcpy(szTemp," ");

                   }

                   if (IsDlgButtonChecked(hTabDlg,IDC_P1_RA3)==BST_CHECKED) {

                        ParaOption.p1_Type=2;

                        lstrcpy(szTemp,"\t");

                   }

                   if (IsDlgButtonChecked(hTabDlg,IDC_P1_RA4)==BST_CHECKED) {

                        ParaOption.p1_Type=3;

                        GetDlgItemText(hTabDlg,IDC_P1_ED1,ParaOption.p1_szRep,32);

                        lstrcpy(szTemp,ParaOption.p1_szRep);

                   }

 

                   pSi->Ae.GetActiveView()->MergePara(ParaOption.p1_MultiEnter,szTemp);

                   break;

              case 1:

                   if (IsDlgButtonChecked(hTabDlg,IDC_P2_RA1)==BST_CHECKED) {

                        ParaOption.p2_Type=0;

                   }

                   if (IsDlgButtonChecked(hTabDlg,IDC_P2_RA2)==BST_CHECKED) {

                        ParaOption.p2_Type=1;

                        ParaOption.p2_nChar=iTemp=GetDlgItemInt(hTabDlg,IDC_P2_ED1,NULL,FALSE);

                        if (ParaOption.p2_nChar < 2) {

                            MessageBox(hDlg,"¹®ÀÚ¼ö´Â ÃÖ¼ÒÇÑ 2ÀÚ ÀÌ»óÀ̾î¾ß ÇÕ´Ï´Ù","¾Ë¸²",MB_OK);

                            return TRUE;

                        }

                   }

                   if (IsDlgButtonChecked(hTabDlg,IDC_P2_RA3)==BST_CHECKED) {

                        ParaOption.p2_Type=2;

                        ParaOption.p2_nPixel=iTemp=GetDlgItemInt(hTabDlg,IDC_P2_ED1,NULL,FALSE);

                        if (ParaOption.p2_nPixel < 100) {

                            MessageBox(hDlg,"È­¸éÆøÀº ÃÖ¼ÒÇÑ 100Çȼ¿ ÀÌ»óÀ̾î¾ß ÇÕ´Ï´Ù","¾Ë¸²",MB_OK);

                            return TRUE;

                        }

                   }

                   if (IsDlgButtonChecked(hTabDlg,IDC_P2_RA4)==BST_CHECKED) {

                        ParaOption.p2_Type=3;

                   }

                   if (IsDlgButtonChecked(hTabDlg,IDC_P2_CHK1)==BST_CHECKED) {

                        ParaOption.p2_bIndent=TRUE;

                        ParaOption.p2_nIndent=GetDlgItemInt(hTabDlg,IDC_P2_ED2,NULL,TRUE);

                        if (ParaOption.p2_nIndent > 32 || ParaOption.p2_nIndent < -32) {

                            MessageBox(hDlg,"µé¿©¾²±â(³»¾î¾²±â)´Â -32~32»çÀÌ¿©¾ß ÇÕ´Ï´Ù.","¾Ë¸²",MB_OK);

                            return TRUE;

                        }

                   } else {

                        ParaOption.p2_bIndent=FALSE;

                   }

                   ParaOption.p2_bRemoveSpace=!(IsDlgButtonChecked(hTabDlg,IDC_P2_CHK2)==BST_CHECKED);

                   pSi->Ae.GetActiveView()->SplitPara(ParaOption.p2_Type,iTemp,ParaOption.p2_bRemoveSpace,

                        ParaOption.p2_bIndent ? ParaOption.p2_nIndent:0);

                   break;

              case 2:

                   if (IsDlgButtonChecked(hTabDlg,IDC_P3_RA1)==BST_CHECKED) {

                        ParaOption.p3_Orient=0;

                   }

                   if (IsDlgButtonChecked(hTabDlg,IDC_P3_RA2)==BST_CHECKED) {

                        ParaOption.p3_Orient=1;

                   }

                   if (IsDlgButtonChecked(hTabDlg,IDC_P3_RA3)==BST_CHECKED) {

                        ParaOption.p3_Orient=2;

                   }

                   if (IsDlgButtonChecked(hTabDlg,IDC_P3_RA4)==BST_CHECKED) {

                        ParaOption.p3_Type=1;

                        ParaOption.p3_nChar=iTemp=GetDlgItemInt(hTabDlg,IDC_P3_ED1,NULL,FALSE);

                        if (iTemp < 2) {

                            MessageBox(hDlg,"¹®ÀÚ¼ö´Â ÃÖ¼ÒÇÑ 2ÀÚ ÀÌ»óÀ̾î¾ß ÇÕ´Ï´Ù","¾Ë¸²",MB_OK);

                            return TRUE;

                        }

                   }

                   if (IsDlgButtonChecked(hTabDlg,IDC_P3_RA5)==BST_CHECKED) {

                        ParaOption.p3_Type=2;

                        ParaOption.p3_nPixel=iTemp=GetDlgItemInt(hTabDlg,IDC_P3_ED1,NULL,FALSE);

                        if (iTemp < 100) {

                            MessageBox(hDlg,"È­¸éÆøÀº ÃÖ¼ÒÇÑ 100Çȼ¿ ÀÌ»óÀ̾î¾ß ÇÕ´Ï´Ù","¾Ë¸²",MB_OK);

                            return TRUE;

                        }

                   }

                   pSi->Ae.GetActiveView()->AlignPara(ParaOption.p3_Orient,ParaOption.p3_Type,iTemp);

                   break;

              case 3:

                   if (IsDlgButtonChecked(hTabDlg,IDC_P4_RA1)==BST_CHECKED) {

                        ParaOption.p4_Type=0;

                   }

                   if (IsDlgButtonChecked(hTabDlg,IDC_P4_RA2)==BST_CHECKED) {

                        ParaOption.p4_Type=1;

                   }

                   ParaOption.p4_Case=IsDlgButtonChecked(hTabDlg,IDC_P4_CHK1);

                   ParaOption.p4_Unique=IsDlgButtonChecked(hTabDlg,IDC_P4_CHK2);

                   pSi->Ae.GetActiveView()->SortPara(ParaOption.p4_Type,ParaOption.p4_Case,ParaOption.p4_Unique);

                   break;

              case 4:

                   if (IsDlgButtonChecked(hTabDlg,IDC_P5_RA1)==BST_CHECKED) {

                        ParaOption.p5_Type=0;

                   }

                   if (IsDlgButtonChecked(hTabDlg,IDC_P5_RA2)==BST_CHECKED) {

                        ParaOption.p5_Type=1;

                   }

                   if (IsDlgButtonChecked(hTabDlg,IDC_P5_RA3)==BST_CHECKED) {

                        ParaOption.p5_Type=2;

                   }

                   ParaOption.p5_Num=GetDlgItemInt(hTabDlg,IDC_P5_ED1,NULL,FALSE);

                   if (ParaOption.p5_Num < 0 || ParaOption.p5_Num > 16) {

                        MessageBox(hDlg,"ºó ÁÙ ¼ö´Â 0~16»çÀÌ¿©¾ß ÇÕ´Ï´Ù","¾Ë¸²",MB_OK);

                        return TRUE;

                   }

                   pSi->Ae.GetActiveView()->ArrangeEmptyPara(ParaOption.p5_Type,ParaOption.p5_Num);

                   break;

              }

              if (LOWORD(wParam)==IDOK) {

                   EndDialog(hDlg,IDOK);

              }

              return TRUE;

          case IDCANCEL:

               EndDialog(hDlg,IDCANCEL);

              return TRUE;

          }

          return FALSE;

     }

     return FALSE;

}

 

WM_INITDIALOG¿¡¼­ ´ëÈ­»óÀÚÀÇ À§Ä¡¸¦ Á¶Á¤ÇÏ¿© ¼±ÅÃÇØ ³õÀº ¹®´ÜÀ» °¡¸®Áö ¾Ê°Ô ÇÑ´Ù. ¹®´ÜÀ» À籸¼ºÇϱâ À§Çؼ­´Â ¸ÕÀú ¼±ÅÃÀ» Çϴµ¥ ÀÌ ¿µ¿ª¿¡ ´ëÈ­»óÀÚ¿¡ °¡·Á º¸ÀÌÁö ¾ÊÀ¸¸é ±²ÀåÈ÷ Â¥Áõ³¯ °ÍÀÌ´Ù. ±×·¡¼­ ¸ÕÀú ¿ÞÂÊÀ¸·Î ´ëÈ­»óÀÚ¸¦ ¿Å°Ü º¸µÇ, °ø°£ÀÌ ºÎÁ·ÇÏ¸é ¿À¸¥ÂÊÀ¸·Î ºÙÀδÙ. ´Ü, È­¸éÀ» ¹þ¾î³ªÁö´Â ¾Êµµ·Ï ÇØ¾ß ÇÑ´Ù.

ÅÇ ÄÁÆ®·Ñ¿¡ 4°³ÀÇ ÆäÀÌÁö¸¦ Ãß°¡Çϰí startpage¸¦ ¼±ÅÃÇÑ´Ù. ÀÌ °ªÀÇ µðÆúÆ®´Â 0À̹ǷΠù ¹øÂ° ÆäÀÌÁö°¡ ¿­¸®°ÚÁö¸¸ º¯°æ ÈÄ ´Ù½Ã ÀÌ ´ëÈ­»óÀÚ¸¦ ¿­ ¶§´Â ÃÖÈÄ ÀÛ¾÷ÇÏ´ø ÆäÀÌÁö°¡ ¿­¸°´Ù. ÅÇÀ» º¯°æÇÑ´Ù°í ÇØ¼­ ÅëÁö ¸Þ½ÃÁö¸¦ º¸³»Áö ¾ÊÀ¸¹Ç·Î ÅÇ º¯°æ½Ã °ü·Ã ÆäÀÌÁö¸¦ »ý¼ºÇÏ´Â ÄÚµå´Â WM_USER+1¿¡ µ¶¸³½ÃÄÑ µÎ¾ú´Ù. TCN_SELCHANGE ¶Ç´Â óÀ½ ´ëÈ­»óÀÚ¸¦ ¿­ ¶§ WM_USER+1 ¸Þ½ÃÁö¸¦ º¸³» ù ÆäÀÌÁö¸¦ ¿¬´Ù.

Àû¿ë ¹öưÀ» ´©¸£¸é ÇöÀç ¿­¸° ÆäÀÌÁöÀÇ ¿É¼ÇµéÀ» Àоî ApiEdit¿¡°Ô ¹®´Ü À籸¼ºÀ» ¿äûÇÑ´Ù. °¢ ÆäÀÌÁöÀÇ ¿É¼Ç Àǹ̿¡ ´ëÇØ¼­´Â °³º°ÀûÀ¸·Î ¼³¸íÇÒ °ÍÀÌ´Ù. OnCommand¿¡¼­ ÀÌ ´ëÈ­»óÀÚ¸¦ È£ÃâÇÑ´Ù.

 

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

{

     ....

     case IDM_TOOL_PARA:

          if (pView->ViewType != HEXA_VIEW)

              DialogBox(g_hInst,MAKEINTRESOURCE(IDD_PARA),hWnd,ParaDlgProc);

          break;

 

ÀÌ ÇÔ¼ö´Â Ȱ¼º ºä°¡ ¾øÀ¸¸é ¾Æ¿¹ È£ÃâµÇÁö ¾Ê´Â´Ù. ¶ÇÇÑ ¹®´ÜÀÇ °³³äÀÌ ¾ø´Â Çí»ç ºä¿¡´Â Àû¿ëÇÒ ¼ö ¾ø´Ù. ¾î¶² °æ¿ì¶óµµ Çí»ç ºä°¡ pLineÀ» ÂüÁ¶Çϵµ·Ï ³»¹ö·Á µÎ¸é ApiEdit´Â Áï»çÇÑ´Ù. ÅØ½ºÆ® ºä¿Í Çí»ç ºä·Î ºÐÇÒµÈ »óÅ¿¡¼­ ÅØ½ºÆ® ºä°¡ Ȱ¼º »óÅÂÀ̸é ÀÌ ¸í·ÉÀ» ¾µ ¼ö ÀÖ´Ù. ¹®´Ü À籸¼º ¸í·ÉÀ» ¾ðÁ¦ »ç¿ëÇÒ ¼ö ÀÖ´ÂÁö OnInitMenu¿¡¼­ °ü¸®ÇÑ´Ù.

 

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

{

     ....

          if (pView->ViewType==HEXA_VIEW) {

              EnableMenuItem(hMenu,IDM_EDIT_VIRT, MF_BYCOMMAND | MF_GRAYED);

              EnableMenuItem(hMenu,IDM_EDIT_COLUMN, MF_BYCOMMAND | MF_GRAYED);

           EnableMenuItem(hMenu,IDM_TOOL_PARA, MF_BYCOMMAND | MF_GRAYED);

          } else {

              EnableMenuItem(hMenu,IDM_EDIT_VIRT, MF_BYCOMMAND | MF_ENABLED);

              EnableMenuItem(hMenu,IDM_EDIT_COLUMN, MF_BYCOMMAND | MF_ENABLED);

           EnableMenuItem(hMenu,IDM_TOOL_PARA, MF_BYCOMMAND | MF_ENABLED);

               ....

 

¿­¸ðµå³ª °¡»ó À§Ä¡ ¿É¼Ç°ú ¸¶Âù°¡Áö·Î Çí»ç ºä¿¡¼­´Â ¾µ ¼ö ¾ø´Ù.

´Ù.º´ÇÕ

º´ÇÕÀº µÑ ÀÌ»óÀÇ ¹®´ÜÀ» ÇϳªÀÇ ¹®´ÜÀ¸·Î ÇÕÄ¡´Â °ÍÀÌ´Ù. ¹®´ÜÀ» ³Ê¹« ª°Ô ÀÛ¼ºÇßÀ» °æ¿ì ÀÌ ¸í·ÉÀ¸·Î ¹®´ÜµéÀ» ÀüºÎ ÇÕÄ¥ ¼ö ÀÖ´Ù. ¹®´ÜÀº °³Çà ÄÚµå·Î ºÐ¸®µÈ ¹®ÀÚ¿­µéÀ̹ǷΠÁß°£¿¡ ÀÖ´Â °³Çà Äڵ常 Á¦°ÅÇÏ¸é ½±°Ô º´ÇÕÇÒ ¼ö ÀÖ´Ù. À̶§ ¸î °¡Áö ¿É¼ÇÀ» Àû¿ëÇÒ ¼ö ÀÖ´Ù. ¿ì¼± °³Çà Äڵ带 Á¦°ÅÇÏ´Â ´ë½Å °ø¹éÀ̳ª ÅÇ ¶Ç´Â ±âŸ ¹®ÀÚ·Î ´ëüÇÒ ¼ö Àִµ¥ °³Çà Äڵ带 Á¦°Å¸¸ ÇÏ¸é µÎ ¹®´ÜÀÌ µü ºÙ¾î ¹ö¸®¹Ç·Î ¿ø·¡ ºÐ¸®µÈ ¹®´ÜÀ̶ó´Â °ÍÀ» Ç¥½ÃÇϱâ À§ÇØ ´Ù¸¥ ¹®ÀÚ¿­À» ³¢¿ö ³ÖÀ» ¼ö ÀÖ°Ô Çß´Ù. º¹¼ö °³ÀÇ °³Çà Äڵ尡 ¿¬ÀÌ¾î ³ª¿Ã ¶§ ÃÖÃÊÀÇ °³Çà ÄÚµå ´ÙÀ½¿¡ À̾îÁö´Â °³Çà Äڵ带 ¾î¶»°Ô ó¸®ÇÒ °ÍÀΰ¡µµ ÁöÁ¤ÇÒ ¼ö ÀÖ´Ù.

 

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

{

     RECT prt;

 

     switch(iMessage) {

     case WM_INITDIALOG:

          ParaOption.startpage=0;

          GetWindowRect(hParaTab,&prt);

          TabCtrl_AdjustRect(hParaTab,FALSE,&prt);

          ScreenToClient(GetParent(hDlg),(LPPOINT)&prt);

          SetWindowPos(hDlg,HWND_TOP,prt.left,prt.top,0,0,SWP_NOSIZE);

 

          SendDlgItemMessage(hDlg,IDC_P1_CB1,CB_ADDSTRING,0,(LPARAM)"¹«Á¶°Ç ´ëü");

          SendDlgItemMessage(hDlg,IDC_P1_CB1,CB_ADDSTRING,0,(LPARAM)"¹«Á¶°Ç »èÁ¦");

          SendDlgItemMessage(hDlg,IDC_P1_CB1,CB_ADDSTRING,0,(LPARAM)"¿ø·¡´ë·Î À¯Áö");

          SendDlgItemMessage(hDlg,IDC_P1_CB1,CB_SETCURSEL,ParaOption.p1_MultiEnter,0);

          CheckRadioButton(hDlg,IDC_P1_RA1,IDC_P1_RA4,IDC_P1_RA1+ParaOption.p1_Type);

          SendMessage(hDlg,WM_COMMAND,MAKEWPARAM(IDC_P1_RA1+ParaOption.p1_Type,BN_CLICKED),0);

          SetDlgItemText(hDlg,IDC_P1_ED1,ParaOption.p1_szRep);

          SendDlgItemMessage(hDlg,IDC_P1_ED1,EM_LIMITTEXT,31,0);

          return TRUE;

     case WM_COMMAND:

          switch (LOWORD(wParam)) {

          case IDC_P1_RA1:

          case IDC_P1_RA2:

          case IDC_P1_RA3:

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

              break;

          case IDC_P1_RA4:

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

              break;

          }

          return FALSE;

     }

     return FALSE;

}

 

WM_INITDIALOG¿¡¼­ ÀÚ½ÅÀÇ À§Ä¡¸¦ ÅÇ ÄÁÆ®·Ñ ¾ÈÀ¸·Î ¿Å±â°í SParaOption¿¡ ±â¾ïµÈ ¿É¼Ç´ë·Î ÄÁÆ®·ÑÀ» ÃʱâÈ­ÇÑ´Ù. WM_COMMAND¿¡¼­´Â ÄÁÆ®·ÑÀÇ Á¾¼Ó °ü°è¸¦ ó¸®Çϴµ¥ "±âŸ ¹®ÀÚ¿­·Î ´ëü" ¶óµð¿À ¹Ú½º°¡ ¼±ÅõǾî¾ß ´ëü ¹®ÀÚ¿­À» ÀԷ¹޴ ¿¡µðÆ®¸¦ »ç¿ëÇÒ ¼ö ÀÖ´Ù. ApiEdit´Â °¢ ÆäÀÌÁöÀÇ ¹®´Ü Á¶Á¤ ¸í·ÉÀ» ó¸®ÇÏ´Â ÇÔ¼ö¸¦ ÀÛ¼ºÇÑ´Ù. ´ÙÀ½ ÇÔ¼ö°¡ º´ÇÕÀ» ó¸®ÇÑ´Ù.

 

void CApiEditText::MergePara(int MultiEnterType,TCHAR *szRep)

{

     BEFOREARRANGEPARA

     BOOL bPrevEnter=FALSE;

 

     for (;;) {

          ReallocBuf(dest,d,1024,2048);

          if (s[0]=='\r' && s+1 < src+ed-st && s[1]=='\n') {

              if (MultiEnterType!=0 && bPrevEnter) {

                   if (MultiEnterType==1) {

                        s+=2;

                        nDiff+=2;

                   } else {

                        *d++=*s++;

                        *d++=*s++;

                   }

              } else {

                   lstrcpy(d,szRep);

                   d+=lstrlen(szRep);

                   s+=2;

                   nDiff+=2-lstrlen(szRep);

                   bPrevEnter=TRUE;

              }

          } else {

              if (IsDBCSLeadByte(*s)) {

                   *d++=*s++;

              }

              *d++=*s++;

              bPrevEnter=FALSE;

          }

          if (s==src+ed-st) {

              break;

          }

     }

 

     ENDARRANGEPARA(28)

}

 

BEFOREARRAGEPARA ¸ÅÅ©·Î¿¡¼­ ÇÊ¿äÇÑ Áö¿ª º¯¼ö¸¦ ¼±¾ðÇÏ°í ¹öÆÛ¸¦ ÇÒ´çÇϸç Á¶Á¤ ´ë»ó ¹üÀ§¸¦ Á¶»çÇÑ´Ù. ENDARRANGEPARA ¸ÅÅ©·Î´Â Á¶Á¤µÈ °á°ú¸¦ ¹®¼­¿¡ ´Ù½Ã ±â·ÏÇÏ°í µÞ Á¤¸®¸¦ ÇÑ´Ù. ±×·¡¼­ ¹®´Ü À籸¼º ÇÔ¼öµéÀº ÀÌ µÎ ¸ÅÅ©·ÎÀÇ Áß°£¿¡¼­ st, ed »çÀÌÀÇ ¹®´ÜÀ» ¿É¼Ç¿¡ ¸Â°Ô Á¶Á¤Çϸ鼭 nDiff¸¸ Àß °ü¸®ÇÏ¸é µÈ´Ù. ÀÌÈÄÀÇ ÇÔ¼öµéµµ ¸¶Âù°¡Áö ±¸Á¶·Î µÇ¾î ÀÖ´Ù. ÀÌÈÄ Ã³¸® ´ë»ó ¹öÆÛ¸¦ ¼øÈ¸Çϸ鼭 °¢ ¹®ÀÚ¸¦ ÀÛ¾÷¿¡ ¸Â°Ô ó¸®ÇÑ´Ù.

°³Çà Äڵ尡 ¾Æ´Ï¸é ´Ü¼øÈ÷ º¹»çÇÑ´Ù. À̶§ *d++=*s++;·Î º¹»çÇØ¼­´Â ¾ÈµÈ´Ù. DBCS ¹®ÀÚÀÎ °æ¿ì´Â ¹Ýµå½Ã 2¹ÙÀÌÆ®¸¦ ÇѲ¨¹ø¿¡ º¹»çÇØ¾ß Çϴµ¥ 0xb0,0x0d,0x0a°°Àº Àç¼ö¾øÀº ½ºÆ®¸²ÀÌ ÀÖÀ» °æ¿ì ÇÑ ¹ÙÀÌÆ®¾¿ º¹»çÇϸé 0xb0 º¹»ç ÈÄ °³Çà Äڵ尡 ÀÖ´Ù°í ¿ÀÆÇÀ» ÇÏ°Ô µÈ´Ù. °³Çà Äڵ带 ¸¸³ª¸é ´ëü ¹®ÀÚ¿­·Î ¹Ù²ãÄ¡±â ÇÑ´Ù. ¿øº»°ú Á¶Á¤ÈÄÀÇ ¹®ÀÚ¿­ÀÌ ´Þ¶óÁú ¶§´Â nDiff¿¡ ±× Â÷À̸¦ Àß ±â·ÏÇØ µÐ´Ù. º¹¼ö °³ÀÇ °³Çà Äڵ带 ¸¸³µÀ» ¶§´Â ÆäÀÌÁö¿¡¼­ ¼±ÅÃÇÑ ¿É¼Ç¿¡ µû¶ó 󸮰¡ ´Þ¶óÁø´Ù. 0¹øÀ̰ųª óÀ½ ¸¸³ª´Â °æ¿ì´Â ¹«Á¶°Ç ´ëüÇÑ´Ù. 1¹øÀÎ °æ¿ì´Â ¹«Á¶°Ç »èÁ¦Çϰí 2¹øÀÎ °æ¿ì´Â ´Ü¼øÈ÷ º¹»çÇϱ⸸ ÇÏ¸é µÈ´Ù.

º´ÇÕÀº °³Çà Äڵ带 »èÁ¦ÇϹǷΠ¸Þ¸ð¸®°¡ ºÎÁ·ÇÒ °æ¿ì´Â °ÅÀÇ ¾ø´Ù. ´Ü, ´ëü ¹®ÀÚ¿­ÀÌ ±æ °æ¿ì´Â ¸Þ¸ð¸®°¡ ´õ ´Ã¾î³¯ ¼öµµ ÀÖ´Ù. ¿¹¸¦ µé¾î ´ëü ¹®ÀÚ¿­ÀÌ "¿©±â¼­ Çà¹Ù²Þ"À¸·Î ÁöÁ¤Çß´Ù¸é 2¹ÙÀÌÆ®ÀÇ °³Çà Äڵ尡 13¹ÙÀÌÆ®·Î ´Ã¾î³¯ °ÍÀÌ´Ù. ±×·¡¼­ ·çÇÁ¸¦ µ¹ ¶§¸¶´Ù ReallocBuf ÇÔ¼ö·Î destÀÇ ¸Þ¸ð¸®°¡ ºÎÁ·ÇÏÁö ¾ÊÀºÁö °Ë»çÇÏ¿© ÃÖ¼ÒÇÑ 1024¹ÙÀÌÆ®¸¸Å­ÀÇ ¿©À¯¸¦ °¡Áöµµ·Ï Çß´Ù. ¾îÂ÷ÇÇ Àӽà ¸Þ¸ð¸®¶ó Á» ³Ë³ËÇÏ°Ô ÇÒ´çÇØµµ »ó°ü¾ø´Ù. ÀÌÈÄÀÇ ÇÔ¼öµé¿¡¼­µµ ¸Þ¸ð¸®°¡ ºÎÁ·ÇÒ °¡´É¼ºÀÌ Á¶±ÝÀÌ¶óµµ ÀÖ´Â À§Ä¡¿¡¼­ ¼ö½Ã·Î ReallocBuf ÇÔ¼ö¸¦ È£ÃâÇØ´í´Ù.

¶ó.ºÐÇÒ

ºÐÇÒÀº Å« ¹®´ÜÀ» ÀÏÁ¤ÇÑ ±âÁØ¿¡ µû¶ó ¿©·¯ °³ÀÇ ¹®´ÜÀ¸·Î Âɰ³´Â °ÍÀÌ´Ù. ºÐÇÒ ¹æ¹ýÀÌ ¾ÆÁÖ ´Ù¾çÇϱ⠶§¹®¿¡ Äڵ嵵 º´ÇÕº¸´Ù ´õ º¹ÀâÇÏ´Ù. ºÐÇÒ ±âÁØ¿¡ ¸Â´Â À§Ä¡¿¡ °³Çà Äڵ带 »ðÀÔÇϸé ÀÌ À§Ä¡ÀÇ ¾Õ µÚ ¹®ÀÚ¿­ÀÌ µ¶¸³µÈ ¹®´ÜÀ¸·Î ºÐÇҵȴÙ. ÆäÀÌÁö ´ëÈ­»óÀÚÀÇ ÄÚµå´Â ´ÙÀ½°ú °°´Ù.

 

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

{

     RECT prt;

 

     switch(iMessage) {

     case WM_INITDIALOG:

          ParaOption.startpage=1;

          GetWindowRect(hParaTab,&prt);

          TabCtrl_AdjustRect(hParaTab,FALSE,&prt);

          ScreenToClient(GetParent(hDlg),(LPPOINT)&prt);

          SetWindowPos(hDlg,HWND_TOP,prt.left,prt.top,0,0,SWP_NOSIZE);

 

          CheckRadioButton(hDlg,IDC_P2_RA1,IDC_P2_RA4,IDC_P2_RA1+ParaOption.p2_Type);

          SendMessage(hDlg,WM_COMMAND,MAKEWPARAM(IDC_P2_RA1+ParaOption.p2_Type,BN_CLICKED),0);

          SendDlgItemMessage(hDlg,IDC_P2_SPIN2,UDM_SETRANGE,0,MAKELPARAM(32,-32));

          SetDlgItemInt(hDlg,IDC_P2_ED2,ParaOption.p2_nIndent,TRUE);

          CheckDlgButton(hDlg,IDC_P2_CHK1,(ParaOption.p2_bIndent ? BST_CHECKED:BST_UNCHECKED));

          CheckDlgButton(hDlg,IDC_P2_CHK2,(ParaOption.p2_bRemoveSpace ? BST_UNCHECKED:BST_CHECKED));

          SendMessage(hDlg,WM_COMMAND,MAKEWPARAM(IDC_P2_CHK1,BN_CLICKED),0);

          return TRUE;

     case WM_COMMAND:

          // ¸¶Ä§Ç¥, È­¸é´ë·Î ÀÏ ¶§´Â µé¿©¾²±â ÇÒ ¼ö ¾øÀ½. ¹®ÀÚ¼ö³ª Çȼ¿¼ö¸¦ ÀÔ·ÂÇÒ Çʿ䵵 ¾øÀ½

          if (LOWORD(wParam)==IDC_P2_RA1 || LOWORD(wParam)==IDC_P2_RA4) {

              CheckDlgButton(hDlg,IDC_P2_CHK1,BST_UNCHECKED);

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

              SendMessage(hDlg,WM_COMMAND,MAKEWPARAM(IDC_P2_CHK1,BN_CLICKED),0);

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

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

          } else if (LOWORD(wParam)==IDC_P2_RA2 || LOWORD(wParam)==IDC_P2_RA3) {

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

              SendMessage(hDlg,WM_COMMAND,MAKEWPARAM(IDC_P2_CHK1,BN_CLICKED),0);

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

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

          }

 

          switch (LOWORD(wParam)) {

          case IDC_P2_RA2:

              SetDlgItemInt(hDlg,IDC_P2_ED1,ParaOption.p2_nChar,FALSE);

              SetDlgItemText(hDlg,IDC_P2_ST1,"¹®ÀÚ");

              SendDlgItemMessage(hDlg,IDC_P2_SPIN1,UDM_SETRANGE,0,MAKELPARAM(1024,2));

              break;

          case IDC_P2_RA3:

              SetDlgItemInt(hDlg,IDC_P2_ED1,ParaOption.p2_nPixel,FALSE);

              SetDlgItemText(hDlg,IDC_P2_ST1,"Çȼ¿");

              SendDlgItemMessage(hDlg,IDC_P2_SPIN1,UDM_SETRANGE,0,MAKELPARAM(4096,100));

              break;

          case IDC_P2_CHK1:

              if (IsDlgButtonChecked(hDlg,IDC_P2_CHK1)==BST_CHECKED) {

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

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

                   CheckDlgButton(hDlg,IDC_P2_CHK2,BST_UNCHECKED);

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

              } else {

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

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

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

              }

              break;

          }

          return FALSE;

     }

     return FALSE;

}

 

ÄÁÆ®·ÑÀ» °ü¸®ÇÏ´Â ±ÔÄ¢ÀÌ Á¶±Ý º¹ÀâÇÏ´Ù. ¹®ÀÚ¼ö³ª Çȼ¿¼ö·Î ºÐÇÒÇÒ ¶§¸¸ µé¿©¾²±â¸¦ ÇÒ ¼ö ÀÖÀ¸¸ç µé¿©¾²±â¸¦ ÇÒ ¶§´Â ¹®´Ü óÀ½ÀÇ °ø¹éÀ» ¹«Á¶°Ç Á¦°ÅÇØ¾ß ÇÑ´Ù. ±×·¡¼­ °¢ ¿É¼Ç°£ÀÇ Á¾¼Ó °ü°è¸¦ ó¸®ÇÏ´Â Äڵ尡 Á¶±Ý ¸¹´Ù. ¹®´ÜÀ» ºÐÇÒÇÏ´Â ÇÔ¼ö´Â ´ÙÀ½°ú °°´Ù.

 

void CApiEditText::SplitPara(int type, int num, BOOL bRemoveSpace, int iIndent)

{

     BEFOREARRANGEPARA

     int acwidth;

     int sl,el,l;

     int *arWrap,idx;

     int i;

 

     switch (type) {

     case 0:

          for (;;) {

              ReallocBuf(dest,d,1024,2048);

              if (IsDBCSLeadByte(*s)) {

                   *d++=*s++;

              }

              *d++=*s++;

               if (s[-1]=='.') {

                   *d++='\r';

                   *d++='\n';

                   nDiff-=2;

                   // ¸¶Ä§Ç¥ ´ÙÀ½ÀÇ °ø¹éÀº °Ç³Ê ¶Ü

                   if (bRemoveSpace) {

                        while (AeIsWhiteSpace(*s)) {

                            s++;

                            nDiff++;

                        }

                   }

              }

              if (s==src+ed-st) {

                   break;

              }

          }

          break;

     // Áß°£¿¡ ¹®´Ü ±¸Á¶°¡ ¹Ù²î±â ¶§¹®¿¡ pLine ¹è¿­Àº ÂüÁ¶ÇÒ ¼ö ¾øÀ½

     case 1:

     case 2:

          ReallocBuf(dest,d,1024,2048);

          acwidth=0;

          // ¹®´Ü óÀ½Àº Ç×»ó µé¿©¾²±â ÇÑ´Ù.

          if (iIndent > 0) {

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

                   *d++=' ';

                   nDiff--;

                   if (type==1) {

                        acwidth++;

                   } else {

                        acwidth+=GetCharWidth(" ",1);

                   }

              }

              // °ø¹éÀº °Ç³Ê ¶Ù¾î¾ß ÇÑ´Ù.

              while (AeIsWhiteSpace(*s)) {

                   s++;

                   nDiff++;

              }

          }

          for (;;) {

              ReallocBuf(dest,d,1024,2048);

              if (s[0]=='\r' && s+1 < src+ed-st && s[1]=='\n') {

                   *d++=*s++;

                   *d++=*s++;

                   acwidth=0;

                   // µé¿©¾²±â ÇÑ´Ù.

                   if (iIndent > 0) {

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

                            *d++=' ';

                            nDiff--;

                            if (type==1) {

                                 acwidth++;

                            } else {

                                 acwidth+=GetCharWidth(" ",1);

                            }

                        }

                        // °ø¹éÀº °Ç³Ê ¶Ù¾î¾ß ÇÑ´Ù. µé¿©¾²±â¸¦ ÇÏÁö ¾ÊÀ» ¶§´Â ±×³É µÐ´Ù

                        while (AeIsWhiteSpace(*s)) {

                            s++;

                            nDiff++;

                        }

                   }

              } else {

                   // ÇöÀç ¹®ÀÚ±îÁö ´õÇßÀ» ¶§ÀÇ ÆøÀ» °è»êÇÑ´Ù.

                   if (type==1) {

                        if (IsDBCSLeadByte(*s)) {

                            acwidth+=2;

                        } else {

                            acwidth++;

                        }

                   } else {

                        if (*s=='\t') {

                            acwidth=(acwidth/TabSize+1)*TabSize;

                        } else {

                            if (IsDBCSLeadByte(*s)) {

                                 acwidth+=GetCharWidth(s,2);

                            } else {

                                 acwidth+=GetCharWidth(s,1);

                            }

                        }

                   }

                   // ÆøÀ» ³Ñ¾úÀ» ¶§ ºÐÇÒ. °°À» ¶§´Â ºÐÇÒÇÏÁö ¾ÊÀ½

                   if (acwidth > num) {

                        *d++='\r';

                        *d++='\n';

                        acwidth=0;

                        nDiff-=2;

                        // »ðÀÔµÈ °³ÇàÄÚµå ´ÙÀ½ÀÇ °ø¹éÀº °Ç³Ê ¶Ü

                        if (bRemoveSpace) {

                            while (AeIsWhiteSpace(*s)) {

                                 s++;

                                 nDiff++;

                            }

                        }

                        // ³»¾î ¾²±âÇÑ´Ù.

                        if (iIndent < 0) {

                            for (i=0;i>iIndent;i--) {

                                 *d++=' ';

                                 nDiff--;

                                 if (type==1) {

                                      acwidth++;

                                 } else {

                                      acwidth+=GetCharWidth(" ",1);

                                 }

                            }

                        }

                   // ³ÑÁö ¾Ê¾ÒÀ¸¸é ¹®ÀÚ º¹»ç

                   } else {

                        if (IsDBCSLeadByte(*s)) {

                            *d++=*s++;

                        }

                        *d++=*s++;

                   }

              }

              if (s==src+ed-st) {

                   break;

              }

          }

          break;

     case 3:

          GetRCFromOff(st,sl,l);

          GetRCFromOff(ed,el,l);

          arWrap=(int *)malloc((el-sl)*sizeof(int));

          // elÁÙÀº ¹®´Ü ³¡À̹ǷΠº¼ ÇÊ¿ä¾øÀ½. l+1Àº Ç×»ó À¯È¿ÇÔ

          for (l=sl,idx=0;l<el;l++) {

              if (pLine[l+1].nLine) {

                   arWrap[idx]=pLine[l].End;

                   idx++;

              }

          }

 

          for (idx=0;;) {

              ReallocBuf(dest,d,1024,2048);

              // ÇöÀç ¿ÀÇÁ¼ÂÀÌ ÀÚµ¿ °³ÇàµÈ ¿ÀÇÁ¼Â°ú °°À¸¸é

              if (s-src+st == arWrap[idx]) {

                   *d++='\r';

                   *d++='\n';

                   nDiff-=2;

                   idx++;

                   // ¸¶Ä§Ç¥ ´ÙÀ½ÀÇ °ø¹éÀº °Ç³Ê ¶Ü

                   if (bRemoveSpace) {

                        while (AeIsWhiteSpace(*s)) {

                            s++;

                            nDiff++;

                        }

                   }

              } else {

                   if (IsDBCSLeadByte(*s)) {

                        *d++=*s++;

                   }

                   *d++=*s++;

              }

              if (s==src+ed-st) {

                   break;

              }

          }

          free(arWrap);

          break;

     }

 

     ENDARRANGEPARA(29)

}

 

ÄÉÀ̽º º°·Î ºÐ¼®ÇØ º¸ÀÚ.

¸¶Ä§Ç¥¸¦ ±âÁØÀ¸·Î

¸¶Ä§Ç¥¸¦ ¸¸³¯ ¶§¸¶´Ù °³Çà Äڵ带 »ðÀÔÇϱ⸸ ÇÏ¸é µÈ´Ù. °³ÇàµÇ±â Á÷ÀüÀÇ ¹®ÀÚ±îÁö º¹»çÇØ¾ß ÇϹǷΠÀÏ´Ü ¹®ÀÚ¸¦ ¸ÕÀú º¹»çÇÑ ÈÄ ¹æ±Ý º¹»çÇÑ ¹®ÀÚ°¡ ¸¶Ä§Ç¥ÀÎÁö º»´Ù. DBCSÀÏ °æ¿ì´Â ¸¶Ä§Ç¥ÀÏ ¸®°¡ ¾øÀ¸¹Ç·Î °è¼Ó ·çÇÁ¸¦ µ¹±â¸¸ ÇÏ¸é µÈ´Ù. DBCSÀÎ °æ¿ìµµ ¸¶Ä§Ç¥ÀÎÁö º¸°Ô µÈ´Ù¸é 0xb0 0x2e ½ºÆ®¸²ÀÇ °æ¿ì s[-1]ÀÌ '.'ÀÌ µÇ´Â Á¶°ÇÀÌ ¿ì¿¬È÷ ¸¸Á·ÇÏ°Ô µÈ´Ù.

¸¶Ä§Ç¥¸¦ ¸¸³ª¸é °³Çà Äڵ带 »ðÀÔÇØ ³Ö´Â´Ù. À̶§ nDiff´Â 2 °¨¼ÒÇÏ¿© ¼±Åà ¿µ¿ªÀÌ 2¸¸Å­ ´õ ¾ÕÂÊÀ¸·Î À̵¿ÇØ¾ß ÇÔÀ» ±â·ÏÇØ ³õ´Â´Ù. bRemoveSpace ¿É¼ÇÀÌ ¼±ÅõǾî ÀÖÀ¸¸é ¸¶Ä§Ç¥ ´ÙÀ½ÀÇ °ø¹éÀ» °Ç³Ê¶Ú´Ù. º¸Åë ÀÌ ¿É¼ÇÀº ¼±ÅÃÇÏ´Â °ÍÀÌ ÁÁÀºµ¥ ÀÌ ¿É¼ÇÀ» ¼±ÅÃÇÏÁö ¾ÊÀ» °æ¿ì ¸¶Ä§Ç¥ ´ÙÀ½ÀÇ °ø¹éÀÌ ´ÙÀ½ ¹®´ÜÀÇ ¼±µÎ¿¡ ¿À°Ô µÇ¹Ç·Î º¸±â ÁÁÁö ¾Ê´Ù.

¹®ÀÚÆø, È­¸éÆø ±âÁØÀ¸·Î

µÎ ¿É¼ÇÀº 󸮰¡ ºñ½ÁÇÏ´Ù. ÀÏ´Ü µé¿©¾²±â, ³»¾î¾²±â´Â ¹«½ÃÇÏ°í ºÐ¼®ÇØ º¸ÀÚ. acwidth¿¡ ÆøÀ» ´©Àû½ÃŰ´Ù°¡ ÀÌ ÆøÀÌ ±âÁØÆøÀ» ³Ñ¾úÀ» ¶§ °³Çà Äڵ带 »ðÀÔÇØ ³ÖÀ¸¸é µÈ´Ù. acwidth¿¡ ¹®ÀÚ °³¼ö¸¦ ´©Àû½Ãų °ÍÀÎÁö ¹®ÀÚÀÇ ¼öÆòÆøÀ» ´©Àû½Ãų °ÍÀÎÁö°¡ ´Ù¸¦ »ÓÀÌ´Ù.

typeÀÌ 1À̸é acwidth¿¡ ¹®ÀÚ¼ö¸¦ ´©Àû½ÃÄÑ ³ª°¡°í 2À̸é GetCharWidth·Î ±¸ÇÑ ¹®ÀÚÀÇ ÆøÀ» ´©Àû½ÃÄÑ ³ª°£´Ù. È­¸éÆøÀÇ °æ¿ì ÅÇ ¹®Àڴ Ưº°È÷ µû·Î °ü¸®ÇØ¾ß ÇÑ´Ù. ÅÇÀ» ¸¸³ª¸é ´ÙÀ½ ÅÇ À§Ä¡¸¦ Á÷Á¢ °è»êÇÏ¿© acwidth¿¡ ´ëÀÔÇÑ´Ù. °³Çà Äڵ带 ¸¸³ª¸é acwidth´Â 0ÀÌ µÈ´Ù. acwidth°¡ ±âÁØÆøÀ» ³Ñ¾úÀ» ¶§ °³Çà Äڵ带 »ðÀÔÇÏ°í ±×·¸Áö ¾ÊÀ¸¸é ¹®ÀÚ¸¦ °è¼Ó º¹»çÇÑ´Ù.

ƯÁ¤ ¿ÀÇÁ¼ÂÀÇ Ä÷³ ¹øÈ£³ª Çȼ¿¼ö´Â GetRCFromOff, GetXYFromOff ÇÔ¼ö·Î ±¸ÇÒ ¼ö ÀÖÀ¸¹Ç·Î Á» ´õ °£´ÜÇÑ ³í¸®¸¦ »ç¿ëÇÒ ¼ö ÀÖÀ» °Í °°´Ù. ±×·¯³ª ÀÌ °æ¿ì´Â Áß°£¿¡ ¾ÕÂÊ µ¥ÀÌÅͰ¡ ¼ö½Ã·Î ¹Ù²î±â ¶§¹®¿¡ pLine ¹è¿­À» ÂüÁ¶ÇÒ ¼ö ¾øÀ¸¸ç Á÷Á¢ ¹®ÀÚÆø°ú Çȼ¿ÆøÀ» ´©ÀûÇØ¾ß ÇÑ´Ù.

µé¿©¾²±â, ³»¾î¾²±â

¹®ÀÚÆøÀ̳ª È­¸éÆøÀ¸·Î ºÐÇÒÇÒ ¶§´Â ºÐÇÒÇϸ鼭 µé¿©¾²±â¿Í ³»¾î¾²±â¸¦ Á¶Á¤ÇÒ ¼ö ÀÖ´Ù. µé¿©¾²±â´Â ¹°¸®ÀûÀÎ ¹®´Ü óÀ½¿¡ ´ëÇØ¼­ Àû¿ëµÇ´Âµ¥ ÃÖÃÊ ·çÇÁ¿¡ ÁøÀÔÇϱâ Àü¿¡ ù ¹®´Ü¿¡ ´ëÇØ µû·Î ó¸®ÇÏ¸ç ¶ÇÇÑ ·çÇÁ¸¦ µ¹´Ù°¡ ¹°¸®ÀûÀÎ °³Çà Äڵ带 ¸¸³µÀ» ¶§µµ ó¸®ÇÑ´Ù. µÑ ´Ù iIndent°¡ 0 ÀÌ»óÀÏ ¶§¸¸ ó¸®ÇÑ´Ù.

µé¿©¾²±â ±íÀ̸¸Å­ °ø¹é ¹®ÀÚ¸¦ ´õ »ðÀÔÇ쵂 À̶§ Á¦´ë·Î µé¿©¾²±â°¡ µÇ·Á¸é ¹®´Ü óÀ½ÀÇ °ø¹éÀº Á¦°ÅÇØ¾ß ÇÑ´Ù. ±×·¡¼­ µé¿©¾²±â¸¦ ÇÒ ¶§´Â ¹®´Ü óÀ½ÀÇ °ø¹é Á¦°ÅÇÏÁö ¾ÊÀ½ ¿É¼ÇÀ» ¼±ÅÃÇÒ ¼ö ¾ø´Â °ÍÀÌ´Ù. ³»¾î¾²±â´Â °­Á¦·Î ºÐÇÒµÈ ¹®´Ü¿¡ ´ëÇØ Àû¿ëµÈ´Ù. ÆøÀ» ³Ñ¾î¼­ ¹®´ÜÀ» ºÐÇÒÇÒ ¶§ iIndent°¡ 0 ÀÌÇÏÀÇ À½¼öÀ̸é ÀÌ ¼ö¸¸Å­ °ø¹éÀ» ´õ »ðÀÔÇÑ´Ù.

ÇöÀç º¸À̴´ë·Î

ÀÌ ¿É¼ÇÀº ÀÚµ¿ °³Çà »óÅ¿¡¼­ ÇöÀç È­¸é Æø¿¡ ¸Â°Ô Á¤·ÄµÇ¾î ÀÖ´Â »óÅ ±×´ë·Î ¹®´ÜÀ» ºÐÇÒÇÑ´Ù. ¾îµð°¡ ÁÙÀÇ ³¡ÀÎÁö´Â pLine ¹è¿­À» ÂüÁ¶ÇÏ¸é ½±°Ô ±¸ÇÒ ¼ö ÀÖ´Ù. ¸ðµç Á¤º¸¸¦ ¸ÕÀú Á¶»çÇÑ ÈÄ Àû¿ëÇϱ⠶§¹®¿¡ pLine ¹è¿­À» ÂüÁ¶ÇÒ ¼ö ÀÖ´Ù. arWrap ¹è¿­¿¡ ÀÚµ¿ °³ÇàµÈ ¿ÀÇÁ¼Â À§Ä¡¸¦ Á¶»çÇØ µÐ´Ù. ´ÙÀ½ ÁÙÀÇ nLineÀÌ 0ÀÌ ¾Æ´Ï¸é ÀÌ ÁÙÀº ÀÚµ¿ °³ÇàµÇ¾úÀ½À» ½±°Ô ¾Ë ¼ö ÀÖ´Ù.

elÁÙÀº ¹®´ÜÀÇ ³¡ÀÌ¸ç ¹°¸®ÀûÀÎ °³Çà Äڵ带 °¡Áö°í ÀÖÀ¸¹Ç·Î Á¶Á¤ ´ë»ó¿¡ Æ÷ÇÔµÇÁö ¾Ê´Â´Ù. ±×·¡¼­ lÀº elº¸´Ù ÇÑÄ­ ¾ÕÂÊ ÁÙ±îÁö¸¸ ·çÇÁ¸¦ µ¹¸ç l+1ÁÙÀº Ç×»ó À¯È¿ÇÏ´Ù. arWrap¿¡ ÀÚµ¿ °³ÇàµÈ ¿ÀÇÁ¼ÂÀ» Á¶»çÇÑ ÈÄ ·çÇÁ¸¦ µ¹¸é¼­ ÀÌ ¿ÀÇÁ¼Â°ú °°Àº À§Ä¡¸¦ Áö³¯ ¶§ d¿¡ °³Çà Äڵ带 ½½Â½ »ðÀÔÇØ ³ÖÀ¸¸é ÇöÀç È­¸é¿¡ º¸À̴´ë·Î ¹®´ÜÀÌ ³ª´©¾îÁø´Ù.

¸¶.¼öÆò Á¤·Ä

¼öÆò Á¤·Ä(Alignment)Àº ¹®´ÜÀÇ ¼öÆòÀûÀÎ ¹èÄ¡ »óŸ¦ ÀǹÌÇÏ¸ç ¿ÞÂÊ Á¤·Ä, Áß¾Ó Á¤·Ä, ¿À¸¥ÂÊ Á¤·Ä µîÀÌ ÀÖ´Ù. ·¹Äڵ带 Å©±â ¼øÀ¸·Î ³ª¿­ÇÏ´Â Á¤·Ä(Sort)°¡ ¾Æ´ÔÀ» ÁÖÀÇÇÏÀÚ. ±âÁØÆøº¸´Ù ªÀº ¹®ÀÚ¿­ ¾Õ¿¡ °ø¹éÀ» Àû´çÈ÷ »ðÀÔÇϸé Á¤·ÄµÈ´Ù. Á¤·ÄÀ» À§ÇØ ½ÇÁ¦·Î ¹®ÀÚ¸¦ »ðÀÔÇÑ´Ù´Â Á¡¿¡¼­ ¿öµå ÇÁ·Î¼¼¼­ÀÇ Á¤·Ä°ú´Â ´Ù¸£´Ù.

 

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

{

     RECT prt;

 

     switch(iMessage) {

     case WM_INITDIALOG:

          ParaOption.startpage=2;

          GetWindowRect(hParaTab,&prt);

          TabCtrl_AdjustRect(hParaTab,FALSE,&prt);

          ScreenToClient(GetParent(hDlg),(LPPOINT)&prt);

          SetWindowPos(hDlg,HWND_TOP,prt.left,prt.top,0,0,SWP_NOSIZE);

 

          CheckRadioButton(hDlg,IDC_P3_RA1,IDC_P3_RA3,IDC_P3_RA1+ParaOption.p3_Orient);

          CheckRadioButton(hDlg,IDC_P3_RA4,IDC_P3_RA5,IDC_P3_RA4+ParaOption.p3_Type-1);

          SendMessage(hDlg,WM_COMMAND,MAKEWPARAM(IDC_P3_RA4+ParaOption.p3_Type-1,BN_CLICKED),0);

          return TRUE;

     case WM_COMMAND:

          switch (LOWORD(wParam)) {

          case IDC_P3_RA4:

              SetDlgItemInt(hDlg,IDC_P3_ED1,ParaOption.p3_nChar,FALSE);

              SetDlgItemText(hDlg,IDC_P3_ST1,"¹®ÀÚ");

              SendDlgItemMessage(hDlg,IDC_P3_SPIN1,UDM_SETRANGE,0,MAKELPARAM(1024,2));

              return TRUE;

          case IDC_P3_RA5:

              SetDlgItemInt(hDlg,IDC_P3_ED1,ParaOption.p3_nPixel,FALSE);

              SetDlgItemText(hDlg,IDC_P3_ST1,"Çȼ¿");

              SendDlgItemMessage(hDlg,IDC_P3_SPIN1,UDM_SETRANGE,0,MAKELPARAM(4096,100));

              return TRUE;

          }

          return FALSE;

     }

     return FALSE;

}

 

ÆäÀÌÁö¿¡¼­´Â ¹æÇâ°ú ±âÁØÆøÀ» ÀԷ¹޴´Ù. ½ÇÁ¦ Á¤·ÄÀº ´ÙÀ½ ÇÔ¼ö°¡ ¼öÇàÇÑ´Ù.

 

void CApiEditText::AlignPara(int orient, int type, int num)

{

     BEFOREARRANGEPARA

     int acwidth,extra;

     int i;

     TCHAR *s2;

 

     for (;;) {

          acwidth=0;

          // ¾ÕÂÊ °ø¹éÀº °Ç³Ê¶Ú´Ù.

          while (AeIsWhiteSpace(*s)) {

              s++;

              nDiff++;

          }

          s2=s;

          // ¹®´Ü ³¡±îÁö Æø °è»ê

          for (;;) {

              if ((s[0]=='\r' && s+1 < src+ed-st && s[1]=='\n') || (s==src+ed-st)) {

                   break;

              }

              if (type==1) {

                   if (IsDBCSLeadByte(*s)) {

                        acwidth+=2;

                        s++;

                   } else {

                        acwidth++;

                   }

              } else {

                   if (*s=='\t') {

                       acwidth=(acwidth/TabSize+1)*TabSize;

                   } else {

                        if (IsDBCSLeadByte(*s)) {

                            acwidth+=GetCharWidth(s,2);

                            s++;

                        } else {

                            acwidth+=GetCharWidth(s,1);

                        }

                   }

              }

              s++;

          }

          // ±âÁØÆøº¸´Ù ´õ ±æ¸é ±×´ë·Î º¹»ç

          if (acwidth >= num || orient==0) {

              for (;s2!=s;) {

                   *d++=*s2++;

              }

          } else {

              ReallocBuf(dest,d,1024,2048);

              extra=(num-acwidth);

              if (type==2) {

                   extra=extra/GetCharWidth(" ",1);

              }

              switch (orient) {

              case 1:

                   // Áß¾Ó:¿©ºÐ °ø¹éÀÇ Àý¹Ý¸¸ »ðÀÔ

                   for (i=0;i<extra/2;i++) {

                        *d++=' ';

                        nDiff--;

                   }

                   break;

              case 2:

                   // ¿À¸¥ÂÊ:¿©ºÐ °ø¹é »ðÀÔ ÈÄ º¹»ç

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

                        *d++=' ';

                        nDiff--;

                   }

                   break;

              }

              for (;s2!=s;) {

                   *d++=*s2++;

              }

          }

          if (s==src+ed-st) {

              break;

          }

          // ¹®´Ü ³¡ÀÇ °³Çà ÄÚµå º¹»ç. ¸¶Áö¸· ¹®´Ü¿¡´Â ÀÌ °³Çà Äڵ尡 ¾øÀ½

          *d++=*s++;

          *d++=*s++;

     }

 

     ENDARRANGEPARA(30)

}

 

Á¤·ÄÀ̶õ ´«¿¡ º¸ÀÌ´Â ¹®ÀÚµéÀÇ À§Ä¡¸¦ ¹Ù²Ù´Â °ÍÀ̹ǷΠ°ø¹éÀº ´ë»ó¿¡ Æ÷ÇÔµÇÁö ¾Ê´Â´Ù. ±×·¡¼­ ¹®´Ü óÀ½ÀÇ °ø¹éÀº ¹«Á¶°Ç °Ç³Ê¶Ù°í ÀÌ À§Ä¡¸¦ s2¿¡ ±â¾ïÇØ µÐ´Ù. ºñ°ø¹é ¹®ÀÚ¿¡¼­ºÎÅÍ ½ÃÀÛÇØ¼­ °³Çà Äڵ带 ¸¸³¯ ¶§±îÁöÀÇ ¹®´Ü ÆøÀ» °è»êÇÑ´Ù. type¿¡ µû¶ó ¹®ÀÚ¼ö ¶Ç´Â Çȼ¿¼ö·Î ÆøÀ» ´©ÀûÇÏ¸é µÈ´Ù. ÀÌ ÆøÀÌ ±âÁØÆøº¸´Ù ´õ ±æ¸é ÀÌ ¹®´ÜÀº Á¤·Ä ´ë»óÀÌ ¾Æ´Ï¹Ç·Î ´Ü¼ø º¹»çÇÑ´Ù. ±âÁØÆøº¸´Ù ªÀ¸¸é ¾ÕÂÊ¿¡ °ø¹éÀ» ³Ö°í s2, Áï ºñ°ø¹é ¹®ÀÚµéÀ» º¹»çÇÑ´Ù.

¿ÞÂÊ Á¤·ÄÀÌ¸é º°´Ù¸¥ ó¸®ÇÒ ÇÊ¿ä ¾øÀÌ º¹»ç¸¸ ÇÑ´Ù. ÀÌ·¸°Ô ÇÏ´õ¶óµµ s2¿¡´Â ÀÌ¹Ì °ø¹éÀ» °Ç³Ê¶Ú Æ÷ÀÎÅͰ¡ ´ëÀԵǾî ÀÖÀ¸¹Ç·Î ¿ÞÂÊ Á¤·ÄµÈ´Ù. ¿À¸¥ÂÊ Á¤·ÄÀÌ¸é ±âÁØÆø¿¡¼­ ºÎÁ·ÇÑ Æø¸¸Å­ °ø¹éÀ» »ðÀÔÇÏ°í ¹®ÀÚ¿­À» º¹»çÇÑ´Ù. ¿¹¸¦ µé¾î ±âÁØÆøÀÌ 80¹®ÀÚÀε¥ ÇöÀç ¹®´ÜÀÌ 10ÀÚ¹Û¿¡ ¾ÈµÈ´Ù¸é ¾Õ¿¡ 70ÀÚÀÇ °ø¹éÀ» ¸ÕÀú »ðÀÔÇÏ°í ¹®´Ü ³»¿ëÀ» µÚ¿¡ µ¡ºÙÀÌ¸é µÈ´Ù. Çȼ¿ ±âÁØÀÏ ¶§µµ ÇÊ¿äÇÑ °ø¹é ¼ö¸¦ °è»êÇÏ´Â ¹æ¹ý¸¸ ´Ù¸¦ »Ó ³í¸®´Â µ¿ÀÏÇÏ´Ù.

Áß¾Ó Á¤·ÄÀÏ °æ¿ì ÇÊ¿äÇÑ ¿©ºÐ °ø¹éÀÇ Àý¹Ý¸¸Å­¸¸ »ðÀÔÇÏ¸é µÈ´Ù. À§ ¿¹ÀÇ °æ¿ì 70°³ÀÇ °ø¹é Áß ±× Àý¹ÝÀÎ 35°³¸¸ »ðÀÔÇϸé Á¤È®ÇÏ°Ô ÀÌ ¹®´ÜÀº Áß¾ÓÀ¸·Î Á¤·ÄµÈ´Ù.

¹Ù.Å©±â¼ø Á¤·Ä

¹®´Ü Å©±â¼ø Á¤·Ä ±â´ÉÀº ¹®´ÜÀÇ ¹®ÀÚµéÀ» ±âÁØÀ¸·Î Á¤·Ä(Sort)ÇÑ´Ù. ¿À¸§Â÷¼ø/³»¸²Â÷¼øÀ» ¼±ÅÃÇÒ ¼ö ÀÖÀ¸¸ç Á¤·ÄÀÇ °¡Àå ÀϹÝÀûÀÎ ¿É¼ÇÀÎ ´ë¼Ò¹®ÀÚ ±¸ºÐ ¿É¼ÇÀÌ ÀÖ´Ù. ÀÌ ¿Ü¿¡ Áߺ¹µÇ´Â ÇàÀ» Á¦°ÅÇÏ´Â ±â´ÉÀÌ Àִµ¥ Á¤·Ä °á°ú ¿ÏÀüÈ÷ ÀÏÄ¡ÇÏ´Â ¹®´ÜÀ» Á¦°ÅÇÑ´Ù. Á¤·ÄÀü¿¡´Â Áߺ¹ÇàÀÌ µû·Î ¶³¾îÁ® ÀÖÁö¸¸ Á¤·ÄÇÏ¸é ¾Æ·¡ À§·Î ÀÎÁ¢ÇÏ°Ô µÇ¹Ç·Î ÇÊ¿ä¾øÀ» ¼öµµ Àִµ¥ ƯÈ÷ Áß°£ Áß°£ÀÇ ºóÁÙÀÌ ¾ÕÂÊ¿¡ ¿©·¯ °³ ¸ðÀÏ ¼ö ÀÖÀ¸¹Ç·Î Á¦°ÅÇÒ Çʿ䰡 ÀÖ´Ù. ´ëÈ­»óÀÚ ÇÁ·Î½ÃÀú´Â °£´ÜÇÏ´Ù.

 

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

{

     RECT prt;

 

     switch(iMessage) {

     case WM_INITDIALOG:

          ParaOption.startpage=3;

          GetWindowRect(hParaTab,&prt);

          TabCtrl_AdjustRect(hParaTab,FALSE,&prt);

          ScreenToClient(GetParent(hDlg),(LPPOINT)&prt);

          SetWindowPos(hDlg,HWND_TOP,prt.left,prt.top,0,0,SWP_NOSIZE);

 

          CheckRadioButton(hDlg,IDC_P4_RA1,IDC_P4_RA2,IDC_P4_RA1+ParaOption.p4_Type);

          CheckDlgButton(hDlg,IDC_P4_CHK1,ParaOption.p4_Case);

          CheckDlgButton(hDlg,IDC_P4_CHK2,ParaOption.p4_Unique);

          return TRUE;

     }

     return FALSE;

}

 

¿É¼Ç°ªÀ» Àоî¿Í ÄÁÆ®·Ñ¿¡ ´ëÀÔÇÏ´Â µ¿ÀÛ¸¸ ó¸®ÇÑ´Ù. ÄÁÆ®·Ñ°£ÀÇ Á¾¼Ó °ü°è°¡ ¾ø°í ¿É¼ÇÀÌ ¹Ù²ð ¶§ Áï½Ã ¾î¶² µ¿ÀÛÀ» ÇÒ Çʿ䰡 ¾ø±â ¶§¹®¿¡ WM_COMMAND¿¡¼­ Ưº°È÷ ÇÒ ÀÏÀÌ ¾ø´Ù. ¹®´Ü Á¤·ÄÀº ´ÙÀ½ ÇÔ¼ö°¡ ó¸®ÇÑ´Ù. ±æÀÌ¿¡ ºñÇØ ±²ÀåÈ÷ º¹ÀâÇÏ´Ù.

 

// ¹®´Ü Å©±â¼ø Á¤·Ä

void CApiEditText::SortPara(int asc, BOOL Case, BOOL Unique)

{

     BEFOREARRANGEPARA

     struct stPara {

          TCHAR *ptr;           // ¹®´Ü ½ÃÀÛ À§Ä¡

          int len;              // ¹®´ÜÀÇ ±æÀÌ

          int order;           // ¼ø¼­°ª

     };

     stPara *arPara;

     int nPara,i,j;

     TCHAR *p;

     int result,order;

     int same;

 

     // src¿¡´Â ³Î ¹®ÀÚºÐ, dest´Â ¸¶Áö¸· °³Çà ÄÚµåºÐÀ» Ãß°¡ÇÒ´çÇÑ´Ù.

     s=src=(TCHAR *)realloc(src,ed-st+1);

     src[ed-st]=0;

     d=dest=(TCHAR *)realloc(dest,ed-st+2);

 

     // ¹®´Ü °³¼ö¸¦ ±¸Çϰí arPara¸¦ ÇÒ´çÇÑ´Ù.

     for (p=src,nPara=1;*p;p++) {

          if (*p=='\r' && *(p+1)=='\n') {

              nPara++;

              *p++=0;

              *p=0;

          }

     }

     arPara=(stPara *)malloc(nPara*sizeof(stPara));

 

     // °¢ ¹®´ÜÀÇ ½ÃÀÛ À§Ä¡¿Í ±æÀ̸¦ ±¸ÇÑ´Ù.

     for (i=0,p=src;i<nPara;i++) {

          arPara[i].ptr=p;

          arPara[i].len=lstrlen(p);

          p+=(arPara[i].len+2);

     }

 

     // °¢ ¹®´ÜÀÇ ¼ø¼­¸¦ ±¸ÇÑ´Ù.

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

          order=0;

          for (j=0;j<nPara;j++) {

              if (i == j) continue;

              if (Case) {

                   result=strcmp(arPara[i].ptr,arPara[j].ptr);

              } else {

                   result=strcmpi(arPara[i].ptr,arPara[j].ptr);

              }

              if (asc) {

                   if (result < 0) order++;

              } else {

                   if (result > 0) order++;

              }

          }

          arPara[i].order=order;

     }

 

     // ¼ø¼­´ë·Î dest·Î º¹»çÇÑ´Ù. °°Àº ¼øÀ§°¡ ÀÖÀ» ¼ö ÀÖ°í ºüÁö´Â ¼øÀ§µµ ÀÖ´Ù.

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

          for (j=0,same=0;j<nPara;j++) {

              if (arPara[j].order == i) {

                   same++;

                   // °°Àº ¼øÀ§°¡ µÑ ÀÌ»óÀ̰í Áߺ¹ Á¦°Å ¿É¼ÇÀÌ ¼³Á¤µÇ¾î ÀÖ´Â °æ¿ì

                   if (same > 1 && Unique) {

                        nDiff+=(arPara[j].len+2);

                   } else {

                        memcpy(d,arPara[j].ptr,arPara[j].len);

                        d+=arPara[j].len;

                        *d++='\r';

                        *d++='\n';

                   }

              }

          }

     }

     // ¸¶Áö¸·ÀÇ ºÒÇÊ¿äÇÑ °³Çà ÄÚµå Á¦°Å

     d-=2;

 

     free(arPara);

     ENDARRANGEPARA(31)

}

 

BEFOREARRANGEPARA¿¡¼­ ¿øº» ¹®ÀÚ¿­À» src¿¡ ±¸Çϴµ¥ ³Ê¹« Á¤È®ÇÑ ±æÀ̸¸Å­¸¸ Á¶»çÇϱ⠶§¹®¿¡ srcÀÇ Á¦ÀÏ ³¡ ¹®´Ü °³Çà ÄÚµå´Â Ç×»ó Á¦¿ÜµÇ¸ç ³Î·Î ³¡³ªÁöµµ ¾Ê´Â´Ù. ±×·¡¼­ ÀÛ¾÷ÀÇ ÆíÀÇ»ó src¸¦ 1¹ÙÀÌÆ® ´õ Å©°Ô ÀçÇÒ´çÇϰí Á¦ÀÏ ³¡¿¡ ³Î Á¾·á ¹®ÀÚ¸¦ µÎ¾ú´Ù. ¸¶Áö¸· ¹®´Üµµ NULL·Î ³¡³ª°Ô ÇÏ¿© µ¿ÁúÀÇ ¹®´ÜÀ» ¸¸µé¾î ³õÀ¸¸é ¹®´ÜÀ» ºñ±³, ±³È¯ÇÒ ¶§ º°µµÀÇ ¿¹¿Ü 󸮸¦ ÇÏÁö ¾Ê¾Æµµ µÈ´Ù. dest´Â ¿øº» src¿Í µ¿ÀÏÇÑ ±æÀÌ·Î ÇÒ´çµÇ´Âµ¥ Àӽà °³Çà Äڵ带 À§ÇØ 2¹ÙÀÌÆ®°¡ ´õ ÇÊ¿äÇϹǷΠÃß°¡ ÀçÇÒ´çÇØ µÎ¾ú´Ù.

Á¤·Ä ¾Ë°í¸®ÁòÀº ¸¹ÀÌ °³¹ßµÇ¾î ÀÖÁö¸¸ ÀÌ °æ¿ì¿¡´Â ±âÁ¸ÀÇ Á¤·Ä Äڵ带 Àû¿ëÇÏ±â ¾î·Æ´Ù. ¿Ö³ÄÇϸé Á¤·Ä ´ë»óÀÌ ºÐ¸®µÈ ±â¾ïÀå¼Ò¿¡ µû·Î ÀúÀåµÈ °ÍÀÌ ¾Æ´Ï¶ó Å« ¹öÆÛ Çϳª¿¡ ¿Ë±âÁ¾±â ¸ð¿© ÀÖ°í °³Çà Äڵ峪 ³Î ¹®ÀÚ¸¦ ¸¸³ª¾ß ·¹ÄÚµåÀÇ ³¡ÀÌ¸ç ±æÀ̵µ °¡º¯À̱⠶§¹®ÀÌ´Ù. ÀϹÝÀûÀÎ Á¤·Ä ¾Ë°í¸®ÁòÀº ºñ±³, ±³È¯À» ¹Ýº¹Çϴµ¥ ¹®´Ü Á¤·ÄÀº ·¹Äڵ帶´Ù ±æÀ̰¡ ´Þ¶ó ºñ±³ Áï½Ã ±³È¯Çϱ⵵ ¾î·Æ´Ù. ¶ÇÇÑ ÀúÀåµÈ °ø°£ÀÌ °°±â ¶§¹®¿¡ ´Ù¸¥ ·¹Äڵ带 ÆÄ±«ÇÏÁö ¾Ê°í ±³È¯ÇÏ´Â °Íµµ ºÒ°¡´ÉÇÏ´Ù.

±×·¡¼­ ÀÌ ÇÔ¼ö´Â °£´ÜÇÏÁö¸¸ ³ª¸§´ë·ÎÀÇ Á¤·Ä ¾Ë°í¸®ÁòÀ» Á÷Á¢ ±¸ÇöÇÑ´Ù. ¸ÕÀú Á¤·Ä ´ë»óÀÎ ·¹ÄÚµåÀÇ °³¼ö¸¦ ±¸ÇÑ´Ù. ¹®´Ü °³¼ö´Â °³Çà Äڵ带 ¸¸³¯ ¶§¸¶´Ù Áõ°¡Çϴµ¥ À̶§ °³Çà ÄÚµå´Â ¸ðµÎ NULL ¹®ÀÚ·Î º¯°æÇÑ´Ù. ±×·¡¾ß °¢ ¹®´Ü¿¡ ´ëÇØ strcmp µîÀÇ ¹®ÀÚ¿­ ºñ±³ ÇÔ¼ö¸¦ ¹Ù·Î Àû¿ëÇÒ ¼ö ÀÖ´Ù. ±×¸®°í arPara ±¸Á¶Ã¼¿¡ °¢ ·¹ÄÚµåÀÇ ½ÃÀÛ À§Ä¡¿Í ±æÀÌ Á¤º¸¸¦ ¼öÁýÇÑ´Ù. src´Â ¹®´Üº°·Î ²÷¾îÁø ³Î ±¸ºÐ ¹®ÀÚ¿­ÀÌ µÇ¸ç arPara ±¸Á¶Ã¼´Â ÀÌ ¹®´ÜµéÀÇ Á¤º¸¸¦ °¡Áø´Ù. ÀÌÈÄ Á¤·ÄÀº arPara ±¸Á¶Ã¼¸¦ ´ë»óÀ¸·Î ÇÑ´Ù.

¹®´Ü³¢¸® Á÷Á¢ ±³È¯ÀÌ ¾î·Á¿ì¹Ç·Î ¹®´ÜÀÇ ¼ø¼­¸¦ ±¸ÇØ arParaÀÇ order ¸â¹ö¿¡ Á¶»çÇÑ´Ù. ºñ±³ ¹æ½ÄÀº Case¿Í asc Àμö¿¡ µû¶ó ´Þ¶óÁø´Ù. ´ë¼Ò¹®ÀÚ¸¦ ±¸ºÐÇϸé strcmp ÇÔ¼ö¸¦ ¾²°í ¾Æ´Ï¸é strcmpi ÇÔ¼ö¸¦ »ç¿ëÇÏ¸ç ¿À¸§Â÷¼øÀ̸é ÀÛÀº ¹®´ÜÀ» ¾Õ¿¡ ³õ°í ³»¸²Â÷¼øÀ̸é Å« ¹®´ÜÀ» ¾Õ¿¡ ³õ´Â´Ù. ºñ±³°¡ ³¡³ª¸é °¢ ¹®´ÜÀº 0~nPara-1±îÁöÀÇ ¼ø¼­°ªÀ» °¡Áö¸ç ÀÌ ¼ø¼­´ë·Î dest·Î º¹»çÇÏ¸é µÈ´Ù. À̶§ order°¡ ¹Ýµå½Ã ¿¬¼ÓÀûÀ̶ó°í º¸ÀåÇÒ ¼ö ¾ø´Âµ¥ µ¿ÀÏ ¼øÀ§°¡ Á¸ÀçÇÒ ¼ö ÀÖÀ¸¸ç µ¿ÀÏ ¼øÀ§ ´ÙÀ½Àº Á¸ÀçÇÏÁö ¾Ê´Â´Ù. ¿¹¸¦ µé¾î 4°³ÀÇ ¹®´ÜÀ» ºñ±³Çϸé 0, 1, 2, 3 ¼øÀÇ ¼ø¼­°¡ ³ª¿À´Â °ÍÀÌ º¸ÆíÀûÀÌÁö¸¸ Áß°£ÀÇ µÎ ¹®´ÜÀÌ °°´Ù¸é 0, 1, 1, 3ÀÇ ¼ø¼­°¡ µÉ ¼öµµ ÀÖ´Ù. ±×·¡¼­ Áߺ¹µÈ ¼øÀ§µµ ´Ù º¹»çÇØ¾ß ÇÏ¸ç °Ô´Ù°¡ Unique ¿É¼ÇÀÌ ¼±ÅõǾî ÀÖÀ¸¸é ÇϳªÀÇ ¹®´Ü¸¸ º¹»çÇØ¾ß ÇÑ´Ù.

º¹»ç ·çÇÁ ³»ºÎ°¡ ´Ù¼Ò º¹ÀâÇѵ¥ 0ºÎÅÍ nPara-1±îÁö ¹Ýº¹µÇ´Â i ·çÇÁ´Â ¼øÀ§¿¡ ´ëÇÑ ·çÇÁÀÌ´Ù. ¿©±â¼­ nPara-1Àº ¹®´ÜÀÇ °³¼ö¸¦ ÀǹÌÇÏ´Â °ÍÀÌ ¾Æ´Ï¶ó °¡´ÉÇÑ ÃÖ´ë ¼ø¼­°ªÀ» ÀǹÌÇÑ´Ù. j·çÇÁ´Â °¢ ¼ø¼­°ª¿¡ ´ëÇØ ¸ðµç ¹®´ÜÀ» °Ë»öÇÏ¿© ÀÌ ¼ø¼­¿¡ ÇØ´çÇÏ´Â ¹®´ÜÀ» dest·Î º¹»çÇÑ´Ù. À̶§ °¢ ¹®´Ü ³¡¿¡´Â ¹«Á¶°Ç °³Çà Äڵ带 ºÙÀδÙ. ¿øº»ÀÇ ¸¶Áö¸· ¹®´Ü¿¡´Â °³Çà Äڵ尡 ¾ø´Âµ¥ Á¤·Ä °á°ú´Â °³Çà Äڵ带 ºÙ¿´À¸¹Ç·Î º¹»ç ÈÄ d-=2·Î ¸¶Áö¸· °³Çà ÄÚµå´Â Á¦°ÅÇØ¾ß ÇÑ´Ù.

Áï ¸¶Áö¸· ¹®´Ü¿¡´Â ¿ø·¡ ¾ø´ø °³Çà ÄÚµå´Â ÀÏ´Ü ºÙ¿´´Ù°¡ Á¤¸®ÇÏ´Â ¼ÀÀε¥ À̸¦ À§ÇØ ¼±µÎ¿¡¼­ dest¸¦ 2¹ÙÀÌÆ® ´õ Å©°Ô ÀçÇÒ´çÇß´Ù. ÀÌ·¸°Ô ÇÒ ¹Ù¿¡¾ß ¾Æ¿¹ ¸¶Áö¸· ¹®´Ü¿¡¸¸ °³Çà Äڵ带 ºÙÀÌÁö ¾Ê´Â ¹æ¹ýÀ» ¾²´Â °ÍÀÌ ´õ °£´ÜÇÒ °Íó·³ »ý°¢µÈ´Ù. ±×·¯³ª Á÷Á¢ ±¸ÇöÇØ º» °á°ú ´ë´ÜÈ÷ °ñÄ¡¾ÆÇ °æ¿ì°¡ ¸¹¾Ò´Ù. ¿ì¼± ¸¶Áö¸· ¹®´ÜÀÎÁö¸¦ ÆÇ´ÜÇÏ´Â °ÍÀÌ ¾î·Á¿îµ¥ i°¡ nPara-1À̶ó°í ÇØ¼­ À̰ÍÀÌ ¸¶Áö¸· ¹®´ÜÀ̶ó°í º¼ ¼ö´Â ¾ø´Ù. ¿Ö³ÄÇÏ¸é µ¿¼øÀ§¿¡ ÀÇÇØ ¸¶Áö¸· ¼øÀ§°¡ Á¸ÀçÇÏÁö ¾ÊÀ» ¼ö Àִµ¥ ¿¹¸¦ µé¾î 4°³ÀÇ ¹®´Ü ¼ø¼­°ªÀÌ 0, 1, 2, 2 À̸é 3¹ø ¼øÀ§ÀÇ ¹®´ÜÀÌ Á¸ÀçÇÏÁö ¾Ê´Â´Ù. ÀÌ °æ¿ì ¼øÀ§ 2¹øÀ» µÎ ¹ø ¾²µÇ µÑ ´Ù ¸¶Áö¸· ¼øÀ§°¡ ¾Æ´Ï¹Ç·Î °³Çà Äڵ带 ´Ù ºÙÀÌ°Ô µÇ°í ±×·¯¸é destÀÇ ¹üÀ§¸¦ ¹þ¾î³ª¹Ç·Î ´Ù¿îµÈ´Ù.

¸¶Áö¸· ¼øÀ§¸¦ ²À ¾Ë¾Æ ³»·Á¸é º¹»çµÇ´Â ¹®´ÜÀÇ °³¼ö¸¦ º°µµÀÇ º¯¼ö¿¡ Ä«¿îÆÃÇÏ´Â ¹æ¹ýÀ» ¾µ ¼öµµ ÀÖ´Ù. ±×·¯³ª ÀÌ ¹æ¹ýµµ Unique ¿É¼ÇÀÌ ¼±ÅõǾî ÀÖ´Â °æ¿ì ¸¶Áö¸· º¹»çµÇ´Â ¹®´ÜÀÎÁö¸¦ ¹Ì¸® ¾Ë ¼ö ¾ø´Â ¹®Á¦°¡ ÀÖ´Ù. ¸»·Î ¼³¸íÇϱâ´Â ±²ÀåÈ÷ ¾î·Á¿îµ¥ ´ÙÀ½ÀÇ ÂªÀº ¿¹Á¦ ¹®¼­¸¦ º¸ÀÚ.

 

bbb\r\n

aaa\r\n

bbb

 

ÀÌ ¹®¼­¸¦ Á¤·ÄÇϸé ÀÏ´Ü aaa\r\nÀÌ dest·Î º¹»çµÈ´Ù. ´ÙÀ½ bbb ¹®´ÜÀº ¾ÆÁ÷ ³¡ÀÌ ¾Æ´Ï¹Ç·Î bbb\r\nÀ¸·Î º¹»çµÈ´Ù. ¸¶Áö¸· bbb´Â Áߺ¹µÈ ÇàÀ̹ǷΠÁ¦°ÅµÇ´Âµ¥ ÀÌ·¸°Ô µÇ¸é µÎ ¹øÂ° ºÙÀÎ \r\nÀ» ´Ù½Ã Á¦°ÅÇØ¾ß ÇÏ´Â ¹®Á¦°¡ ÀÖ´Ù. ÀÌ ¹®Á¦µµ ¾î¶µç Ç® ¼ö´Â ÀÖÁö¸¸ Áߺ¹µÈ ÇàÀÌ ºó ÁÙÀÌ°í ¿ª¼ø Á¤·Ä ¿É¼Ç¿¡ ÀÇÇØ ºóÁÙÀÌ ¸¶Áö¸·¿¡ ¿Ã °æ¿ì Ãß°¡ ¹®Á¦°¡ ¹ß»ýÇÑ´Ù. ¹®¼­ÀÇ ¸ð¾ç°ú ¿É¼Ç¿¡ µû¶ó ¸¶Áö¸· ÁÙÀ» ó¸®ÇϱⰡ ¹«Ã´ ±î´Ù·Ó±â ¶§¹®¿¡ ¹«Á¶°Ç °³Çà Äڵ带 ºÙ¿© ³õ°í ¸¶Áö¸·ÀÇ °³Çà Äڵ带 »èÁ¦ÇÏ´Â ¹æ¹ýÀ» »ç¿ëÇߴµ¥ ÀÌ ¹æ¹ýÀº °¢ ¹®´ÜÀ» º¹»çÇÏ´Â ¹æ¹ýÀÌ Á¤±ÔÈ­µÇ¾î ÀÖ¾î ¾Æ¹«·± ¹®Á¦°¡ ¾ø´Ù. ¾î·°Å³ª ÀÌ·± ¹®Á¦´Â Á÷Á¢ ¹ö±×¸¦ ¸ñ°ÝÇÏÁö ¾Ê´Â ÇÑ ¸»·Î ¼³¸íÇϱâ´Â Âü ¾î·Æ´Ù.

sameÀº µ¿ÀÏÇÑ ¼øÀ§ÀÇ ¹®´Ü °³¼öÀε¥ µÑ ÀÌ»óÀÇ °°Àº ¼øÀ§ ¹®´ÜÀ» º¹»çÇÒ ¶§ Unique ¿É¼Ç¿¡ µû¶ó ÀÌ ¹®´ÜÀ» º¹»ç ´ë»ó¿¡¼­ Á¦¿ÜÇϱâ À§ÇØ »ç¿ëÇÑ´Ù. ¹®´ÜÀ» Á¦¿ÜÇÒ ¶§´Â º¹»çÇÏÁö ¾Ê°í nDiff¸¦ ¹®´Ü ±æÀÌ + °³Çà ÄÚµå ±æÀ̸¸Å­ Áõ°¡ÇÏ¿© ó¸® ÈÄ ¼±Åà ¿µ¿ªÀÌ À̸¸Å­ ¾ÕÂÊÀ¸·Î À̵¿ÇÏ°Ô ÇÑ´Ù. ¹°·Ð ÀÌ Ã³¸®´Â Unique ¿É¼ÇÀÌ ¼±ÅõǾî ÀÖÁö ¾ÊÀ¸¸é ÀüÇô ÇÒ Çʿ䰡 ¾ø´Ù. ¿©±â±îÁö ÀÛ¾÷ÇÑ ÈÄ arPara¸¦ ÇØÁ¦ÇÏ°í ³ª¸ÓÁö µÞ󸮴 ENDARRANGEPARA ÇÔ¼ö¿¡°Ô ³Ñ±ä´Ù. ¿øº»Àº Áö¿ì°í dest¸¦ »ðÀÔÇÒ °ÍÀÌ´Ù. ¼¼ ¹®´ÜÀ¸·Î ±¸¼ºµÈ ¹®¼­ÀÇ Á¤·Ä °úÁ¤À» ±×¸²À¸·Î ±×·Áº¸¸é ´ÙÀ½°ú °°´Ù.

srcÀÇ °³Çà Äڵ带 ¸ðµÎ 0À¸·Î ¹Ù²Ù°í Á¦ÀÏ ³¡¿¡ °³Çà Äڵ带 Ãß°¡·Î ºÙ¿© ¹®´Ü°£ ºñ±³¸¦ ½±°Ô ¸¸µç´Ù. ±×¸®°í srcÀÇ Á¤º¸¸¦ ¹ÙÅÁÀ¸·Î °¢ ¹®´ÜÀÇ À§Ä¡, ±æÀÌ, ¼ø¼­°ªÀ» arPara ±¸Á¶Ã¼ ¹è¿­¿¡ ÀÛ¼ºÇϰí ÀÌ Á¤º¸´ë·Î srcÀÇ ¹®´ÜµéÀ» dest·Î º¹»çÇϸé Á¤·ÄÀÌ ¿Ï·áµÈ´Ù. ¿©±â¿¡ ¼¼ °³ÀÇ ¿É¼Ç°ªÀ» Àû¿ëÇÏ´Ù º¸´Ï ¼Ò½º°¡ º¹ÀâÇÏ°í ¾î·Æ´Ù.

¿©±â¿¡ ¾à°£ÀÇ ±â´ÉÀ» ´õÇÑ´Ù¸é ¾ÕÂÊ °ø¹éÀ» Á¦°ÅÇѴٰųª Á¤·Ä ±âÁØ Ä­À» ÁöÁ¤ÇÏ¿© ¼±µÎ°¡ ¾Æ´Ñ Áß°£ÂëÀÇ ¹®ÀÚ¿­À» ±âÁØÀ¸·Î Á¤·ÄÇÒ ¼öµµ Àִµ¥ º¹Àâµµ°¡ ³Ê¹« Ä¿Áú °Í °°¾Æ ±âº» ±â´É Á¤µµ¸¸ ±¸ÇöÇß´Ù. ¶ÇÇÑ Á¤·Ä ¾Ë°í¸®ÁòÀÌ ³Ê¹« ´Ü¼øÇÏ´Ù º¸´Ï ºñ±³ ȸ¼ö°¡ ±²ÀåÈ÷ ¸¹¾Æ ¼Óµµ°¡ Á¶±Ý ´À¸° °Íµµ ºÒ¸¸Àε¥ ¹®´Ü °³¼öÀÇ Á¦°ö¸¸Å­ ºñ±³¸¦ ¹Ýº¹ÇØ¾ß ÇÑ´Ù. ¼Óµµ¸¦ °³¼±ÇÏ·Á¸é Á¶±Ý ´õ Ä¡¹ÐÇÑ Á¤·Ä ¾Ë°í¸®ÁòÀÌ ÇÊ¿äÇÏ´Ù.

»ç.ºóÁÙ Á¶Á¤

ºóÁÙ Á¶Á¤Àº ¹®´Ü »çÀÌÀÇ ºóÁÙÀ» °­Á¦·Î ³Ö°Å³ª »©´Â ±â´ÉÀÌ´Ù. ¸Å ¹®´Ü¸¶´Ù ºóÁÙÀ» Çϳª¾¿ ³Ö°í ½Í´Ù°Å³ª ¸ðµç ºóÁÙÀ» »èÁ¦ÇÒ ¶§ ÀÌ ±â´ÉÀ» »ç¿ëÇÑ´Ù. Á» ´õ À¯¿¬¼ºÀ» ÁÖ±â À§ÇØ ÃÖ¼Ò, ÃÖ´ë ¿É¼Çµµ °°ÀÌ ±¸ÇöÇß´Ù.

 

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

{

     RECT prt;

 

     switch(iMessage) {

     case WM_INITDIALOG:

          ParaOption.startpage=4;

          GetWindowRect(hParaTab,&prt);

          TabCtrl_AdjustRect(hParaTab,FALSE,&prt);

          ScreenToClient(GetParent(hDlg),(LPPOINT)&prt);

          SetWindowPos(hDlg,HWND_TOP,prt.left,prt.top,0,0,SWP_NOSIZE);

 

          CheckRadioButton(hDlg,IDC_P5_RA1,IDC_P5_RA3,IDC_P5_RA1+ParaOption.p5_Type);

          SetDlgItemInt(hDlg,IDC_P5_ED1,ParaOption.p5_Num,FALSE);

          SendDlgItemMessage(hDlg,IDC_P5_SPIN1,UDM_SETRANGE,0,MAKELPARAM(16,0));

          return TRUE;

     }

     return FALSE;

}

 

´ëÈ­»óÀÚ ÇÁ·Î½ÃÀú´Â ¹«Ã´ °£´ÜÇѵ¥ ¿É¼Ç°ª¸¸ ÄÁÆ®·Ñ¿¡ ´ëÀÔÇÏ¸é µÈ´Ù. ¿É¼Ç°£ÀÇ Á¾¼Ó °ü°è°¡ ¾ø±â ¶§¹®¿¡ WM_COMMAND´Â ó¸®ÇÏÁö ¾Ê¾Æµµ µÈ´Ù.

 

void CApiEditText::ArrangeEmptyPara(int type, int num)

{

     BEFOREARRANGEPARA

     int nEmpty,i;

 

     for (;;) {

          ReallocBuf(dest,d,1024,2048);

          // °³Çà ÄÚµå. ÀÏ´Ü º¹»ç ÈÄ ºóÁÙ ¼ö¸¦ ¸ÂÃã

          if (s[0]=='\r' && s+1 < src+ed-st && s[1]=='\n') {

              *d++=*s++;

              *d++=*s++;

              // ºó ÁÙ ¼ö °è»ê

              for (nEmpty=0;;) {

                   while (AeIsWhiteSpace(*s)) {

                        s++;

                        nDiff++;

                   }

                   if (s[0]=='\r' && s+1 < src+ed-st && s[1]=='\n') {

                        nEmpty++;

                        s+=2;

                        nDiff+=2;

                   } else {

                        break;

                   }

              }

             

              // ºóÁÙ¼ö °è»ê

              switch (type) {

              case 0:

                   i=max(nEmpty,num);

                   break;

              case 1:

                   i=num;

                   break;

              case 2:

                   i=min(nEmpty,num);

                   break;

              }

 

              // °è»êµÈ ºóÁÙ ¼ö »ðÀÔ

              for (;i>0;i--) {

                   *d++='\r';

                   *d++='\n';

                   nDiff-=2;

              }

          } else {

              if (IsDBCSLeadByte(*s)) {

                   *d++=*s++;

              }

              *d++=*s++;

          }

          if (s==src+ed-st) {

              break;

          }

     }

 

     ENDARRANGEPARA(32)

}

 

°³Çà Äڵ尡 ¾Æ´Ï¸é ´Ü¼ø º¹»çÇÏ°í °³Çà Äڵ带 ¸¸³ª¸é ÀÏ´Ü ¸ÕÀú º¹»çÇÑ´Ù. ±×¸®°í À̾îÁö´Â °³Çà Äڵ尡 ¸î °³³ª ´õ ÀÖ´ÂÁö º»´Ù. À̶§ °ø¹éÀ̳ª ÅÇÀ¸·Î¸¸ ±¸¼ºµÈ ¹®´Üµµ ½ÇÁ¦ ³»¿ëÀÌ ¾øÀ¸¹Ç·Î ºó ÁÙ·Î °£ÁÖÇÑ´Ù.

type¿¡ µû¶ó ºóÁÙÀÇ °³¼ö¸¦ °­Á¦·Î ¸ÂÃá´Ù. °íÁ¤ÀÎ °æ¿ì num¿¡ ¸ÂÃß°í ÃÖ¼ÒÀÎ °æ¿ì numÀ̳ª Á¶»çµÈ ºóÁÙ °³¼ö Áß Å« °ªÀ» ÃëÇÑ´Ù. Áï, numº¸´Ù ´õ ÀÛÀº ºóÁÙÀÌ ÀÖÀ¸¸é ÃÖ¼ÒÇÑ num °³ÀÇ ºó ÁÙÀ» ³¢¿ö ³Ö´Â °ÍÀÌ´Ù. ÃÖ´ëÀÎ °æ¿ì ´õ ÀÛÀº °ªÀ» ÃëÇÏ¸é µÈ´Ù. ÀÌ·¸°Ô Á¶Á¤µÈ ºó ÁÙ °³¼ö¸¸Å­ °³Çà Äڵ带 »ðÀÔÇØ ³ÖÀ¸¸é µÈ´Ù.