2.ºÐÇÒ °ü¸®

°¡. ºÐÇÒ Å©±â Á¶Á¤

½ºÇø´ ¹Ú½º¸¦ ºä°¡ °¡Áö°í Àֱ⠶§¹®¿¡ ÃÖÃÊÀÇ ºÐÇÒ ¸í·ÉÀº ºä°¡ ¹ÞÁö¸¸ ÀÏ´Ü µÎ °³ ÀÌ»óÀÇ ºä·Î ºÐÇҵǸé À̶§ºÎÅÍ ºÐÇÒâ °ü¸®´Â ÇÁ·¹ÀÓÀÌ ÇÑ´Ù. ºÐÇÒµÈ ºä »çÀÌ¿¡ ¾à°£ÀÇ ¿©¹éÀÌ µå·¯³ª´Âµ¥ ÀÌ ¿©¹éÀº ÇÁ·¹ÀÓÀÇ ÀÛ¾÷¿µ¿ªÀÌ¸ç ½ºÇø´ ¹Ù(Split Bar)¶ó°í ºÒ¸°´Ù. ¿©±â¼­ÀÇ ¸¶¿ì½º ÀÔ·ÂÀº ºÐÇÒ ºñÀ² Á¶Á¤À̳ª ºÐÇÒ ÇØÁ¦ ¸í·ÉÀ» ¹Þ¾ÆµéÀÌ´Â À¯Àú ÀÎÅÍÆäÀ̽º°¡ µÇ´Âµ¥ ¿©±â¸¦ µå·¡±×ÇÏ¿© ºÐÇÒ ºñÀ²À» Á¶Á¤Çϰí ÀÛ¾÷¿µ¿ª »ó´ÜÀ̳ª ÇÏ´ÜÀ¸·Î µå·¡±×ÇÏ¸é ºÐÇÒÀ» ÇØÁ¦ÇÑ´Ù. ½ºÇø´ ¹Ù¿¡¼­ ºÐÇÒ ºñÀ²À» Á¶Á¤ÇÒ ¼ö ÀÖ´Ù´Â °ÍÀ» Á÷°üÀûÀ¸·Î º¸¿©ÁÖ±â À§ÇØ ÇÁ·¹ÀÓÀº ÀÌ ¿µ¿ª¿¡ ¸¶¿ì½º°¡ ÀÖÀ» ¶§ Ä¿¼­ ¸ð¾çÀ» Àû´çÈ÷ ¹Ù²ã¾ß ÇÑ´Ù. OnSetCursor¿¡ ´ÙÀ½ Äڵ带 ÀÛ¼ºÇÑ´Ù.

 

BOOL CApiEdit::OnSetCursor(HWND hWnd, HWND hwndCursor, UINT codeHitTest, UINT msg)

{

     RECT crt,rt;

     POINT pt;

     int width,height;

     BOOL bVert=FALSE,bHorz=FALSE;

 

     if ((VertRatio || HorzRatio) && codeHitTest==HTCLIENT) {

          GetClientRect(hWnd,&crt);

          GetCursorPos(&pt);

          ScreenToClient(hWnd,&pt);

 

          // ¼öÁ÷ ½ºÇø´ ¹Ù À§

          if (VertRatio) {

              height=(crt.bottom-VGAP)*VertRatio/10000;

              SetRect(&rt,crt.left,height,crt.right,height+VGAP);

              if (PtInRect(&rt,pt)) {

                   bVert=TRUE;

              }

          }

 

          // ¼öÆò ½ºÅ¬¸´ ¹Ù À§

          if (HorzRatio) {

              width=(crt.right-VGAP)*HorzRatio/10000;

              SetRect(&rt,width,crt.top,width+VGAP,crt.bottom);

              if (PtInRect(&rt,pt)) {

                   bHorz=TRUE;

              }

          }

 

          if (bHorz && bVert) {

              SetCursor(LoadCursor(NULL,IDC_SIZEALL));

              return TRUE;

          }

          if (bHorz) {

              SetCursor(LoadCursor(NULL,IDC_SIZEWE));

              return TRUE;

          }

          if (bVert) {

              SetCursor(LoadCursor(NULL,IDC_SIZENS));

              return TRUE;

          }

     }

 

     return FORWARD_WM_SETCURSOR(hWnd,hwndCursor,codeHitTest,msg,DefWindowProc);

}

 

Ä¿¼­¸¦ º¯°æÇÒ °¡Àå ¿ì¼± Á¶°ÇÀº ¾î¶² ¹æÇâÀ¸·Îµç ÀÏ´Ü ºÐÇҵǾî ÀÖ¾î¾ß Çϰí ÀÛ¾÷ ¿µ¿ª³»ºÎ¿©¾ß ÇÑ´Ù. »ç½Ç ºÐÇҵǾî ÀÖÁö ¾ÊÀ» ¶§´Â ÀÌ ÇÔ¼ö°¡ È£ÃâµÇÁö ¾Ê´Âµ¥ ¿Ö³ÄÇÏ¸é ºä°¡ ÇÁ·¹ÀÓÀÇ ÀÛ¾÷ ¿µ¿ªÀ» ¿ÏÀüÈ÷ µ¤°í Àֱ⠶§¹®¿¡ ÇÁ·¹ÀÓÀÇ ÀÛ¾÷ ¿µ¿ª¿¡ ¸¶¿ì½º°¡ À§Ä¡ÇÒ ¼ö ¾ø±â ¶§¹®ÀÌ´Ù. ºÐÇҵǾî ÀÖÁö ¾ÊÀ¸¸é DefWindowProcÀ¸·Î ÀÌ ¸Þ½ÃÁö¸¦ º¸³» µðÆúÆ® ó¸®ÇÑ´Ù.

ºÐÇҵǾî ÀÖÀ¸¸é ¹æÇâ¿¡ µû¶ó ½ºÇø´ ¹ÙÀÇ ÁÂÇ¥¿Í Ä¿¼­ÀÇ ÁÂÇ¥¸¦ ºñ±³ÇØ º¸°í bVert¿Í bHorz º¯¼ö¿¡ ±× °á°ú¸¦ Á¶»çÇÑ´Ù. ¼öÁ÷ ½ºÇø´ ¹Ù À§¿¡ ÀÖÀ¸¸é bVert°¡ TRUE°¡ µÇ¸ç ¼öÆò ½ºÇø´ ¹Ù À§¿¡ ÀÖÀ¸¸é bHorz°¡ TRUE°¡ µÈ´Ù. 4ºÐÇҵǾî ÀÖ°í ¾ç¹æÇâ ½ºÇø´ ¹ÙÀÇ ±³Á¡¿¡ Ä¿¼­°¡ ÀÖÀ» ¶§´Â µÎ °ªÀÌ ¸ðµÎ TRUE°¡ µÉ ¼öµµ ÀÖ´Ù. ÀÌ µÎ º¯¼öÀÇ °ª¿¡ µû¶ó Ä¿¼­¸¦ º¯°æÇ쵂 ½ºÅå Ä¿¼­¸¦ »ç¿ëÇÏ¿´´Ù.

½ºÇø´ ¹Ù¸¦ µå·¡±×ÇÒ ¶§ ºÐÇÒ ºñÀ²À» Á¶Á¤Çϴµ¥ ÀÌ ÀÛ¾÷Àº ¸¶¿ì½º ¹öư ´©¸§, À̵¿, ³õÀ½ ¼¼ ¸Þ½ÃÁö¿¡¼­ ó¸®ÇÑ´Ù. ÀÌ ¸Þ½ÃÁöµéµµ ÆíÁýâÀÌ ºÐÇҵǾî ÇÁ·¹ÀÓÀÇ ÀÛ¾÷ ¿µ¿ª ÀϺΰ¡ µå·¯³ª ÀÖÀ» ¶§¸¸ Àü´ÞµÇ¸ç ºÐÇÒµÇÁö ¾Ê¾ÒÀ» ¶§´Â ¹ß»ýÇÒ ¼ö ¾ø´Ù. ¼¼ ÇÔ¼öÀÇ ÄÚµå´Â ºäÀÇ ºÐÇÒ ½ÃÀÛ ÄÚµå¿Í °ÅÀÇ À¯»çÇÏ´Ù.

 

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

{

     RECT crt,vrt,hrt;

     POINT pt;

     int width,height;

 

     GetClientRect(hWnd,&crt);

     pt.x=x;

     pt.y=y;

     SplitPt=pt;

 

     height=(crt.bottom-VGAP)*VertRatio/10000;

     SetRect(&vrt,crt.left,height,crt.right,height+VGAP);

     width=(crt.right-VGAP)*HorzRatio/10000;

     SetRect(&hrt,width,crt.top,width+VGAP,crt.bottom);

 

     // ¼öÁ÷ ½ºÇø´ ¹Ù µå·¡±× ½ÃÀÛ

     if (VertRatio && PtInRect(&vrt,pt)) {

          iDrag=AESPLIT_VERT;

          OldSplitY=height;

          DrawSplitBar(AESPLIT_VERT,OldSplitY);

     }

 

     // ¼öÆò ½ºÇø´ ¹Ù µå·¡±× ½ÃÀÛ

     if (HorzRatio && PtInRect(&hrt,pt)) {

          iDrag |= AESPLIT_HORZ;

          OldSplitX=width;

          DrawSplitBar(AESPLIT_HORZ,OldSplitX);

     }

 

     if (iDrag) {

          SetCapture(hWnd);

     }

}

 

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

{

     RECT crt;

     int tx,ty;

 

     if (iDrag==0) {

          return;

     }

 

     GetClientRect(hWnd,&crt);

     // ¼öÁ÷ ½ºÇø´ ¹Ù À̵¿

     if (iDrag & AESPLIT_VERT) {

          ty=min(max(y,crt.top),crt.bottom-VGAP);

          if (OldSplitY!=ty) {

              DrawSplitBar(AESPLIT_VERT,OldSplitY);

              OldSplitY=ty;

              DrawSplitBar(AESPLIT_VERT,OldSplitY);

          }

     }

 

     // ¼öÆò ½ºÇø´ ¹Ù À̵¿

     if (iDrag & AESPLIT_HORZ) {

          tx=min(max(x,crt.left),crt.right-VGAP);

          if (OldSplitX!=tx) {

              DrawSplitBar(AESPLIT_HORZ,OldSplitX);

              OldSplitX=tx;

              DrawSplitBar(AESPLIT_HORZ,OldSplitX);

          }

     }

}

 

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

{

     RECT crt;

 

     if (iDrag==0) {

          return;

     }

 

     GetClientRect(hWnd,&crt);

     // ¼öÁ÷ ½ºÇø´ ºñÀ² Á¶Á¤

     if (iDrag & AESPLIT_VERT) {

          DrawSplitBar(AESPLIT_VERT,OldSplitY);

          if (y != SplitPt.y) {

              VertRatio=OldSplitY*10000/(crt.bottom-VGAP);

          }

     }

 

     // ¼öÆò ½ºÇø´ ºñÀ² Á¶Á¤

     if (iDrag & AESPLIT_HORZ) {

          DrawSplitBar(AESPLIT_HORZ,OldSplitX);

          if (x != SplitPt.x) {

              HorzRatio=OldSplitX*10000/(crt.right-VGAP);

          }

     }

 

     iDrag=0;

     ReleaseCapture();

     SendMessage(hWnd,WM_SIZE,0,0);

     InvalidateRect(hWnd,NULL,TRUE);

}

 

