´ÙÀ½Àº ¼±Åÿµ¿ªÀ» µå·¡±×ÇÏ¿© ¹®ÀÚ¿À» À̵¿ ¶Ç´Â º¹»çÇÏ´Â ±â´ÉÀ» ¸¸µé¾îº¸ÀÚ. ÀÌ ±â´ÉÀº Ŭ¸³º¸µå Á¶ÀÛ¾øÀÌ ¸¶¿ì½º¸¸À¸·Î ¹®ÀåÀ» Àç¹èÄ¡ÇÒ ¼ö ÀÖ¾î ¼Ò½º ÄÚµå ÆíÁý½Ã¿¡ ¾ÆÁÖ À¯¿ëÇÏ´Ù. ¼±Åÿµ¿ªÀ» µå·¡±×ÇÏ¸é ¹®ÀÚ¿ÀÌ À̵¿µÇ°í <Ctrl>Å°¸¦ ´©¸¥ ä·Î µå·¡±×ÇÏ¸é º¹»çµÈ´Ù. ¹®ÀÚ¿ µå·¡±× ±â´ÉÀº ºí·Ï¼±ÅÃÀ̳ª ÁÙ´ÜÀ§ ¼±Åðú´Â ¶Ç ´Ù¸¥ ¸ðµåÀ̹ǷΠ¸ðµå¸¦ ±¸ºÐÇϱâ À§ÇÑ Àü¿ªº¯¼ö°¡ ÇÊ¿äÇÏ´Ù. ´ÙÀ½ º¯¼ö¸¦ ¼±¾ðÇÑ´Ù.
BOOL bDragSel;
BOOL OnCreate(HWND hWnd, LPCREATESTRUCT lpCreateStruct)
{
....
bDragSel=FALSE;
ÀÌ º¯¼ö°¡ TRUEÀÌ¸é ¹®ÀÚ¿ µå·¡±× ¸ðµå°¡ µÇ¸ç ¸¶¿ì½º ¸Þ½ÃÁö ó¸® ÇÔ¼ö(±¸Ã¼ÀûÀ¸·Î OnMouseMove)µéÀº ÀÌ º¯¼ö°ª¿¡ µû¶ó µ¿ÀÛÀÌ ´Þ¶óÁø´Ù. OnCreate¿¡¼ ÀÌ º¯¼ö¸¦ FALSE·Î ÃʱâÈÇÑ´Ù. ¹®ÀÚ¿ µå·¡±×ÀÇ ½ÃÀÛÀº ¸¶¿ì½º ¿ÞÂÊ ¹öÆ°À» Ŭ¸¯ÇÑ ½ÃÁ¡ÀÎ OnLButtonDown¿¡¼ ó¸®ÇÑ´Ù.
void OnLButtonDown(HWND hWnd, BOOL fDoubleClick, int x, int y, UINT keyFlags)
{
int toff;
BOOL bShift, bControl;
int r,c;
int nr;
int SelFirst, SelSecond;
bShift=((GetKeyState(VK_SHIFT) & 0x8000) != 0);
bControl=((GetKeyState(VK_CONTROL) & 0x8000) != 0);
if (IsInSelection(x+xPos, y+yPos)) {
bDragSel=TRUE;
SetCapture(hWnd);
bCapture=TRUE;
return;
}
if (x < MarginWidth) {
....
ÇöÀç Ä¿¼ À§Ä¡°¡ ¼±Åÿµ¿ª ¾ÈÀ̸é Áï, ¼±Åÿµ¿ª¿¡¼ ¸¶¿ì½º ¹öÆ°À» Ŭ¸¯ÇßÀ¸¸é bDragSelÀ» TRUE·Î º¯°æÇÏ¿© ¹®ÀÚ¿ µå·¡±×°¡ ½ÃÀ۵ǾúÀ½À» ±â·ÏÇسõ´Â´Ù. µå·¡±×Áß¿¡ ¸¶¿ì½º ¸Þ½ÃÁö¸¦ °è¼Ó ¹Þ¾Æ¾ß ÇϹǷΠĿ¼´Â ĸóÇØ¾ß ÇÑ´Ù. µå·¡±×ÁßÀÇ µ¿ÀÛÀº OnMouseMove¿¡¼ ó¸®ÇÑ´Ù.
void OnMouseMove(HWND hWnd, int x, int y, UINT keyFlags)
{
....
BOOL bControl;
int sx,sy;
if (bCapture == FALSE) {
return;
}
bControl=((GetKeyState(VK_CONTROL) & 0x8000) != 0);
if (bDragSel) {
if (x > frt.left && x < frt.right && y > frt.top && y < frt.bottom) {
toff=GetOffFromXY(x+xPos,y+yPos);
GetXYFromOff(toff,sx,sy);
SetCaretPos(sx-xPos,sy-yPos);
if (bControl) {
SetCursor(hCCopy);
} else {
SetCursor(hCMove);
}
} else {
SetCursor(hCNoDrop);
}
} else {
OldOff=off;
....
}
bInstTimer=FALSE;
....
¹®ÀÚ¿ µå·¡±×ÁßÀÌ°í Æ÷¸ËÆÿµ¿ª ¾ÈÀ̸é ij·µÀÇ À§Ä¡¸¦ ¸¶¿ì½º Ä¿¼ À§Ä¡·Î ¿Å°Ü µå·ÓÇÒ ÀÚ¸®¸¦ º¸¿©ÁØ´Ù. À̶§ SetCaretÀ» È£ÃâÇÒ ¼ö´Â ¾øÀ¸¸ç ¹Ýµå½Ã SetCaretPos ÇÔ¼ö·Î Á÷Á¢ ij·µÀ» ¿Å°Ü¾ß ÇÑ´Ù. ¿Ö³ÄÇϸé SetCaretÀº Àü¿ªº¯¼ö off °ªÀ» ±âÁØÀ¸·Î ij·µÀ» ¿Å°ÜÁִµ¥´Ù ij·µÀ» ¿Å°ÜÁÖ´Â ÀÛ¾÷ ¿Ü¿¡ °Á¦ ½ºÅ©·Ñ ±â´É µî ¿©·¯ °¡Áö 󸮸¦ °°ÀÌ ÇÏ°í Àֱ⠶§¹®ÀÌ´Ù. bDragSelÀÏ ¶§ÀÇ Ä³·µÀ̵¿Àº µå·Ó À§Ä¡¸¦ º¸¿©ÁÖ´Â ÀÓ½ÃÀûÀÎ À̵¿¿¡ ºÒ°úÇÏ´Ù.
Ä¿¼À̵¿Áß¿¡ Ä¿¼ÀÇ ¸ð¾çµµ ¹Ù²ãÁִµ¥ <Ctrl>Å°°¡ ´·¯Á® ÀÖÀ¸¸é º¹»çÄ¿¼¸¦ º¸¿©ÁÖ°í ±×·¸Áö ¾ÊÀ¸¸é À̵¿Ä¿¼¸¦ º¸¿©ÁØ´Ù. ¸¸¾à Æ÷¸ËÆÿµ¿ª ¹ÛÀ¸·Î Ä¿¼°¡ ³ª°¬À¸¸é ÀÌ »óÅ¿¡¼´Â µå·ÓÇÒ ¼ö ¾øÀ¸¹Ç·Î µå·Ó ±ÝÁö Ä¿¼¸¦ º¸¿©ÁÖ¾î¾ß ÇÑ´Ù.
OnMouseMove´Â µå·ÓµÉ ÀÚ¸®¸¦ º¸¿©ÁÖ°í <Ctrl>Å°ÀÇ »óÅ¿¡ µû¶ó ÀûÀýÈ÷ Ä¿¼¸¸ ¹Ù²Ù¸é µÈ´Ù. ¹®ÀÚ¿ º¹»ç³ª À̵¿Ã³¸®´Â ¹öÆ°À» ³õÀ» ¶§ÀÎ OnLButtonUp¿¡¼ ¸ðµÎ ó¸®ÇÑ´Ù. Áö±Ý±îÁö º°·Î ÇÏ´Â ÀÏÀÌ ¾ø¾ú´ø OnLButtonUp¿¡ ´ë·®ÀÇ Äڵ尡 Ãß°¡µÇ¾ú´Ù.
void OnLButtonUp(HWND hWnd, int x, int y, UINT keyFlags)
{
BOOL bControl;
int SelLen;
int toff;
bCapture=FALSE;
bSelLine=FALSE;
ReleaseCapture();
KillTimer(hWnd,1);
bControl=((GetKeyState(VK_CONTROL) & 0x8000) != 0);
if (bDragSel) {
bDragSel=FALSE;
if (IsInSelection(x+xPos, y+yPos)==TRUE) {
off=GetOffFromXY(x+xPos,y+yPos);
SetCaret();
SelStart=SelEnd=0;
Invalidate(-1);
} else {
if (x > frt.left && x < frt.right && y > frt.top && y < frt.bottom) {
SelLen=abs(SelStart-SelEnd);
toff=GetOffFromXY(x+xPos,y+yPos);
CopyString(bControl,min(SelStart,SelEnd),toff,SelLen);
SelStart=toff;
SelEnd=SelStart+SelLen;
off=SelEnd;
SetCaret();
Invalidate(-1);
} else {
SetCaret();
}
}
}
}
ÀÌ ÇÔ¼ö°¡ µå·ÓÀ» ó¸®ÇÏ·Á¸é ¹®ÀÚ¿ µå·¡±× »óÅ¿©¾ß ÇϹǷΠ¸ðµç ÄÚµå´Â if (bDragSel) { ºí·Ï¿¡ ÀÛ¼ºµÇ¾î ÀÖ´Ù. µå·ÓµÈ À§Ä¡°¡ ¾îµðÂëÀΰ¡¿¡ µû¶ó ÀÌ ÇÔ¼öÀÇ µ¿ÀÛÀÌ °áÁ¤µÇ´Âµ¥ ¼±Åÿµ¿ª ¾ÈÀ̶ó¸é ¹®ÀÚ¿ À̵¿Àº Ãë¼ÒµÈ´Ù. µå·¡±×¸¦ ½ÃÀÛÇÑ °÷¿¡ ´Ù½Ã µå·ÓÇßÀ¸¹Ç·Î À̵¿ÇÒ ¹®ÀÚ¿°ú ´ë»ó À§Ä¡°¡ µ¿ÀÏÇÏ¿© ¿Å±æ ÇÊ¿ä°¡ ¾ø°Ô µÈ ¼ÀÀÌ´Ù. À̶§´Â ij·µÀ» µå·ÓÇÑ ÀÚ¸®·Î ¿Å°Ü ÁÖ°í ¼±Åÿµ¿ªÀº ÇØÁ¦ÇÑ´Ù. ±»ÀÌ ¼±Åÿµ¿ªÀ» ÇØÁ¦ÇÒ ÇÊ¿ä±îÁö¾ß Àְڴ°¡ »ý°¢µÉÁöµµ ¸ð¸£°ÚÁö¸¸ ¿©±â¼ ¼±ÅÃÀ» ÇØÁ¦ÇÏÁö ¾ÊÀ¸¸é ¼±Åÿµ¿ªÀ» ´Ü¼ø Ŭ¸¯ÇßÀ» ¶§µµ ¼±ÅÃÀÌ ±×´ë·Î ³²¾ÆÀÖ°Ô µÈ´Ù.
¼±Åÿµ¿ª ¾ÈÀÌ ¾Æ´Ï¶ó¸é Æ÷¸ËÆÿµ¿ª ¾ÈÀÎÁö¸¦ °Ë»çÇØ º»´Ù. ¸¸¾à Æ÷¸ËÆÿµ¿ªÀÌ ¾Æ´Ï¶ó¸é µå·ÓÇÒ ¼ö ¾ø´Â °÷¿¡, ¿¹¸¦ µé¾î À©µµ¿ì ¹Ù±ù¿¡¼ ¸¶¿ì½º ¹öÆ°À» ³õÀº °ÍÀ̹ǷΠÀ̶§µµ µå·ÓÀ» Ãë¼ÒÇØ¾ß ÇÑ´Ù. ´Ü, ÀÌ °æ¿ì´Â ¼±ÅÃÀ» Ç® ÇÊ¿äµµ ¾ø°í ij·µÀ» µå·ÓÇÑ °÷À¸·Î ¿Å±âÁöµµ ¾ÊÀ¸¸ç ´Ü¼øÈ÷ SetCaret¸¸ È£ÃâÇÏ¿© ij·µÀ» ¿ø·¡ ÀÖ´ø ÀÚ¸®(SelEnd)·Î ´Ù½Ã º¸³» Áֱ⸸ ÇÏ¸é µÈ´Ù. ¹®ÀÚ¿ µå·¡±× ÀÚü¸¦ ¿ÏÀüÈ÷ Ãë¼ÒÇÏ°í µå·¡±×¸¦ ½ÃÀÛÇϱâ ÀüÀÇ »óÅ·Πµ¹¾Æ°¡´Â °ÍÀÌ´Ù.
Æ÷¸ËÆÿµ¿ª ¾ÈÀÌ°í ¼±Åÿµ¿ª ¿ÜºÎ¿¡ µå·ÓµÇ¾ú´Ù¸é ¿©±â¼ µå·Ó 󸮸¦ ÇÑ´Ù. <Ctrl>Å°ÀÇ »óÅ¿¡ µû¶ó ¹®ÀÚ¿ À̵¿ ¶Ç´Â º¹»ç¸¦ Çϴµ¥ ¿©±â¼ Á÷Á¢ ÇÏÁö ¾Ê°í CopyStringÀ̶ó´Â ¹®ÀÚ¿ À̵¿ ÇÔ¼ö¸¦ È£ÃâÇÑ´Ù. ÀÌ ÇÔ¼ö´Â ´ÙÀ½°ú °°ÀÌ ÀÛ¼ºÇÑ´Ù.
void CopyString(BOOL bCopy, int from, int &to, int len)
{
TCHAR *t;
int orito=to;
t=(TCHAR *)malloc(len+1);
lstrcpyn(t,buf+from,len+1);
Insert(to,t);
if (bCopy==FALSE) {
if (to > from) {
Delete(from,len);
to-=len;
} else {
Delete(from+len,len);
}
}
free(t);
}
ù ¹ø° Àμö·Î À̵¿ÀÎÁö º¹»çÀÎÁö¸¦ Àü´Þ¹Þ´Âµ¥ ÀÌ Àμö°¡ TRUEÀÌ¸é º¹»çÀÌ´Ù. µÎ ¹ø° Àμö´Â ´ë»ó ¹®ÀÚ¿ÀÇ ½ÃÀÛ ¿ÀÇÁ¼Â, ¼¼ ¹ø° Àμö´Â À̵¿ ¶Ç´Â º¹»çÇÒ ¿ÀÇÁ¼ÂÀ̸ç 4¹ø° Àμö´Â ´ë»ó ¹®ÀÚ¿ÀÇ ±æÀÌÀÌ´Ù. À̵¿À̶ó´Â µ¿ÀÛÀº º¹»ç ÈÄ »èÁ¦¿Í °°À¸¹Ç·Î º¹»ç µ¿ÀÛÀ» ¸ÕÀú ó¸®ÇÑ´Ù. ÀӽùöÆÛ t¿¡ µå·¡±×µÈ ¹®ÀÚ¿ ±æÀ̸¸Å ¸Þ¸ð¸®¸¦ ÇÒ´çÇÑ ÈÄ ¹®ÀÚ¿À» º¹»çÇÏ°í Insert ÇÔ¼ö¸¦ È£ÃâÇÏ¿© µå·ÓµÈ À§Ä¡¿¡ ¹®ÀÚ¿À» »ðÀÔÇϱ⸸ ÇÏ¸é º¹»ç´Â ¾ÆÁÖ °£´ÜÇÏ°Ô ÀÌ·ç¾îÁø´Ù.
ÀÏ´Ü º¹»ç¸¦ ¸ÕÀú Çسõ°í bCopyÀμö°ªÀ» Á¡°ËÇÏ¿© À̵¿ÀÎÁö È®ÀÎÇØ º»´Ù. ¸¸¾à ÀÌ Àμö°¡ FALSEÀÌ¸é º¹»çµÈ ¿øº» ¹®ÀÚ¿À» »èÁ¦ÇÏ¸é µÈ´Ù. »èÁ¦ µ¿ÀÛÀº µå·ÓµÈ À§Ä¡¿¡ µû¶ó ´Þ¶óÁö´Âµ¥ ¿ø·¡ ¹®ÀÚ¿ÀÌ ÀÖ´ø ÀÚ¸®º¸´Ù ´õ µÚÂÊ¿¡ µå·ÓµÇ¾ú´Ù¸é SelStart~SelEnd »çÀ̸¦ »èÁ¦ÇÏ¸é µÈ´Ù. ¹Ý´ë·Î ¿ø·¡ ¹®ÀÚ¿º¸´Ù ´õ ¾ÕÂÊ¿¡ µå·ÓµÇ¾ú´Ù¸é »èÁ¦ÇÒ ´ë»ó ¹®ÀÚ¿ÀÇ ÀÚ¸®°¡ À̵¿µÇ¾úÀ¸¹Ç·Î ¿ÀÇÁ¼ÂÀ» Àß Á¶Á¤ÇØ¾ß ÇÑ´Ù.
À§ ±×¸²¿¡¼ ¡®À̵¿ ¡¯ ´Ü¾î¸¦ µå·¡±×ÇÏ¿© ¡®µå·¡±×¡¯ ¾Õ¿¡ µå·ÓÇß´Ù°í Çغ¸ÀÚ. ¡®À̵¿ ¡¯ÀÌ µå·ÓµÈ °÷À¸·Î º¹»çµÇ¸é¼ µ¿½Ã¿¡ µå·ÓµÈ À§Ä¡ ÀÌÈÄÀÇ ¹®ÀÚµéÀº »ðÀÔµÈ ±æÀ̸¸Å µÚ·Î ¹Ð¸°´Ù. À̶§ µå·¡±×µÇ±â ÀüÀÇ ¹®ÀÚ¿ À§Ä¡¸¦ °¡Áö°í ÀÖ´Â SelStart¿Í SelEndµµ ±×¸¸Å µÚ·Î À̵¿ÇÒ °ÍÀÌ´Ù. ±×·¡¼ ¿ø·¡ ¼±ÅÃµÈ ¹®ÀÚ¿À» Á¦´ë·Î »èÁ¦ÇÏ·Á¸é ¼±ÅÃÀÇ ½ÃÀÛÁ¡¿¡¼ ¼±Åÿµ¿ªÀÇ ±æÀ̸¸Å ´õÇØ¾ß ÇÑ´Ù.
À̵¿, º¹»ç°¡ ¿Ï·áµÈ ÈÄ¿¡´Â µå·ÓµÈ ¹®ÀÚ¿À» ¼±ÅÃÇÑ »óÅ·Π¸¸µé¾î µå·ÓµÈ ¹®ÀÚ¿ÀÓÀ» È®½ÇÇÏ°Ô º¸¿©ÁÖ°í ´ÙÀ½ ÀÛ¾÷À» ½±°Ô Çϵµ·Ï ÇÑ´Ù. µå·ÓµÈ ÀÚ¸® toff°¡ »õ·Î¿î ¼±ÅÃÀÇ ½ÃÀÛÁ¡Àε¥ µÚÂÊÀ¸·Î µå·ÓµÈ °æ¿ì´Â toffµµ ¼±Åÿµ¿ªÀÇ ±æÀ̸¸Å Á¶Á¤µÉ ¼ö ÀÖ´Ù. ±×·¡¼ CopyString ÇÔ¼öÀÇ ¼¼ ¹ø° Àμö´Â ·¹ÆÛ·±½ºÇüÀ¸·Î Àü´ÞµÇ¾î Á¶Á¤µÈ ÈÄÀÇ ¿ÀÇÁ¼Â °ªÀ» ´Ù½Ã µ¹·Á ÁÖµµ·Ï ÇÏ¿´´Ù. µå·Ó °ü·Ã Äڵ尡 Á» º¹ÀâÇغ¸ÀÌÁö¸¸ Çϳª¾¿ ÄÉÀ̽º¸¦ µûÁ® °¡¸ç Á¡°ËÇغ¸¸é ¾î·ÆÁö ¾Ê°Ô ÀÌÇØ°¡ µÉ °ÍÀÌ´Ù.
ÀÌ ½Ç½ÀÀ» ÇÏ¸é¼ ¹®ÀÚ¿ º¹»ç¿Í À̵¿Ã³¸®¿¡ Ŭ¸³º¸µå¸¦ »ç¿ëÇÏ¸é µÇÁö ¾ÊÀ»±î ÇÏ´Â »ý°¢À» ÇÑ »ç¶÷µµ ºÐ¸íÈ÷ ÀÖÀ» °ÍÀÌ´Ù. µå·¡±×ÇÑ ¹®ÀÚ¿À» Ŭ¸³º¸µå¿¡ º¹»çÇϰųª Àß¶ó³½ ÈÄ µå·ÓÇÑ °÷¿¡ ºÙ¿©³Ö±â¸¦ ÇÏ¸é ¾ÆÁÖ ±ò²ûÇÏ´Ù. Ŭ¸³º¸µå °ü·Ã ÄÚµå´Â ÀÌ¹Ì ´Ù ÀÛ¼ºµÇ¾î ÀÖÀ¸¹Ç·Î ÄÚµå´Â ´õ ÀÛ¼ºÇÒ ÇÊ¿äµµ ¾ø°í ¸Þ½ÃÁö¸¸ ¼ø¼´ë·Î º¸³»ÁÖ¸é µÉ °Í °°´Ù. ±â¼úÀûÀ¸·Î ÃæºÐÈ÷ °¡´ÉÇÏ°í Äڵ嵵 ´õ ½±´Ù.
ÇÏÁö¸¸ ÀÌ·± ¹ß»óÀº °¡´ÉÇÏ´Ù°í´Â Çصµ Àý´ë·Î ¹Ù¶÷Á÷ÇÏÁö ¾Ê´Ù. ¿Ö³ÄÇϸé Ŭ¸³º¸µå´Â ½Ã½ºÅÛ Àüü¸¦ ÅëƲ¾î ´Ü Çϳª¹Û¿¡ ¾ø´Â ¼ÒÁßÇÑ ½Ã½ºÅÛ ÀÚ¿øÀÌ°í ÀÌ Å¬¸³º¸µå¿¡ ´ëÇÑ ¼ÒÀ¯±ÇÀº ÀüÀûÀ¸·Î »ç¿ëÀÚ¿¡°Ô Àֱ⠶§¹®ÀÌ´Ù. »ç¿ëÀÚÀÇ ¸í½ÃÀûÀÎ ¸í·ÉÀÌ ¾ø´Â ÇÑ ¾î¶°ÇÑ ÇÁ·Î±×·¥µµ Ŭ¸³º¸µå¸¦ °Çµå·Á¼´Â ¾ÈµÈ´Ù.
ÀÌ·± ½Ã³ª¸®¿À¸¦ »ý°¢Çغ¸ÀÚ. »ç¿ëÀÚ´Â ÀÛ¾÷Áß¿¡ Áß¿äÇÑ SQL¹®À» Ŭ¸³º¸µå¿¡ À߶ó ³Ö¾ú´Ù. ±×¸®°í ÀÌ SQL¹®À» ºÙ¿©³ÖÀ» ÀÚ¸®·Î À̵¿ÇÑ ÈÄ º¸´Ï ±× ÀÚ¸®¿¡ ¾µµ¥ ¾ø´Â ¹®ÀåÀÌ ÀÖ¾î ¹ØÀ¸·Î µå·¡±×Çؼ À̵¿Çß´Ù. ±×¸®°í SQL¹®À» ºÙ¿©³Ö¾ú´Âµ¥ À̶§ »ðÀԵǴ ¹®ÀåÀº SQL¹®ÀÌ ¾Æ´Ï¶ó ¹æ±Ý µå·¡±×ÇÑ ¾µµ¥ ¾ø´Â ¹®ÀåÀ̶ó¸é ¾î¶»°Ô µÇ°Ú´Â°¡? ¾Æ¸¶ ApiEdit´Â ´çÀå Çϵåµð½ºÅ©¿¡¼ °¨ÂÊ°°ÀÌ »ç¶óÁú °ÍÀÌ´Ù.
Ŭ¸³º¸µå´Â ¿ÂÀüÈ÷ »ç¿ëÀÚÀÇ °ÍÀÌ¸ç »ç¿ëÀÚ¸¸ »ç¿ëÇÒ ±ÇÇÑÀÌ ÀÖ´Ù. ÇÁ·Î±×·¥ÀÌ ³»ºÎÀûÀÎ ÀÚ·á À̵¿À̳ª ´Ù¸¥ ÇÁ·Î±×·¥°ú Åë½ÅÇϱâ À§ÇÑ IPC ¹æ¹ýÀ¸·Î Ŭ¸³º¸µå¸¦ »ç¿ëÇß´Ù¸é ±×°ÍÀº Á¤¸»·Î ÁÖÁ¦³ÑÀº ÁþÀ» ÇÑ °ÍÀÌ´Ù. ¹®ÀÚ¿ µå·¡±×°¡ Á¤¸» À¯¿ëÇÑ ±â´ÉÀÎ °¡Àå Å« ÀÌÀ¯´Â Ŭ¸³º¸µå¸¦ °æÀ¯ÇÏÁö ¾Ê°í ÆíÁýÀ» ÇÒ ¼ö ÀÖ´Ù´Â Á¡ÀÌ¸ç »ç¿ëÀÚµéÀº ÀÌ »ç½ÇÀ» ÀÌ¹Ì ¾Ë°í ÀÖ´Ù. ±× ±â´ë¿¡ ºÎÀÀÇϱâ À§ÇØ CopyStringÀ̶ó´Â ÇÔ¼ö¸¦ ¾Ö½á ¸¸µç °ÍÀÌ´Ù. ¿©±â¼ ¸¸µç CopyString ÇÔ¼ö´Â ¹®¼¸¦ º¯°æÇÏ´Â ÁÖ¿ä ÇÔ¼ö Áß Çϳª·Î¼ Insert, Delete ¸¸ÅÀ̳ª Áß¿äÇÑ ¿ªÇÒÀ» ÇÏ°Ô µÈ´Ù.
¹®ÀÚ¿ µå·¡±×¸¦ À§ÇÑ ¸¶Áö¸· 󸮴 Ŀ¼¸¦ Á¦´ë·Î °ü¸®ÇÏ´Â °ÍÀÌ´Ù. <Ctrl>Å°¸¦ ´©¸£¸é ¹®ÀÚ¿ÀÌ º¹»çµÈ´Ù´Â °ÍÀ» È®½ÇÇÏ°Ô º¸¿©ÁÖ¾î¾ß ÇÏ¸ç ±×·¡¼ OnMouseMove¿¡¼ <Ctrl>Å°ÀÇ »óŸ¦ ÀÏÀÏÀÌ Ã¼Å©ÇÏ¿© Ä¿¼¸¦ º¯°æÇÏ°í ÀÖ´Ù. ÇÏÁö¸¸ ÀÌ Ã³¸®¸¸À¸·Î´Â Ä¿¼ °ü¸®°¡ ÃæºÐÇÏÁö ¾ÊÀºµ¥ Ä¿¼°¡ ¿òÁ÷ÀÌÁö ¾Ê´Â µ¿¾È¿¡µµ <Ctrl>Å°ÀÇ »óÅ°¡ º¯ÇÒ ¼ö Àֱ⠶§¹®ÀÌ´Ù. ¾î¶² °æ¿ì¶óµµ Ä¿¼ÀÇ ¸ð¾çÀ» Á¦´ë·Î º¸¿©ÁÖ°í ½ÍÀ¸¸é OnKey¿¡¼ <Ctrl>Å°ÀÇ ´©¸§°ú ³õÀ½À» Á¡°ËÇؼ Ä¿¼¸¦ ¹Ù²ã¾ß ÇÑ´Ù.
void OnKey(HWND hWnd, UINT vk, BOOL fDown, int cRepeat, UINT flags)
{
....
if (bDragSel) {
if (vk==VK_CONTROL) {
if (fDown) {
SetCursor(hCCopy);
} else {
SetCursor(hCMove);
}
}
return;
}
if (fDown==FALSE)
return;
VK_CONTROLÅ°°¡ ´·¯Á³À¸¸é º¹»ç ¸ð¾çÀÇ Ä¿¼·Î º¯°æÇÏ°í ±×·¸Áö ¾ÊÀ¸¸é À̵¿ ¸ð¾çÀÇ Ä¿¼·Î º¯°æÇÏ¿´´Ù. ¸Þ½ÃÁöÅ©·¡Ä¿°¡ WM_KEYDOWN, WM_KEYUPÀ» °°Àº ÇÔ¼ö·Î º¸³» Áֱ⠶§¹®¿¡ fDown °ªÀ» ÇÑ °÷¿¡¼ Á¡°ËÇÏ¿© Ä¿¼ »óŸ¦ º¯°æÇÒ ¼ö ÀÖ°Ô µÇ¾ú´Ù. Å°¸¦ ³õÀ» ¶§ÀÇ ¸Þ½ÃÁöµµ ¹Þ¾Æ¾ß ÇϹǷΠÀÌ ÄÚµå´Â ¹Ýµå½Ã if (fDown == FALSE) Á¶°Ç¹® ÀÌÀü¿¡ ÀÖ¾î¾ß ÇÑ´Ù. ÀÌÁ¦ Ä¿¼°¡ Á¤ÁöµÈ »óÅ¿¡¼µµ <Ctrl>Å°¸¦ ´©¸£¸é Ä¿¼¸ð¾çÀÌ ¹Ù²ð °ÍÀÌ´Ù.
OnKey¿¡¼ <Ctrl>Å°¸¦ ´©¸£°Å³ª ¶¿ ¶§¸¶´Ù Ä¿¼¸ð¾çÀ» ¹Ù²ã Áشٰí Çؼ OnMouseMoveÀÇ Ä¿¼ º¯°æ Äڵ带 »èÁ¦Çؼ´Â ¾ÈµÈ´Ù. ¿Ö ¾ÈµÇ´ÂÁö´Â Äڵ带 »èÁ¦Çغ¸¸é ¾Ë ¼ö ÀÖ´Ù.