½ºÇø´ ¹Ú½º¸¦ ºä°¡ °¡Áö°í Àֱ⠶§¹®¿¡ ÃÖÃÊÀÇ ºÐÇÒ ¸í·ÉÀº ºä°¡ ¹ÞÁö¸¸ ÀÏ´Ü µÎ °³ ÀÌ»óÀÇ ºä·Î ºÐÇҵǸé À̶§ºÎÅÍ ºÐÇÒâ °ü¸®´Â ÇÁ·¹ÀÓÀÌ ÇÑ´Ù. ºÐÇÒµÈ ºä »çÀÌ¿¡ ¾à°£ÀÇ ¿©¹éÀÌ µå·¯³ª´Âµ¥ ÀÌ ¿©¹éÀº ÇÁ·¹ÀÓÀÇ ÀÛ¾÷¿µ¿ªÀÌ¸ç ½ºÇø´ ¹Ù(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 ÄÁÆ®·ÑÀ» »ç¿ëÇÏ´Â °³¹ßÀÚ¸¦ À§ÇØ Á¦°øµÇ´Â ÇÔ¼öÀÏ »Ó ÃÖÁ¾ »ç¿ëÀÚµéÀÌ ¾²´Â ÇÔ¼ö°¡ ¾Æ´Ï´Ù. ´ç±ÙÀº Ç×»ó ºÐÇÒ °¡´ÉÇÏ°Ô µ¿ÀÛÇϱ⸦ ¿øÇϹǷΠÀÌ ÇÔ¼ö¸¦ È£ÃâÇÏÁö ¾ÊÀ¸¸ç ¼³Á¤ ´ëÈ»óÀÚ¿¡µµ "ºÐÇÒ ±ÝÁöÇϱâ" ÀÌ·± ¿É¼ÇÀ» ¸¸µéÁö ¾Ê´Â´Ù.