½ºÇø´ ¹Ù À§¿¡¼­ ¸¶¿ì½º ¹öưÀ» ´©¸¦ ¶§ ¾î¶² ¹æÇâÀ¸·Î ºÐÇÒ ºñÀ²À» Á¶Á¤ÇÒ °ÍÀÎÁö¸¦ iDrag º¯¼ö¿¡ ´ëÀÔÇÏ°í ºÐÇÒÀ» ½ÃÀÛÇÑ ÁÂÇ¥¸¦ ±â¾ïÇØ µÐ´Ù. µ¿½Ã¿¡ µÎ ¹æÇâÀ¸·Î µå·¡±×ÇÒ ¼ö ÀÖÀ¸¹Ç·Î iDrag´Â ¼öÆò, ¼öÁ÷°ªÀ» °°ÀÌ °¡Áú ¼öµµ ÀÖ´Ù. ÃÖÃÊ ¹ÝÀü ¸·´ë¸¦ ±×·Á ÁÖ°í Ä¿¼­´Â ĸóÇÑ´Ù. ÀÌ »óÅ¿¡¼­ ¸¶¿ì½º°¡ À̵¿µÉ ¶§ ¹ÝÀü ¸·´ë´Â Ä¿¼­¸¦ Á¹Á¹ µû¶ó ´Ù´Ï¸ç ¸¶¿ì½º ¹öưÀ» ³õÀ» ¶§ ÇöÀç Ä¿¼­ÀÇ ÁÂÇ¥°ª¿¡ µû¶ó ºÐÇÒ ºñÀ²À» ÀçÁ¶Á¤ÇÑ´Ù. ºñÀ² Á¶Á¤ÀÌ ³¡³µÀ¸¹Ç·Î iDrag´Â 0ÀÌ µÇ°í Ä¿¼­ ĸó´Â Ǭ´Ù.

ÀÌ ¼¼ ÇÔ¼ö°¡ ÇÏ´Â ÀÏÀº ½ºÇø´ ¹Ù¸¦ µå·¡±×ÇÒ ¶§ ¹ÝÀü ¸·´ë¸¦ °°ÀÌ À̵¿½Ã۰í À̵¿ °á°ú¸¦ HorzRatio, VertRatio¿¡ ´ëÀÔÇÏ´Â °Í »ÓÀÌ´Ù. ÀÌ µÎ º¯¼öÀÇ °ªÀ» º¯°æÇØ ³õ°í WM_SIZE ¸Þ½ÃÁö¸¸ º¸³»¸é Á¶Á¤µÈ ºñÀ²¿¡ µû¶ó ºä¸¦ Àç¹èÄ¡ÇÏ´Â ÀÛ¾÷Àº OnSize°¡ ´ã´çÇÑ´Ù. Á¶Á¤µÈ °á°ú´ë·Î ½ºÇø´ ¹Ù¸¦ ´Ù½Ã ±×¸®±â À§ÇØ ÇÁ·¹ÀÓÀÇ ÀÛ¾÷ ¿µ¿ªÀ» ¹«È¿È­Çß´Ù.

ºñÀ² °è»ê¿¡ Á¤¼ö ³ª´©±â¸¦ Çϱ⠶§¹®¿¡ ¸¶¿ì½º·Î ½ºÇø´ ¹Ù¸¦ ´­·¶´Ù°¡ ¹Ù·Î ¶¼±â¸¸ ÇØµµ ºÐÇÒ ºñÀ²ÀÌ Á¶Á¤µÉ ¼ö ÀÖ´Ù. ¸¶¿ì½º ¹öưÀ» ´©¸¦ ¶§ À§ÂÊ ºäÀÇ ³ôÀ̸¦ ºñÀ²·ÎºÎÅÍ °è»êÇÏ°í ¸¶¿ì½º ¹öưÀ» ³õÀ» ¶§ ¸¶¿ì½ºÀÇ »õ À§Ä¡·ÎºÎÅÍ ´Ù½Ã ºñÀ²À» °è»êÇϴµ¥ ¸¶¿ì½º°¡ ±× ÀÚ¸®¿¡ °¡¸¸ ÀÖ´õ¶óµµ ºñÀ²Àº º¯°æµÈ´Ù. ¿Ö³ÄÇϸé Á¤¼ö ³ª´°¼À¿¡ ÀÇÇÑ ¿ÀÂ÷°¡ ¹ß»ýÇϱ⠶§¹®ÀÌ´Ù. ±×·¡¼­ ÃÖÃÊ ´©¸¥ ÁÂÇ¥¸¦ SplitPt¿¡ ´ëÀÔÇØ ³õ°í ¹öưÀ» ³õÀ» ¶§ ÀÌ À§Ä¡¿Í °°Àº ÀÚ¸®ÀÌ¸é ºñÀ²À» ´Ù½Ã °è»êÇÏÁö ¾Ê°Ô Çß´Ù.

³ª. ºÐÇÒ ÇØÁ¦

ºÐÇÒÀ» ½ÃÀÛÇÏ´Â ÀåÄ¡ÀÎ ½ºÇø´ ¹Ú½º´Â ºä¿¡ ÀÖ°í ºÐÇÒ ºñÀ²À» Á¶Á¤ÇÏ´Â ½ºÇø´ ¹Ù´Â ÇÁ·¹ÀÓ¿¡ ÀÖÁö¸¸ ºÐÇÒÀ» ÇØÁ¦ÇÏ´Â ÀåÄ¡´Â º°µµ·Î Á¦°øµÇÁö ¾Ê´Â´Ù. ´ë½Å ½ºÇø´ ¹Ù·Î ºÐÇÒ ºñÀ²À» Á¶Á¤ÇÑ °á°ú ÇÑÂÊ ºäÀÇ ºñÀ²ÀÌ 5%ÀÌÇÏÀÏ ¶§ ÀÌ ºä¸¦ Á¦°ÅÇÏ´Â ±ÔÄ¢ÀÌ ÀÖÀ¸¹Ç·Î ºä¸¦ ¾ÆÁÖ ÀÛ°Ô ¸¸µé¸é ºÐÇÒÀÌ ÇØÁ¦µÈ´Ù. Áï, ½ºÇø´ ¹Ù´Â ºÐÇÒ ºñÀ²À» Á¶Á¤ÇÔ°ú µ¿½Ã¿¡ ºÐÇÒÀ» ÇØÁ¦ÇÏ´Â ÀåÄ¡À̱⵵ ÇÏ´Ù. OnLButtonUp¿¡¼­ ºÐÇÒ ºñÀ²À» Á¶Á¤ÇÑ °á°ú ÇÑÂÊ ºäÀÇ ºñÀ²ÀÌ ¾ÆÁÖ ÀÛ´Ù¸é ÀÌ ºä¸¦ Á¦°ÅÇÏ¿© ºÐÇÒÀ» ÇØÁ¦ÇÒ °ÍÀÌ´Ù. ´ÙÀ½ ÇÔ¼ö´Â ºÐÇÒ ¹æÇâ¿¡ µû¶ó ºñÀ²À» Á¡°ËÇØ º¸°í 5% ¹Ì¸¸ÀÇ ºä¸¦ Á¦°ÅÇ쵂 ºäÀÇ ¹øÈ£°¡ ¿¬¼ÓÀûÀ̵µ·Ï °ü¸®ÇÑ´Ù.

 

// ºÐÇÒÀ» Ãë¼ÒÇÑ´Ù.

void CApiEdit::UnSplitView(int SplitType)

{

     CApiEditText *OldActive;

     int i;

 

     OldActive=arView[ActiveView];

 

     if (SplitType==AESPLIT_VERT) {

          // À§ÂÊ ºñÀ²ÀÌ 5%À϶§ À§ÂÊ ºä¸¦ Á¦°ÅÇÑ´Ù.

          if (VertRatio==500) {

              if (arView[2]==NULL) {

                   DeleteView(0);

                   arView[0]=arView[1];

                   arView[1]=NULL;

              } else {

                   DeleteView(0);

                   arView[0]=arView[2];

                   arView[2]=NULL;

                   DeleteView(1);

                   arView[1]=arView[3];

                   arView[3]=NULL;

              }

              VertRatio=0;

          }

          // À§ÂÊ ºñÀ²ÀÌ 95%ÀÏ ¶§ ¾Æ·¡ÂÊ ºä¸¦ Á¦°ÅÇÑ´Ù.

          if (VertRatio==9500) {

              if (arView[2]==NULL) {

                   DeleteView(1);

              } else {

                   DeleteView(2);

                   DeleteView(3);

              }

              VertRatio=0;

          }

     } else {

          if (HorzRatio==500) {

              if (arView[2]==NULL) {

                   DeleteView(0);

                   arView[0]=arView[1];

                   arView[1]=NULL;

              } else {

                   DeleteView(0);

                   arView[0]=arView[1];

                   DeleteView(2);

                   arView[1]=arView[3];

                   arView[3]=NULL;

              }

              HorzRatio=0;

          }

          if (HorzRatio==9500) {

              if (arView[2]==NULL) {

                   DeleteView(1);

              } else {

                   DeleteView(1);

                   arView[1]=arView[2];

                   DeleteView(3);

                   arView[2]=NULL;

              }

              HorzRatio=0;

          }

     }

 

     AdjustSplitable();

 

     // ºÐÇÒ Ãë¼ÒÀüÀÇ È°¼º ºä¸¦ ã¾Æ ´Ù½Ã Ȱ¼ºÈ­ÇÑ´Ù.

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

          if (arView[i] && arView[i]==OldActive) {

              break;

          }

     }

 

     if (i != 4) {

          ActiveView=i;

     } else {

          ActiveView=0;

          SetFocus(arView[ActiveView]->hWnd);

     }

}

 

ÇÔ¼öÀÇ ±æÀ̰¡ ¹«Ã´ ±äµ¥ »óȲ¿¡ µû¸¥ ÄÉÀ̽º ºÐ±â°¡ ¸¹±â ¶§¹®ÀÌ´Ù. ºÐÇÒ ¹æÇâ¿¡ ¼öÁ÷, ¼öÆò µÎ °¡Áö°¡ ÀÖ°í ºñÀ² Á¶Á¤ °á°ú 5%, 95% µÎ °¡Áö°¡ ÀÖ°í ¶Ç ÇöÀç ºÐÇÒ »óŰ¡ 2ºÐÇÒ, 4ºÐÇÒ Áß ÇϳªÀ̹ǷΠÃÑ ÄÉÀ̽º´Â 8°¡Áö°¡ µÈ´Ù. Áï, ¼öÁ÷À¸·Î 4°¡Áö °æ¿ì°¡ ÀÖ°í ¼öÆòÀ¸·Î 4°¡Áö °æ¿ì°¡ Àִµ¥ ¹æÇâ¿¡ µû¸¥ 󸮴 À¯»çÇϹǷΠ¼öÁ÷ÀÎ °æ¿ì¸¸ ºÐ¼®ÇØ º¸ÀÚ.

¼öÁ÷À¸·Î ºÐÇÒ ºñÀ²ÀÌ Á¶Á¤µÇ¾úÀ» ¶§´Â ½ºÇø´ ¹Ù¸¦ ÇÁ·¹ÀÓÀÇ »ó´ÜÀ¸·Î µå·¡±×ÇÏ¿© VertRatio°¡ 500ÀÌ µÈ °æ¿ì¿Í ÇÏ´ÜÀ¸·Î µå·¡±×ÇÏ¿© VertRatio°¡ 9500ÀÌ µÈ °æ¿ì µÎ °¡Áö µ¿ÀÛÀ» ÇÒ ¼ö ÀÖ´Ù. »ç¿ëÀÚ°¡ ½ºÇø´ ¹Ù¸¦ ÇÁ·¹ÀÓÀÇ »ó´ÜÀ¸·Î µå·¡±×Çß´Ù´Â °ÍÀº À­ÂÊ¿¡ ÀÖ´Â ºä¸¦ Á¦°ÅÇ϶ó´Â ¸í·ÉÀ̰í ÇÏ´ÜÀ¸·Î µå·¡±×Çß´Ù´Â °ÍÀº ¾Æ·¡ÂÊ¿¡ ÀÖ´Â ºä¸¦ Á¦°ÅÇ϶ó´Â ¸í·ÉÀÌ´Ù. À̶§ ÇöÀç ºÐÇÒ »óŰ¡ 2ºÐÇÒÀ̸é ÀÛ¾ÆÁø ºä Çϳª¸¸ Á¦°ÅÇϰí 4ºÐÇÒ »óÅÂÀ̸é ÀÛ¾ÆÁø ºä 2°³¸¦ ÇѲ¨¹ø¿¡ Á¦°ÅÇØ¾ß ÇÑ´Ù. ¼öÁ÷À¸·Î ºÐÇÒ ºñÀ²À» Á¶Á¤ÇßÀ» ¶§ 4°¡Áö ÄÉÀ̽º¿¡ ´ëÇØ ÀÌ ÇÔ¼ö°¡ ¾î¶»°Ô ºä¸¦ °ü¸®ÇÏ´ÂÁö ±×¸²À¸·Î Á¤¸®ÇØ º¸ÀÚ.

°¡Àå ½¬¿î ÄÉÀ̽º´Â 2ºÐÇÒ 95%ÀÏ ¶§Àε¥ À̶§´Â ¾Æ·¡ÂÊÀÇ ºä¸¦ Á¦°ÅÇϱ⸸ ÇÏ¸é µÇ¹Ç·Î 1¹ø ºä¸¸ »èÁ¦ÇÑ´Ù. ±×·¯¸é À§ÂÊ¿¡ ÀÖ´Â 0¹ø ºä¸¸ ³²°í 2ºÐÇÒ »óÅ¿¡¼­ ºÐÇÒµÇÁö ¾ÊÀº »óÅ·Π½±°Ô µ¹¾Æ°¥ ¼ö ÀÖ´Ù. 2ºÐÇÒ 5%ÀÏ ¶§´Â À§ÂÊÀÇ 0¹øºä¸¦ Á¦°ÅÇØ¾ß Çϴµ¥ ÀÌ ºä¸¦ Á¦°ÅÇØ ¹ö¸®¸é 1¹ø ºä¸¸ ³²°Ô µÇ¹Ç·Î 1¹øÀ» 0¹ø¿¡ ´ëÀÔÇØ¾ß ÇÑ´Ù. 4ºÐÇÒ »óÅÂÀÏ ¶§µµ ¸¶Âù°¡Áö ¹æ¹ýÀ¸·Î ºä¸¦ Á¦°ÅÇ쵂 Á¦°ÅÇÑ ÈÄ ³²Àº µÎ °³ÀÇ ºä°¡ 0¹ø, 1¹øÀÌ µÇµµ·Ï¸¸ ÇÏ¸é µÈ´Ù.

¹æÇâ°ú ºÐÇÒ ºñÀ²¿¡ µû¶ó ºä¸¦ Á¤¸®Çϰí VertRatio º¯¼ö¸¦ 0À¸·Î ¸®¼ÂÇØ ³õÀ¸¸é ³ª¸ÓÁö ¹èÄ¡ ÀÛ¾÷Àº OnSize¿¡¼­ ¾Ë¾Æ¼­ ÇÑ´Ù. ¼öÆò ºÐÇÒ »óÅÂÀÏ ¶§´Â Á¦°ÅµÇ´Â ºä°¡ ´Ù¸¦ »ÓÀÌÁö ³í¸®ÀûÀ¸·Î ´Ù¸¥ Á¡Àº °ÅÀÇ ¾ø´Ù. ºÐÇÒÀÌ ÇØÁ¦µÈ ÈÄ¿¡µµ ºäÀÇ ¹øÈ£´Â Ç×»ó Á¿¡¼­ ¿ì·Î À§¿¡¼­ ¾Æ·¡·Î 0¹øºÎÅÍ ¼ø¼­´ë·Î ¹øÈ£¸¦ ¸Å°Ü Á¤±ÔÈ­ »óŸ¦ À¯ÁöÇÑ´Ù´Â °Í¸¸ ÁÖÀÇÇÏ¸é µÈ´Ù.

ºÐÇÒ ÇØÁ¦ ÈÄ AdjustSplitable ÇÔ¼ö¸¦ È£ÃâÇÏ¿© °¢ ºäÀÇ ºÐÇÒ °¡´É¼ºÀ» Á¶Á¤ÇÑ´Ù. ¼öÁ÷À¸·Î ºÐÇÒµÈ »óÅÂÀÏ ¶§ °¢ ºä´Â ´õ ÀÌ»ó ¼öÁ÷À¸·Î ºÐÇÒÇÒ ¼ö ¾ø´Âµ¥ ºÐÇÒÀÌ ÇØÁ¦µÇ¸é ´Ù½Ã ¼öÁ÷À¸·Î ºÐÇÒ °¡´ÉÇϵµ·Ï ½ºÇø´ ¹Ú½º¸¦ Ç¥½ÃÇØ¾ß Çϸç ÀÌ ÀÛ¾÷À» AdjustSplitable ÇÔ¼ö°¡ ´ã´çÇÑ´Ù. ÀÌ ÇÔ¼öÀÇ ¶Ç ´Ù¸¥ Áß¿äÇÑ ÀÓ¹«´Â ºÐÇÒ ÇØÁ¦ ÈÄ È°¼º ºä¸¦ °ü¸®ÇÏ´Â °ÍÀÌ´Ù. ÇÁ·¹ÀÓÀÇ ¸ðµç µ¿ÀÛÀº Ȱ¼º ºä¸¦ ´ë»óÀ¸·Î ÇϹǷΠȰ¼º ºä°¡ ¾ø´Â »óŸ¦ ¸¸µé¾î¼­´Â ¾ÈµÈ´Ù. ±×·¡¼­ ÀÌ ÇÔ¼ö´Â ºÐÇÒÀ» ÇØÁ¦Çϱâ Àü¿¡ Ȱ¼º ºäÀÇ Æ÷ÀÎÅ͸¦ OldActive¿¡ ÀúÀåÇØ ³õ°í ºä¸¦ Á¦°ÅÇÑ ÈÄ ¿ø·¡ Ȱ¼º ºä°¡ ¾ÆÁ÷µµ ³²¾Æ ÀÖ´ÂÁö ã¾Æ º»´Ù. ¸¸¾à Ȱ¼º ºä°¡ ¾ÆÁ÷ »ýÁ¸ÇØ ÀÖ´Ù¸é ÀÌ ºä¸¦ ´Ù½Ã Ȱ¼ºÈ­½Ã۰í Ȱ¼º ºä°¡ Á¦°ÅµÇ¾î ¹ö·È´Ù¸é ¾î¿ ¼ö ¾øÀÌ 0¹ø ºä¿¡°Ô Æ÷Ä¿½º¸¦ ÁØ´Ù.

Ȱ¼º ºä´Â arView ¹è¿­ÀÇ Ã·ÀÚ·Î °ü¸®µÇÁö¸¸ ºäÀÇ ¹øÈ£·Î ¿ø·¡ Ȱ¼ººä¸¦ ±â¾ïÇÏ´Â ¹æ¹ýÀº »ç¿ëÇÒ ¼ö ¾ø´Ù. ¿Ö³ÄÇϸé ÀÌ ÇÔ¼ö´Â ºä¸¦ Á¦°ÅÇϱ⸸ ÇÏ´Â °ÍÀÌ ¾Æ´Ï¶ó Á¦°Å ÈÄ¿¡ ºäÀÇ Ã·ÀÚ¸¦ Á¶Á¤ÇÏ¿© Á¤±ÔÈ­Çϱ⠶§¹®¿¡ ¿ø·¡ Ȱ¼º ºäÀÇ ¹øÈ£°¡ Á¶Á¤ ÈÄ¿¡µµ °è¼Ó °°Àº ºä¸¦ °¡¸®Å°Áö ¸øÇϱ⠶§¹®ÀÌ´Ù. ¿¹¸¦ µé¾î À§ÀÇ ±×¸²¿¡¼­ 4ºÐÇÒ 5% »óÅÂÀÇ 1¹ø ºä°¡ Ȱ¼º ºä¿´À» ¶§ Á¶Á¤ ÈÄÀÇ 1¹ø ºä´Â ¿ø·¡ 3¹ø ºäÀ̱⠶§¹®¿¡ Ȱ¼º ºä°¡ ±×´ë·Î À¯ÁöµÇ´Â °ÍÀÌ ¾Æ´Ï´Ù. ±×·¡¼­ Ȱ¼º ºäÀÇ Æ÷ÀÎÅ͸¦ ÀúÀåÇØ ³õ°í Á¶Á¤ ÈÄ¿¡ Æ÷ÀÎÅ͸¦ ºñ±³ÇÏ¿© Ȱ¼º ºä Á¸Àç ¿©ºÎ¸¦ Á¶»çÇÏ¿´´Ù. ÀÌ ÇÔ¼ö´Â ¸¶¿ì½º ¹öưÀ» ³õÀ» ¶§ÀÎ OnLButtonUp¿¡¼­ ºÐÇÒ ºñÀ²À» Á¶Á¤ÇÑ ÈÄ ±×¸®°í WM_SIZE ¸Þ½ÃÁö¸¦ º¸³»±â Àü¿¡ È£ÃâÇÑ´Ù.

 

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

{

     ....

     GetClientRect(hWnd,&crt);

     // ¼öÁ÷ ½ºÇø´ ºñÀ² Á¶Á¤

     if (iDrag & AESPLIT_VERT) {

          DrawSplitBar(AESPLIT_VERT,OldSplitY);

          if (y != SplitPt.y) {

              VertRatio=OldSplitY*10000/(crt.bottom-VGAP);

           VertRatio=max(min(VertRatio,9500),500);

           UnSplitView(AESPLIT_VERT);

          }

     }

 

     // ¼öÆò ½ºÇø´ ºñÀ² Á¶Á¤

     if (iDrag & AESPLIT_HORZ) {

          DrawSplitBar(AESPLIT_HORZ,OldSplitX);

          if (x != SplitPt.x) {

              HorzRatio=OldSplitX*10000/(crt.right-VGAP);

           HorzRatio=max(min(HorzRatio,9500),500);

           UnSplitView(AESPLIT_HORZ);

          }

     }

     ....

 

ºÐÇÒ ºñÀ²Àº ÃÖ¼Ò 500¿¡¼­ ÃÖ´ë 9500±îÁöÀÇ ¹üÀ§¸¦ °¡Áöµµ·Ï Á¶Á¤µÇ´Âµ¥ ±×·¡¼­ UnSplitView ÇÔ¼ö¿¡¼­´Â ºÐÇÒ ºñÀ²À» ºÎµî½ÄÀ¸·Î ºñ±³ÇÏÁö ¾Ê°í µî½ÄÀ¸·Î ºñ±³°¡ °¡´ÉÇÏ´Ù. ¸¸¾à ºÐÇÒ ºñÀ²ÀÌ 500 Ãʰú 9500 ¹Ì¸¸À̶ó¸é UnSplitView ÇÔ¼ö´Â ¾Æ¹« °Íµµ ÇÏÁö ¾Ê°í ±×³É ¸®ÅÏÇÒ °ÍÀÌ´Ù.

¿©±â±îÁö Äڵ带 ÀÛ¼ºÇÑ ÈÄ ½ÇÇàÇØ º¸¸é ½ºÇø´ ¹Ú½º¸¦ µå·¡±×ÇÏ¿© ÆíÁýâÀ» ºÐÇÒÇÒ ¼ö ÀÖÀ¸¸ç ºÐÇÒ ÈÄ¿¡´Â ½ºÇø´ ¹Ù·Î ºñÀ²À» Á¶Á¤ÇÒ ¼ö ÀÖ°í ÇÁ·¹ÀÓÀÇ »ó´ÜÀ̳ª ÇÏ´ÜÀ¸·Î µå·¡±×ÇÏ¸é ºÐÇÒÀ» ÇØÁ¦ÇÒ ¼öµµ ÀÖ´Ù. ºÐÇÒ ¹× ÇØÁ¦¸¦ ÀÓÀÇÀÇ ¹æÇâÀ¸·Î ¿©·¯ ¹ø ¹Ýº¹Çصµ ÀüÇô ¹«¸®°¡ ¾ø´Âµ¥ À̶§¸¶´Ù ºä°¡ »ý°å´Ù°¡ ¾ø¾îÁ³´Ù°¡¸¦ ¹Ýº¹ÇÑ´Ù.

´Ù. ´õºí Ŭ¸¯ ó¸®

½ºÇø´ ¹Ú½º¸¦ µå·¡±×ÇÏ¸é ºÐÇÒ°ú µ¿½Ã¿¡ ¿øÇÏ´Â ºñÀ²À» ¼±ÅÃÇÒ ¼ö ÀÖ´Ù. ÀÌ ¹æ¹ý ¿Ü¿¡ Á» ´õ °£ÆíÇÑ ¹æ¹ýÀ¸·Î ½ºÇø´ ¹Ú½ºÀÇ ´õºíŬ¸¯À» Á¤ÀÇÇÏ¿© Àý¹Ý ºñÀ²·Î ºÐÇÒÇØ º¸ÀÚ. ºäÀÇ StartSplit¿¡ ´ÙÀ½ Äڵ带 Ãß°¡ÇÑ´Ù.

 

BOOL CApiEditText::StartSplit(HWND hWnd,BOOL fDoubleClick,int x,int y)

{

     RECT crt;

 

     GetClientRect(hWnd,&crt);

     if (bVertSplit && x > crt.right-SBW && y < SPLITWIDTH) {

        if (fDoubleClick) {

           pFrame->SplitView(AESPLIT_VERT,5000);

           return TRUE;

        }

          iDrag=AESPLIT_VERT;

     }

     if (bHorzSplit && x < SPLITWIDTH && y > crt.bottom-SBW) {

        if (fDoubleClick) {

           pFrame->SplitView(AESPLIT_HORZ,5000);

           return TRUE;

        }

          iDrag=AESPLIT_HORZ;

     }

     ....

 

´õºíŬ¸¯ µ¿ÀÛÀº StartSplitÇÔ¼ö³»¿¡¼­ ¿Ï°áµÇ¹Ç·Î Ä¿¼­¸¦ ĸóÇϰųª iDrag°ªÀ» Á¶Á¤ÇÒ ÇÊ¿ä¾øÀÌ ¹Ù·Î ºÐÇÒ °¡´ÉÇÏ´Ù. ÇÁ·¹ÀÓÀÇ SplitView ÇÔ¼ö¸¦ È£ÃâÇ쵂 ºÐÇÒ ºñÀ²·Î 5000À» ÁÖ¸é Á¤È®ÇÏ°Ô Àý¹ÝÀ¸·Î ºÐÇÒµÉ °ÍÀÌ´Ù. ÀÌ¿Õ ½ºÇø´ ¹Ú½º¸¦ ¸¸µé¾úÀ¸´Ï ÀÌ Á¶±×¸¸ »ç°¢ ¿µ¿ª¿¡ ´ëÇØ¼­µµ °¡±ÞÀûÀÌ¸é ¸¹Àº µ¿ÀÛÀ» Çã¿ëÇÑ´Ù´Â Á¡¿¡¼­ Àǹ̰¡ ÀÖ´Ù. ´ÙÀ½Àº ºÐÇÒµÈ »óÅ¿¡¼­ ½ºÇø´ ¹Ù¸¦ ´õºíŬ¸¯ÇßÀ» ¶§ÀÇ µ¿ÀÛµµ Á¤ÀÇÇØ º¸ÀÚ. ÀÌ µ¿ÀÛÀº ºÐÇÒÀ» ÇØÁ¦Ç϶ó´Â ¸í·ÉÀ¸·Î ÇØ¼®ÇÏ¿© ºÐÇÒ ºñÀ²À» Á¶Á¤Çϰí UnSplitView ÇÔ¼ö¸¦ È£ÃâÇÑ´Ù. ½ºÇø´ ¹Ù´Â ÇÁ·¹ÀÓÀÌ °¡Áö¹Ç·Î ÀÌ ÄÚµå´Â ÇÁ·¹ÀÓÀÇ OnLButtonDown¿¡ ÀÛ¼ºÇÑ´Ù.

 

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

{

     ....

     SetRect(&hrt,width,crt.top,width+VGAP,crt.bottom);

 

     // ´õºí Ŭ¸¯ÇÏ¸é ºÐÇÒÀ» Ãë¼ÒÇÑ´Ù.

     if (fDoubleClick) {

          if (VertRatio && PtInRect(&vrt,pt)) {

              if (ActiveView==0 || (arView[2] && ActiveView==1)) {

                   VertRatio=9500;

              } else {

                   VertRatio=500;

              }

              UnSplitView(AESPLIT_VERT);

          }

          if (HorzRatio && PtInRect(&hrt,pt)) {

              if (ActiveView==0 || (arView[2] && ActiveView==2)) {

                   HorzRatio=9500;

              } else {

                   HorzRatio=500;

              }

              UnSplitView(AESPLIT_HORZ);

          }

          SendMessage(hWnd,WM_SIZE,0,0);

          InvalidateRect(hWnd,NULL,TRUE);

          return;

     }

     ....

 

À̶§ ¾î¶² ¹æÇâÀ» ÇØÁ¦ÇÒ °ÍÀΰ¡¿¡ µû¶ó ºÐÇÒ ºñÀ²À» 500¶Ç´Â 9500À¸·Î º¯°æÇϴµ¥ µÎ °¡Áö Á¤Ã¥À» »ý°¢ÇØ º¼ ¼ö ÀÖ´Ù. ù ¹øÂ°´Â ºÐÇÒ ºñÀ²ÀÌ ÀÛÀº ÂÊÀ» Á¦°ÅÇÏ´Â °ÍÀÌ°í µÎ ¹øÂ°´Â Ȱ¼º ºä¸¦ °¡ÁöÁö ¾ÊÀº ¹Ý´ëÂÊÀ» Á¦°ÅÇÏ´Â °ÍÀÌ´Ù. ¾Æ¹«·¡µµ ´çÀå º¸ÀÌ´Â Å©±âº¸´Ù´Â Ȱ¼ººä¿¡ ´õ Å« Àǹ̰¡ ÀÖ´Â °Í °°À¸¹Ç·Î ´ç±ÙÀº ÈÄÀÚ¸¦ ¼±ÅÃÇß´Ù. ºÐÇÒµÇÁö ¾ÊÀº »óÅ¿¡¼­ ½ºÇø´ ¹Ú½º¸¦ ´õºíŬ¸¯Çϸé Àý¹ÝÀ¸·Î ºÐÇÒµÇ¸ç ºÐÇÒµÈ »óÅ¿¡¼­ ½ºÇø´ ¹Ù¸¦ ´õºíŬ¸¯ÇÏ¸é ºÐÇÒÀÌ ÇØÁ¦µÉ °ÍÀÌ´Ù. 4ºÐÇÒµÈ »óÅ¿¡¼­ ½ºÇø´ ¹ÙÀÇ ±³Á¡À» ´õºíŬ¸¯ÇÏ¸é ¸ðµç ºÐÇÒÀÌ Áï½Ã ÇØÁ¦µÈ´Ù.

¶ó. Ȱ¼º ºä °ü¸®

ÆíÁýâ Çϳª°¡ ¿©·¯ °³ÀÇ ºä·Î ºÐÇÒµÉ ¼ö Àִµ¥ ¹ÝÇØ »ç¿ëÀÚ´Â ¿©ÀüÈ÷ ÇÑ ¸í»ÓÀÌ°í µû¶ó¼­ ÆíÁýÀº Ȱ¼º ºä Çϳª¿¡¼­¸¸ °¡´ÉÇÏ´Ù. Ȱ¼º ºä¶ó´Â °³³äÀº Æ÷Ä¿½º¸¦ °¡Áö°í ÀÖ¾î ij·µÀÌ º¸ÀÌ°í »ç¿ëÀÚÀÇ ÆíÁýÀ» ¹Þ¾ÆµéÀÌ´Â ºä¶ó´Â ¶æÀÌ´Ù. ÇÁ·¹ÀÓÀº ActiveView¶ó´Â º¯¼ö¿¡ Ç×»ó Ȱ¼º ºä¸¦ ±â¾ïÇÏ¸ç ¸ðµç ÆíÁý ¸í·ÉÀº Ȱ¼º ºä¸¦ ´ë»óÀ¸·Î ÇÑ´Ù. Ȱ¼º ºä´Â »ç¿ëÀÚÀÇ ¸í½ÃÀûÀÎ ¸í·ÉÀ̳ª ºäÀÇ ¿ä±¸¿¡ ÀÇÇØ ¼ö½Ã·Î º¯°æµÉ ¼ö ÀÖÀ¸¹Ç·Î ÇÁ·¹ÀÓÀº Ȱ¼º ºä°£ÀÇ ÀüȯÀ» °ü¸®ÇØ¾ß ÇÑ´Ù. ´ÙÀ½ ¸â¹ö ÇÔ¼ö°¡ Ȱ¼º ºä¸¦ °ü¸®ÇÑ´Ù.

 

// Ȱ¼º ºä¸¦ ÀüȯÇÑ´Ù. Who = 0:ÀÚ±â ÀÚ½Å, 1:´ÙÀ½ ºä, 2:ÀÌÀü ºä

void CApiEdit::ChangeActiveView(CApiEditText *pAe,int Who)

{

     int i,Next;

 

     // pAe¸¦ Ȱ¼º ºä·Î ¸¸µç´Ù.

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

          if (arView[i]==pAe) {

              ActiveView=i;

          }

     }

 

     // ºÐÇҵǾî ÀÖÁö ¾Ê°Å³ª ÀÚ½ÅÀ» Ȱ¼ºÈ­ÇÒ ¶§´Â ¾Æ¹« °Íµµ ÇÒ Çʿ䰡 ¾ø´Ù.

     if (arView[1]!=NULL && Who!=0) {

          // À¯È¿ÇÑ ´ÙÀ½ ºä °Ë»ö

          if (Who==1) {

              for (Next=ActiveView;;) {

                   Next = (Next == 3 ? 0:Next+1);

                   if (arView[Next]) {

                        ActiveView=Next;

                        break;

                   }

              }

          // À¯È¿ÇÑ ÀÌÀü ºä °Ë»ö

          } else {

              for (Next=ActiveView;;) {

                   Next = (Next == 0 ? 3:Next-1);

                   if (arView[Next]) {

                        ActiveView=Next;

                        break;

                   }

              }

          }

          // °Ë»öµÈ ºä¿¡°Ô Æ÷Ä¿½º¸¦ ³Ñ±ä´Ù.

          SetFocus(arView[Next]->hWnd);

     }

}

 

Àμö·Î ºä ÀüȯÀ» ¿äûÇÑ ºäÀÇ Æ÷ÀÎÅÍ¿Í ´©±¸¸¦ Ȱ¼ºÈ­½Ãų °ÍÀΰ¡¸¦ ÁöÁ¤ÇÏ´Â Who¸¦ Àü´Þ¹Þ´Âµ¥ Who°¡ 0À̸é ÀÚ±â ÀÚ½Å, 1ÀÌ¸é ´ÙÀ½ ºä, 2À̸é ÀÌÀü ºäÀÌ´Ù. ÀÚ±â ÀÚ½ÅÀ» Ȱ¼ºÈ­½ÃÄÑ ´Þ¶ó°í ¿äûÇÒ ¶§´Â ActiveView¸¸ º¯°æÇÏ¸é µÈ´Ù. ÀÌ »óÅ¿¡¼­´Â ÀÚ½ÅÀÌ ÀÌ¹Ì Æ÷Ä¿½º¸¦ °¡Áø »óÅ¿¡¼­ ÇÁ·¹ÀÓ¿¡°Ô ÀÚ½ÅÀÌ È°¼ººä°¡ µÇ¾úÀ½À» ½Å°íÇÏ´Â °ÍÀ̹ǷΠSetFocus¸¦ È£ÃâÇÒ Çʿ䰡 ¾ø´Ù. ÀÌÀü, ´ÙÀ½ ºä¸¦ Ȱ¼ºÈ­ÇÒ ¶§´Â ºäÀÇ Ã·ÀÚ¸¦ Áõ°¨½ÃÄÑ À¯È¿ÇÑ ºä¸¦ ã¾Æ Ȱ¼º ºä¸¦ ¼±ÅÃÇϰí SetFocus¸¦ È£ÃâÇÏ¿© »õ·Î Ȱ¼ºÈ­µÈ ºä¿¡°Ô Æ÷Ä¿½º±îÁö ³Ñ±ä´Ù. ChangeActiveView ÇÔ¼ö´Â ºÐÇÒÀÌ µÇ¾î ÀÖÁö ¾ÊÀ» ¶§ Áï, ºä°¡ Çϳª¹Û¿¡ ¾øÀ¸¸é ¾Æ¹« µ¿ÀÛµµ ÇÏÁö ¾Ê´Â´Ù. arView[1]ÀÌ NULLÀÌ ¾Æ´Ï¾î¾ß ´ÙÀ½ ºä³ª ÀÌÀü ºä¸¦ ã´Â´Ù.

ºä´Â ¸¶¿ì½º ÀÔ·ÂÀ» ¹Þ¾ÆµéÀÏ ¼ö ÀÖÀ¸¹Ç·Î ÇÁ·¹ÀÓÀÌ º°µµ·Î ½Å°æ¾²Áö ¾Ê¾Æµµ ½º½º·Î Ȱ¼ºÈ­°¡ °¡´ÉÇÏ´Ù. ÇÏÁö¸¸ ÀÚ½ÅÀÌ È°¼ºÈ­µÇ¾ú´Ù´Â »ç½ÇÀ» ÇÁ·¹ÀÓ¿¡°Ô ¾Ë·Á ¾ÕÀ¸·ÎÀÇ ÆíÁý ¸í·ÉÀ» Àڽſ¡°Ô º¸³»ÁÙ °ÍÀ» ¿äûÇÒ Çʿ䰡 ÀÖ´Ù. ºä´Â Æ÷Ä¿½º¸¦ ¹Þ¾ÒÀ» ¶§ ÇÁ·¹ÀÓÀÇ ChangeActiveView ÇÔ¼ö¸¦ È£ÃâÇÏ¿© ÀÚ±â ÀÚ½ÅÀ» Ȱ¼ºÈ­ÇØ ÁÙ °ÍÀ» ¿äûÇÑ´Ù.

 

void CApiEditText::OnSetFocus(HWND hWnd, HWND hwndOldFocus)

{

     ....

     pFrame->ChangeActiveView(this,0);

}

 

»ç¿ëÀÚ°¡ ¸¶¿ì½º·Î ºä¸¦ Ŭ¸¯Çϸé ÀÌ ºä´Â ½º½º·Î Ȱ¼ºÈ­µÇ¸é¼­ ÇÁ·¹ÀÓÀÇ ActiveView¸¦ ÀÚ½ÅÀ¸·Î º¯°æÇÔÀ¸·Î½á ÀÌ ÈÄÀÇ ÆíÁý µ¿ÀÛÀ̳ª ºÐÇÒ ºä °ü¸®¿¡ Âü°íÇϵµ·Ï ÇÑ´Ù. ºä »çÀ̸¦ ÀüȯÇÒ ¶§´Â F6, Shift+F6 ´ÜÃà۸¦ Á¤ÀÇÇÑ´Ù.

 

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

{

     ....

     case VK_F6:

          pFrame->ChangeActiveView(this,(bShift ? 2:1));

          return;

 

ºä ÀüȯÀº ÄÁÆ®·Ñ ÀÚüÀÇ ±â´ÉÀ̹ǷΠ¿ÜºÎÀÇ µµ¿ò¾øÀ̵µ ½º½º·Î Ȱ¼º ºä¸¦ ¹Ù²Ü ¼ö ÀÖ¾î¾ß ÇÏ¸ç ±×·¡¼­ ºäÀÇ OnKey¿¡¼­ ´ÜÃàŰ ÀÔ·ÂÀ» Á÷Á¢ ¹Þ¾Æ Ȱ¼º ºä¸¦ ÀüȯÇß´Ù. ¹°·Ð ¿ÜºÎ¿¡¼­ °­Á¦·Î Ȱ¼º ºä¸¦ ¹Ù²Ù´Â °Íµµ °¡´ÉÇÏ´Ù. â ¸Þ´º¿¡ µÎ °³ÀÇ ¸Þ´º Ç׸ñ°ú ¾×¼¿·¯·¹ÀÌÅͰ¡ ÀÌ¹Ì ÁغñµÇ¾î ÀÖÀ¸¹Ç·Î Äڵ常 ÀÛ¼ºÇÏ¸é µÈ´Ù.

 

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

{

     ....

     case IDM_WIN_NEXTVIEW:

          pSi->Ae.ChangeActiveView(pView,1);

          break;

     case IDM_WIN_PREVVIEW:

          pSi->Ae.ChangeActiveView(pView,2);

          break;

 

¸Þ´º¿¡ ÀÌ ¸í·ÉÀ» ³Ö¾î ³õ´Â °ÍÀº ¾È³» ÀÌ¿ÜÀÇ Àǹ̴ º°·Î ¾ø´Ù. ´ÜÃà۰¡ Àִµ¥ ¸Þ´º¸¦ ¼±ÅÃÇØ¼­ ºä¸¦ ÀüȯÇÏ´Â »ç¿ëÀÚ´Â °ÅÀÇ ¾øÀ» °ÍÀÌ´Ù. ±×·¡µµ ¸Þ´º¿¡ ¾øÀ¸¸é ºä Àüȯ ´ÜÃà۰¡ ÀÖ´Ù´Â »ç½ÇÁ¶Â÷ ¾Ë±â ¾î·Æ±â ¶§¹®¿¡ ¸Þ´º¿¡ Æ÷ÇÔ½ÃÄÑ ³õ´Â °ÍÀÌ´Ù. ºÐÇҵǾî ÀÖÁö ¾ÊÀ» ¶§ »ç¿ë±ÝÁö ½ÃŰ´Â °ÍÀÌ ¿ÇÀ¸³ª È£½ºÆ®¿¡¼­ ºÐÇÒ ¿©ºÎ¸¦ ÆÇ´ÜÇϱ⠾î·Á¿ö ±×·¸°Ô ÇÏÁö ¾Ê¾Ò´Ù. È£½ºÆ®°¡ F6, Shift+F6¿¡ ´ëÇØ ¸ÕÀú ó¸®Çϱ⠶§¹®¿¡ ApiEdit´Â ½ÇÁ¦·Î F6 ÀÔ·ÂÀ» ¹ÞÁö ¸øÇÑ´Ù. ±×·¯³ª F6À» ó¸®ÇÏÁö ¾Ê´Â È£½ºÆ®¸¦ À§ÇØ OnKeyÀÇ F6 ó¸® ÄÚµå´Â »ý·«ÇÒ ¼ö ¾ø´Ù.

¸¶. ºä º¯°æ °ü¸®

ºÐÇÒµÈ ºäµéÀº ¸ðµÎ °°Àº ¹®¼­ÀÇ ´Ù¸¥ ºÎºÐÀ» º¸¿©ÁÖ°í ÀÖ´Â °ÍÀ̹ǷΠÇÑÂÊ ºä¿¡¼­ º¯È­°¡ ¹ß»ýÇÏ¸é ³ª¸ÓÁö ºäµµ °°ÀÌ °»½ÅµÇ¾î¾ß ÇÑ´Ù. ºä´Â ÀڽŠ¿Ü¿¡ ´Ù¸¥ ºäÀÇ Á¸Àç ¿©ºÎ Á¶Â÷µµ ¸ð¸£¹Ç·Î ºä¸¦ °»½ÅÇÏ´Â ÀÛ¾÷Àº ÇÁ·¹ÀÓÀÌ ÇØ¾ß ÇÏ¸ç º¯È­¸¦ ¸¸µç ºä´Â ÇÁ·¹ÀÓ¿¡°Ô ³ª¸ÓÁö ºäÀÇ °»½ÅÀ» ¿äûÇϴµ¥ À̶§ È£ÃâµÇ´Â ÇÔ¼ö°¡ UpdateViews ÇÔ¼öÀÌ´Ù.

ÀÌ ÇÔ¼ö´Â ¾Õ¼­ SplitView ¿¹Á¦·Î ºÐÇÒ ½Ç½ÀÀ» ÇÒ ¶§ ±× Çʿ伺°ú ±¸Ã¼ÀûÀÎ µ¿ÀÛ ¹æ½Ä¿¡ ´ëÇØ¼­ ¿¬±¸ÇØ º» ¹Ù ÀÖÀ¸¹Ç·Î ±×´ë·Î Àû¿ëÇϱ⸸ ÇÏ¸é µÈ´Ù. ´Ù¸¸ ÃÖ´ëÇÑ ºÒÇÊ¿äÇÑ °»½ÅÀ» ÇÏÁö ¾Ê±â À§ÇØ ´Ù¾çÇÑ ÈùÆ® Á¤º¸¸¦ ¹Þ¾ÆµéÀδٴ Á¡¿¡ À־ Á» ´õ ±â´ÉÀÌ È®ÀåµÇ¾úÀ» »ÓÀÌ´Ù. ÇÁ·¹ÀÓ¿¡ ´ÙÀ½ ¸â¹ö ÇÔ¼ö¸¦ Ãß°¡ÇÑ´Ù.

 

// ÇüÁ¦ ºäµéÀ» ¸ðµÎ °»½ÅÇÑ´Ù. nPos¿Í nCount´Â º¯°æµÈ À§Ä¡¿Í ±æÀÌ Á¤º¸ÀÌ´Ù.

void CApiEdit::UpdateViews(CApiEditText *pView,int nPos,int nCount)

{

     int i;

 

     // Á¸ÀçÇÏ´Â ¸ðµç ºä(pView Á¦¿Ü)¸¦ °»½ÅÇÑ´Ù.

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

          if (arView[i] && arView[i]!=pView) {

              if (nCount) {

                   if (arView[i]->off >= nPos) {

                        arView[i]->off=max(arView[i]->off+nCount,nPos);

                   }

                   if (arView[i]->SelStart >= nPos) {

                        arView[i]->SelStart=max(arView[i]->SelStart+nCount,nPos);

                   }

                   if (arView[i]->SelEnd >= nPos) {

                        arView[i]->SelEnd=max(arView[i]->SelEnd+nCount,nPos);

                   }

                   if (arView[i]->ViewType != HEXA_VIEW) {

                        arView[i]->UpdateLineInfo(nPos,nCount);

                   }

                   arView[i]->UpdateScrollInfo();

              }

              if (arView[i]->ViewType != HEXA_VIEW) {

                   arView[i]->Invalidate(FindParaStart(nPos));

              } else {

                   arView[i]->Invalidate(nPos);

              }

          }

     }

}

 

ÀÌ ÇÔ¼ö´Â ¼¼ °³ÀÇ Àμö¸¦ ¹Þ¾ÆµéÀ̴µ¥ ù¹øÂ° Àμö pView´Â º¯È­¸¦ À¯¹ß½ÃŲ ºäÀÇ Æ÷ÀÎÅÍÀ̸ç ÀÌ ºä°¡ ³ª¸ÓÁö ºäÀÇ º¯°æÀ» ¿äûÇÑ´Ù. pViewÀÚü´Â ÀÌ ¿äûÀ» Çϱâ Àü¿¡ ÀÌ¹Ì ÀÚ½ÅÀ» °»½ÅÇ߱⠶§¹®¿¡ º¯°æÀÇ ´ë»ó¿¡¼­ Á¦¿ÜµÈ´Ù. ¸¸¾à ÀÚ±â ÀڽűîÁö °°ÀÌ °»½ÅÇØ¾ß ÇÑ´Ù¸é pView¸¦ NULL·Î Àü´ÞÇÏ¸é µÈ´Ù. nPos´Â º¯È­°¡ ¹ß»ýÇÑ ¿ÀÇÁ¼ÂÀ̸ç nCount´Â »ðÀÔ, »èÁ¦µÈ ¹ÙÀÌÆ® ¼öÀÌ´Ù. UpdateViews ÇÔ¼ö´Â ÀÌ ÈùÆ® Á¤º¸¸¦ °¢ ºä¿¡°Ô ¾Ë·Á ÁÜÀ¸·Î½á ÃÖ´ëÇÑ Á¼Àº Áö¿ª¸¸ °»½ÅÇÒ ¼ö ÀÖ°Ô µµ¿ÍÁØ´Ù.

°»½ÅµÇ´Â Á¤º¸´Â ¿ÀÇÁ¼Â, ¼±Åà ¿µ¿ª, Á¤·Ä Á¤º¸, ½ºÅ©·Ñ Á¤º¸ µîÀÌ ÀÖ°í ÀÌ·± Á¤º¸µéÀÌ º¯°æµÇ¸é È­¸éµµ ´ç¿¬È÷ ´Ù½Ã ±×·Á¾ß ÇÑ´Ù. ¸ÕÀú ¿ÀÇÁ¼ÂÀÌ ¾î¶»°Ô º¯°æµÇ´ÂÁö º¸ÀÚ. ÆíÁýÀÌ ¹ß»ýÇÑ ºÎºÐÀÌ ÇöÀç ºäÀÇ ¿ÀÇÁ¼Â°ú °°Àº À§Ä¡À̰ųª ´õ ¾ÕÂÊ¿¡ ÀÖÀ» ¶§´Â ¿ÀÇÁ¼ÂÀÌ °°ÀÌ À̵¿µÇ¾î¾ß ÇÏÁö¸¸ ´õ µÚÂÊÀ̶ó¸é ¿ÀÇÁ¼ÂÀº À̵¿ÇÒ Çʿ䰡 ¾ø´Ù.

µÎ °³ÀÇ ºä·Î ºÐÇҵǾî ÀÖ°í ºä0¿¡¼­ "ºÐÇÒ"À̶ó´Â ¹®ÀÚ¿­À» »ðÀÔÇÑ »óȲÀε¥ À̶§ ºä1ÀÇ ÇöÀç À§Ä¡°¡ ¾îµðÀΰ¡ µû¶ó ºä1ÀÇ off°¡ ¾î¶»°Ô º¯ÇÒ °ÍÀΰ¡°¡ ´Þ¶óÁø´Ù. ±×¸²¿¡¼­ ºä1ÀÇ off°¡ ÇöÀç À§Ä¡1¿¡ ÀÖ´Â »óȲÀ» º¸¸é offº¸´Ù ´õ µÚÂÊ¿¡¼­ ÆíÁýÀÌ ÀϾÀ¸¹Ç·Î À̶§ÀÇ off´Â ±× ÀÚ¸®¿¡ °¡¸¸È÷ ÀÖÀ¸¸é ¿ø·¡ °¡¸®Å°°í ÀÖ´ø "ÀÇ"ÀÚ À§Ä¡¸¦ ±×´ë·Î °¡¸®Å³ ¼ö ÀÖ´Ù.

¹Ý¸é ÇöÀç À§Ä¡2ÀÎ "´Ù"¿¡ ÀÖ´Â »óȲÀº Á» ´Ù¸¥µ¥ ÀÌ À§Ä¡º¸´Ù ¾ÕÂÊ¿¡ 4¹ÙÀÌÆ®°¡ »ðÀԵǾúÀ¸¹Ç·Î ºä1ÀÇ offµµ ±×¸¸Å­ µÚ·Î À̵¿ÇØ¾ß °»½ÅÀüÀÇ "´Ù"À§Ä¡¸¦ ±×´ë·Î °¡¸®Å³ ¼ö ÀÖ´Ù. ¸¸¾à À̶§ off¸¦ Á¶Á¤ÇÏÁö ¾Ê´Â´Ù¸é °»½Å ÈÄÀÇ off´Â "´Ù"ÀÚº¸´Ù 4¹ÙÀÌÆ® ¾ÕÂÊÀ» °¡¸®Å°°Ô µÉ °ÍÀ̸ç ÀÌ´Â Ä¡¸íÀûÀÎ ¿¡·¯ÀÇ ¿øÀÎÀÌ µÉ ¼öµµ ÀÖ´Ù.

ÀÌ µÎ°¡Áö ÄÉÀ̽º¿Ü¿¡ ¾ÆÁÖ Æ¯¼öÇÑ °æ¿ì·Î º¯È­ ±¸°£¿¡ ¼ÓÇØ ÀÖ´Â °æ¿ì¸¦ »ý°¢ÇØ º¼ ¼ö Àִµ¥ À̶§´Â º¯È­°¡ ¹ß»ýµÈ ½ÃÀÛ ÁöÁ¡À¸·Î off¸¦ °­Á¦·Î ¿Å°Ü¾ß ÇÑ´Ù. ºä1ÀÇ ¿ÀÇÁ¼ÂÀ» °¨½Î´Â ¿µ¿ªÀ» ¼±ÅÃÇÑ ÈÄ »èÁ¦ÇÒ ¶§°¡ ÀÌ °æ¿ì¿¡ ÇØ´çÇϴµ¥ ÇöÀç À§Ä¡ÀÇ ¹®ÀÚ°¡ ¾ø¾îÁ® ¹ö·ÈÀ¸¹Ç·Î ¿ÀÇÁ¼ÂÀº ¼±Åà ¿µ¿ªÀÇ Ã³À½À¸·Î À̵¿ÇÒ ¼ö¹Û¿¡ ¾ø´Ù.

ºä1ÀÇ ÇöÀç À§Ä¡´Â "ºä"ÀÚ¿¡ ÀÖ°í ºä0¿¡¼­ ÀÌ ¿ÀÇÁ¼ÂÀ» Æ÷ÇÔÇÑ "°³ÀÇ ºä°¡"¹®ÀÚ¿­À» Åë°·Î »èÁ¦ÇØ ¹ö·È´Ù. ÀÌ·¸°Ô µÇ¸é ºä1Àº ¿ø·¡ °¡¸®Å°°í ÀÖ´ø ¹®ÀÚ°¡ »èÁ¦µÇ¾î ¹ö·ÈÀ¸¹Ç·Î ¾î¶»°Ô ÇÏ´õ¶óµµ ¿ø·¡ ¹®ÀÚ¸¦ °¡¸®Å³ ¼ö ¾øÀ¸¹Ç·Î ºÒ°¡ÇÇÇÏ°Ô »èÁ¦µÈ ¹®ÀÚ¿­ÀÇ ¼±µÎ À§Ä¡·Î¹Û¿¡ °¥ ¼ö°¡ ¾ø´Â °ÍÀÌ´Ù. ÀÌ·± ¸ðµç °æ¿ì¸¦ °í·ÁÇÏ¿© ºäÀÇ off¸¦ Á¶Á¤ÇÏ´Â ÄÚµå´Â ´ÙÀ½°ú °°¾ÆÁø´Ù.

 

if (arView[i]->off >= nPos) {

     arView[i]->off=max(arView[i]->off+nCount,nPos);

}

 

off°¡ ÆíÁýµÈ nPosÀÌ»óÀÏ ¶§¿¡ ÇÑÇØ off¿¡ nCount¸¦ ´õÇ쵂 nCount°¡ À½¼öÀÏ °æ¿ì, Áï »èÁ¦µÉ ¶§´Â ÃÖ¼ÒÇÑ nPosº¸´Ù ´õ ÀÛÀº ¿ÀÇÁ¼ÂÀ¸·Î À̵¿ÇÏÁö ¾Ê°Ô ÇÑ´Ù. SelStart¿Í SelEndµµ ¿ÀÇÁ¼Â°ú µ¿ÀÏÇÑ ¼º°ÝÀÇ °ªÀ̹ǷΠ¶È°°Àº ÄÚµå·Î Á¶Á¤ÇÒ ¼ö ÀÖ´Ù. µû¶ó¼­ ºä1ÀÇ ¼±Åà ¿µ¿ª ¾ÈÀ» ºä0¿¡¼­ ÆíÁýÇÏ¸é ºä1ÀÇ ¼±Åà ¿µ¿ªÀÌ È®Àå/Ãà¼ÒµÇ´Â È¿°ú°¡ ÀÖ´Ù.

 

¿ÀÇÁ¼Â°ú ¼±Åà ¿µ¿ªÀ» Á¶Á¤ÇÑ ÈÄ »ðÀÔ, »èÁ¦µÈ ¹ÙÀÌÆ® ¼ö¿¡ ¸Â°Ô ÀçÁ¤·ÄÇÏ°í ½ºÅ©·Ñ Á¤º¸µµ °»½ÅÇÑ´Ù. ÀçÁ¤·ÄÇÒ ¶§µµ UpdateLineInfo ÇÔ¼ö¿¡°Ô ¾îµð¼­ ¾ó¸¶¸¸Å­ ÆíÁýÀÌ ¹ß»ýÇß´Ù´Â ÈùÆ®¸¦ Á¦°øÇÏ¿© Á¤·Ä ÃÖÀûÈ­ Äڵ尡 µ¿ÀÛÇÒ ¼ö ÀÖ°Ô ÇØ¾ß ÇÑ´Ù. ±×¸®°í ÃÖÁ¾ÀûÀ¸·Î ÆíÁýµÈ ºÎºÐÀ» ¹«È¿È­ÇÏ¿© È­¸éÀ» ´Ù½Ã ±×¸®¸é ¸ðµç °»½ÅÀÌ ¿Ï·áµÈ´Ù. ´ÙÀ½ Àå¿¡¼­ ¸¸µé Çí»ç ºä´Â ¹®´ÜÀÇ °³³äÀÌ ¾øÀ¸¹Ç·Î Á¤·Ä Á¤º¸°¡ ¾øÀ¸¸ç UpdateLineInfo ÇÔ¼öµµ ÇÊ¿ä¾ø´Ù. ºä´Â ÀÚ½ÅÀÌ ¹®¼­ÀÇ ÀϺθ¦ º¯°æÇÒ ¶§¸¶´Ù ÇÁ·¹ÀÓÀÇ UpdateViews ÇÔ¼ö¸¦ È£ÃâÇÏ¿© ³ª¸ÓÁö ºäµµ Á¦´ë·Î °»½ÅµÇµµ·Ï ÇØ¾ß ÇÑ´Ù. ÀÌ ÇÔ¼ö¸¦ È£ÃâÇØ¾ß ÇÒ ½ÃÁ¡Àº ¼¼ ±ºµ¥°¡ Àִµ¥ ´ÙÀ½ µÑÀº ¾ÆÁÖ ½±°Ô ÀÌÇØµÉ °ÍÀÌ´Ù.

 

void CApiEditText::Insert(int nPos, TCHAR *str, BOOL bRec/*=TRUE*/)

{

     ....

     pFrame->UpdateViews(this,nPos,lstrlen(str));

}

 

void CApiEditText::Delete(int nPos, int nCount, BOOL bRec/*=TRUE*/)

{

     ....

     pFrame->UpdateViews(this,nPos,-nCount);

}

 

¹®ÀÚ¿­À» »ðÀÔ, »èÁ¦ÇßÀ» ¶§ ´ç¿¬È÷ ¹®¼­°¡ º¯°æµÇ¹Ç·Î UpdateViews ÇÔ¼ö¸¦ È£ÃâÇØ¾ß ÇÑ´Ù. ÃÖÀûÈ­¸¦ ÇÏÁö ¾Ê¾Ò´Ù¸é ¹®¼­¸¦ º¯°æÇÏ´Â °÷Àº ÀÌ µÎ ±ºµ¥»ÓÀ̰ÚÁö¸¸ ÃÖÀûÈ­¿¡ ÀÇÇØ ÀÌ ÇÔ¼ö¸¦ È£ÃâÇØ¾ß ÇÏ´Â °÷ÀÌ ÇÑ ±ºµ¥ ´õ ÀÖ´Ù.

 

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

{

     ....

     if (lParam & GCS_COMPSTR) {

          len=ImmGetCompositionString(hImc,GCS_COMPSTR,NULL,0);

          szComp=(TCHAR *)malloc(len+1);

          ImmGetCompositionString(hImc,GCS_COMPSTR,szComp,len);

          szComp[len]=0;

          if (bComp && len!=0) {

              pFrame->buf[off-2]=szComp[0];

              pFrame->buf[off-1]=szComp[1];

           pFrame->UpdateViews(this,off-2,0);

          ....

 

Á¶¸³ÁßÀÎ ±ÛÀÚ¸¦ ´ëüÇÒ ¶§µµ buf¸¦ Á÷Á¢ º¯°æÇßÀ¸¹Ç·Î ´Ù¸¥ ºä¿¡¼­ ÀÌ »ç½ÇÀ» ¾Ë ¼ö ÀÖµµ·Ï ÇÑ´Ù. ÇÑ±Û Á¶¸³ ¼Óµµ¸¦ ³ôÀ̰íÀÚ Insert, Delete¸¦ ºÎ¸£Áö ¾Ê¾Ò±â ¶§¹®¿¡, Áï ±æ¸ñÀ» ÇÇÇØ ´Ù³æ±â ¶§¹®¿¡ ÀÌ ºÎºÐÀº Ç×»ó ½Å°æÀ» ½á¾ß ÇÏ´Â °ñÄ¡ µ¢¾î¸®°¡ µÇ¾î ¹ö·È´Ù. À̶§´Â ¹öÆÛ¸¦ Á÷Á¢ Á¶ÀÛÇÏ¿© ±âÁ¸ ¹®ÀÚ¸¦ ´ëüÇßÀ¸¹Ç·Î ¹öÆÛÀÇ ±æÀ̰¡ ´Ã¾î³ª°Å³ª ÁÙ¾îµéÁö ¾ÊÀ¸¸ç UpdateViews ÇÔ¼ö·Î Àü´ÞµÇ´Â nCountÀμö´Â 0ÀÌ´Ù.

UpdateViews ÇÔ¼ö´Â nCount°¡ 0ÀÌ ¾Æ´Ò ¶§¸¸ ¿ÀÇÁ¼Â, ¼±Åà ¿µ¿ª Á¶Á¤, ÀçÁ¤·ÄÀ» Çϸç nCount°¡ 0ÀÏ ¶§´Â ÆíÁý À§Ä¡¸¦ ¹«È¿È­ÇÏ¿© È­¸é¸¸ ´Ù½Ã ±×¸®´Âµ¥ ÇÑ±Û Á¶¸³Áß¿¡´Â ±»ÀÌ º¹ÀâÇÑ °è»êÀ» ÇÒ Çʿ䰡 ¾ø±â ¶§¹®ÀÌ´Ù. Undo, Redoµµ ¹®¼­¸¦ º¯°æ½ÃŰÁö¸¸ ÀÌ ÇÔ¼öµéÀº Insert, Delete¸¦ È£ÃâÇϹǷΠº°µµ·Î ³ª¸ÓÁö ºä¸¦ °ü¸®ÇÒ Çʿ䰡 ¾ø´Ù.

¹®¼­ º¯°æ½ÃÀÇ ºä °»½Å¿Ü¿¡ ¿É¼ÇÀÌ º¯°æµÉ ¶§µµ ºÐÇÒµÈ ºä¸¦ ¸ðµÎ °»½ÅÇØ¾ß ÇÑ´Ù. È£½ºÆ®¿¡¼­ ¿É¼ÇÀ» º¯°æÇϸé ÇÁ·¹ÀÓÀÇ Set ÇÔ¼ö¸¦ È£ÃâÇϰí ÇÁ·¹ÀÓÀÇ Set ÇÔ¼ö´Â ForAllView ¸ÅÅ©·Î·Î Á¸ÀçÇÏ´Â ¸ðµç ºä·Î ¿É¼ÇÀ» Àü´ÞÇÑ´Ù. ±×·¡¼­ ±Û²ÃÀ̳ª »ö»ó µîÀ» ¹Ù²Ù¸é ºÐÇÒµÈ Ã¢¿¡ Àϰý Àû¿ëµÈ´Ù. ±×·±µ¥ ÇѰ¡Áö ¿¹¿Ü°¡ Àִµ¥ ±¸¹® ºÐ¼®±âÀÇ »ö»ó ¼³Á¤Àº ºÐÇÒºä·Î Àü´ÞµÇÁö ¾ÊÀ¸¸ç Ȱ¼ººä¿¡°Ô¸¸ Àû¿ëµÈ´Ù. ¹®¹ý ¿É¼ÇÀº µ¢Ä¡°¡ Å©±â ¶§¹®¿¡ ApiEdit°¡ ¼³Á¤ ÇÔ¼ö¸¦ °¡ÁöÁö ¾Ê°í SOptionÀÇ SetStyleColor ÇÔ¼ö°¡ Á÷Á¢ º¯°æÇÑ´Ù. ¿©±â¿¡µµ ºÐÇÒ ºä¿¡ ¿É¼ÇÀ» Àû¿ëÇÏ´Â Äڵ带 ÀÛ¼ºÇØ¾ß ÇÑ´Ù.

 

void ApplyNow()

{

     ....

          if (bChangeStyle) {

              for (int aet=0;aet<4 && pSi->Ae.arView[aet];aet++) {

                   NewOption.SetStyleColor(pSi->Ae.arView[aet]->GetParser());

              }

              pSi->Ae.Invalidate(-1);

          }

 

ForAllView ¸ÅÅ©·Î¿Í ¸¶Âù°¡Áö·Î Á¸ÀçÇÏ´Â ¸ðµç ºä¸¦ ¼øÈ¸Çϸç SetStyleColor ÇÔ¼ö¸¦ È£ÃâÇÏ¿© °¢ ºäÀÇ ºÐ¼®±â °´Ã¼¿¡ ¿É¼ÇÀ» Àû¿äÇÑ´Ù.

¹Ù. ºÐÇÒ ±ÝÁö

ÅØ½ºÆ® ºä´Â °¢ ¹æÇâ¿¡ ´ëÇØ ºÐÇÒÀÌ °¡´ÉÇÑÁö¸¦ bHorzSplit, bVertSplit º¯¼ö·Î ±â¾ïÇϸç ÀÌ µÎ °ªÀÇ µðÆúÆ®´Â ¸ðµÎ TRUEÀÌ´Ù. ¶ÇÇÑ ÇÁ·¹ÀÓÀº ºÐÇÒ °¡´ÉÇÑ ¹æÇâÀ» SplitFlag·Î ±â¾ïÇÏ¸ç »ý¼ºÀÚ¿¡¼­ ÀÌ °ªÀ» ¾ç¹æÇâ ¸ðµÎ ºÐÇÒ °¡´ÉÇϵµ·Ï ÃʱâÈ­ÇÑ´Ù. µû¶ó¼­ ApiEdit ÄÁÆ®·ÑÀ» µðÆúÆ® ¼Ó¼º´ë·Î »ý¼ºÇϱ⸸ Çϸé È£½ºÆ®°¡ Ưº°ÇÑ Áö¿øÀ» ÇÏÁö ¾Ê´õ¶óµµ ÄÁÆ®·Ñ ½º½º·Î ºÐÇÒÀÌ °¡´ÉÇÏ¸ç ºÐÇÒµÈ ºä¸¦ ¾Ë¾Æ¼­ °ü¸®ÇÒ ¼ö ÀÖ´Â ´É·ÂÀÌ ÀÖ´Ù.

È£½ºÆ®ÀÇ ÀÔÀå¿¡¼­ º¼ ¶§ ÄÁÆ®·ÑÀÇ ÀÌ·± ÀÚµ¿È­µÈ ºÐÇÒ °ü¸®°¡ ¹«Ã´ Æí¸®ÇÒ ¼öµµ ÀÖ°ÚÁö¸¸ ¶§·Î´Â ÀÌ ±â´ÉÀÌ È£½ºÆ®¿Í ¸ÂÁö ¾ÊÀ» ¼öµµ ÀÖ´Ù. ¿¹¸¦ µé¾î ÁÖ¼Ò³ª »ç¶÷ À̸§°°Àº ªÀº ¹®ÀÚ¿­À» ÀԷ¹ޱâ À§ÇØ ApiEdit ÄÁÆ®·ÑÀ» »ç¿ëÇϴµ¥ ÀÌ·± Á¶±×¸¸ ÄÁÆ®·Ñµµ ºÐÇÒÀÌ µÈ´Ù¸é Á» ¿ì½º¿ö º¸ÀÌ°í ºñ·Ï ÀÛÁö¸¸ ½ºÇø´ ¹Ú½º°¡ ´«¿¡ °Å½½¸± ¼öµµ ÀÖ´Ù. ±×·¡¼­ È£½ºÆ®°¡ ¿øÇÒ °æ¿ì´Â ºÐÇÒ ±â´ÉÀ» »ç¿ë ±ÝÁöÇÒ Çʿ䰡 ÀÖ´Ù. ApiEdit´Â ÀÌ·± ¸ñÀûÀ¸·Î ºÐÇÒ °¡´ÉÇÑ ¹æÇâÀ» SplitFlag¶ó´Â ¸â¹ö º¯¼ö·Î °ü¸®Çϸç ÀÌ º¯¼öÀÇ °ªÀº ´ÙÀ½ ÇÔ¼ö·Î Á¶Á¤ÇÑ´Ù.

 

void CApiEdit::EnableSplit(DWORD Flag)

{

     if (arView[1]) {

          return;

     }

 

     SplitFlag=Flag;

     AdjustSplitable();

     return;

}

 

Àμö·Î Àü´ÞµÈ Flag¸¦ SplitFlag¿¡ ´ëÀÔÇÏ°í °¢ ºäÀÇ ºÐÇÒ °¡´É¼º ¿©ºÎ¸¦ Á¶Á¤Çϱâ À§ÇØ AdjustSplitable ÇÔ¼ö¸¦ È£ÃâÇÑ´Ù. AdjustSplitable ÇÔ¼ö´Â ÇöÀç ºÐÇÒ »óÅ»Ӹ¸ ¾Æ´Ï¶ó SplitFlag°ªÀ» °°ÀÌ ÂüÁ¶ÇÏ¿© °¢ ºäÀÇ ½ºÇø´ ¹Ú½º¸¦ ÅëÁ¦ÇÑ´Ù.

 

// ºÐÇÒµÈ ºäÀÇ ½ºÇø´ ¹Ú½º¸¦ °ü¸®ÇÑ´Ù.

void CApiEdit::AdjustSplitable()

{

     int i;

 

     // ºÐÇҵǾî ÀÖÁö ¾ÊÀ¸¸é ¾ç¹æÇâ ºÐÇÒ °¡´É

     if (arView[1]==NULL) {

          arView[0]->SetHorzSplit(TRUE && (SplitFlag & AESPLIT_HORZ));

          arView[0]->SetVertSplit(TRUE && (SplitFlag & AESPLIT_VERT));

     // 2ºÐÇҵǾî ÀÖÀ¸¸é ºÐÇÒµÇÁö ¾ÊÀºÂʸ¸ ºÐÇÒ °¡´É

     } else if (arView[2]==NULL) {

          if (VertRatio) {

              arView[0]->SetHorzSplit(TRUE && (SplitFlag & AESPLIT_HORZ));

              arView[0]->SetVertSplit(FALSE);

              arView[1]->SetHorzSplit(TRUE && (SplitFlag & AESPLIT_HORZ));

              arView[1]->SetVertSplit(FALSE);

          } else {

              arView[0]->SetHorzSplit(FALSE);

              arView[0]->SetVertSplit(TRUE && (SplitFlag & AESPLIT_VERT));

              arView[1]->SetHorzSplit(FALSE);

              arView[1]->SetVertSplit(TRUE && (SplitFlag & AESPLIT_VERT));

          }

     // 4ºÐÇҵǾî ÀÖÀ¸¸é ´õ ÀÌ»ó ºÐÇÒÇÒ ¼ö ¾ø´Ù.

     } else {

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

              arView[i]->SetHorzSplit(FALSE);

              arView[i]->SetVertSplit(FALSE);

          }

     }

}

 

ºñ·Ï ºÐÇҵǾî ÀÖÁö ¾Ê´õ¶óµµ SplitFlag¿¡ ºÐÇÒ Çã¿ë Ç÷¡±×°¡ ¼³Á¤µÇ¾î ÀÖ¾î¾ß¸¸ ºä¿¡ ½ºÇø´ ¹Ú½º¸¦ Ç¥½ÃÇÑ´Ù. ½ºÇø´ ¹Ú½º¸¸ Á¦°ÅÇϸé ÃÖÃÊ ºÐÇÒÀ» ½ÃÀÛÇÒ ¼ö ÀÖ´Â »ç¿ëÀÚ ÀÎÅÍÆäÀ̽º°¡ »ç¶óÁö¹Ç·Î ½ÇÁúÀûÀ¸·Î ºÐÇÒÇÒ ¼ö ¾ø´Â »óųª ¸¶Âù°¡Áö´Ù. È£½ºÆ®¿¡¼­ EnableSplit(0)¸¦ È£ÃâÇÏ¸é ¾ç¹æÇâ ¸ðµÎ ºÐÇÒÀÌ ±ÝÁöµÇ¸ç EnableSplit(AESPLIT_HORZ)¸¦ È£ÃâÇÏ¸é ¼öÆòÀ¸·Î¸¸ ºÐÇÒÇÒ ¼ö ÀÖ°í ¼öÁ÷À¸·Î´Â ºÐÇÒÇÒ ¼ö ¾ø´Ù.

EnableSplit ÇÔ¼öÀÇ Äڵ带 º¸¸é ¾Ë ¼ö ÀÖ°ÚÁö¸¸ SplitFlag°ªÀ» º¯°æÇÒ ¶§´Â ºÐÇÒÀÌ µÇ¾î ÀÖÁö ¾Ê¾Æ¾ß¸¸ ÇÑ´Ù. Áï, ÀÌ¹Ì ºÐÇҵǾî ÀÖ´Â »óÅ¿¡¼­ ÀÌ ÇÔ¼ö¸¦ È£ÃâÇÏ¿© ºÐÇÒÀ» ±ÝÁöÇÒ ¼ö´Â ¾ø´Âµ¥ ¿Ö³ÄÇϸé ÀÌ¹Ì ºÐÇҵǾî Àִ âÀ» °­Á¦·Î ÇØÁ¦ÇÏ´Â °ÍÀÌ ±î´Ù·Ó±â ¶§¹®ÀÌ´Ù. µû¶ó¼­ ºÐÇÒ ±â´ÉÀ» »ç¿ëÇÏ°í ½ÍÁö ¾ÊÀº È£½ºÆ®´Â ApiEdit ÄÁÆ®·ÑÀ» ¸¸µç Á÷ÈÄ¿¡ °ð¹Ù·Î ÀÌ ÇÔ¼ö¸¦ È£ÃâÇØ¾ß ÇÏ¸ç ½ÇÇàÁß¿¡´Â ¾²Áö ¾Ê´Â °ÍÀÌ ÁÁ´Ù.

¿Ö EnableSplit ÇÔ¼ö¸¦ »ç¿ëÇÏ´Â ¹æ¹ýÀÌ ÀÌ·¸°Ô ±î´Ù·Î¿î°¡ Çϸé ÀÌ ÇÔ¼ö´Â ÇÁ·Î±×·¡¹Ö ÀÎÅÍÆäÀ̽ºÀÌÁö »ç¿ëÀÚ ÀÎÅÍÆäÀ̽º°¡ ¾Æ´Ï±â ¶§¹®ÀÌ´Ù. Áï, ApiEdit ÄÁÆ®·ÑÀ» »ç¿ëÇÏ´Â °³¹ßÀÚ¸¦ À§ÇØ Á¦°øµÇ´Â ÇÔ¼öÀÏ »Ó ÃÖÁ¾ »ç¿ëÀÚµéÀÌ ¾²´Â ÇÔ¼ö°¡ ¾Æ´Ï´Ù. ´ç±ÙÀº Ç×»ó ºÐÇÒ °¡´ÉÇÏ°Ô µ¿ÀÛÇϱ⸦ ¿øÇϹǷΠÀÌ ÇÔ¼ö¸¦ È£ÃâÇÏÁö ¾ÊÀ¸¸ç ¼³Á¤ ´ëÈ­»óÀÚ¿¡µµ "ºÐÇÒ ±ÝÁöÇϱâ" ÀÌ·± ¿É¼ÇÀ» ¸¸µéÁö ¾Ê´Â´Ù.