´ÙÀ½Àº Űº¸µå·Îµµ µµÇüÀÇ Å©±â º¯°æ ¹× À̵¿À» ÇÒ ¼ö ÀÖµµ·Ï ÇØ º¸ÀÚ. µå·ÎÀ× ÇÁ·Î±×·¥ÀÇ ÀÛ¾÷Àº ´ëºÎºÐ ¸¶¿ì½º·Î ÇÒ ¼ö ÀÖÁö¸¸ ¼¶¼¼ÇÑ À̵¿ 󸮳ª Å©±â º¯°æ¿¡´Â Űº¸µå°¡ ´õ ÀûÇÕÇÑ °æ¿ìµµ ÀÖ´Ù. Ä¿¼ À̵¿Å°¸¸ ´©¸£¸é À̵¿ 󸮸¦ Çϰí ShiftŰ¿Í ÇÔ²² ´©¸£¸é Å©±â¸¦ º¯°æÇÑ´Ù. CtrlŰ´Â 1Çȼ¿ ´ÜÀ§·Î ¹Ì¼¼ÇÏ°Ô À̵¿ ¹× Å©±â º¯°æÀ» ÇÑ´Ù. OnKeyDown¿¡ ´ÙÀ½ Äڵ带 ÀÛ¼ºÇÏÀÚ.
LRESULT OnKeyDown(HWND hWnd,WPARAM wParam,LPARAM lParam)
{
BOOL bShift, bControl;
int dx,dy;
RECT drt,crt,irt;
BOOL bAction=TRUE;
if (NowSel == -1) {
return 0;
}
bShift=((GetKeyState(VK_SHIFT) & 0x8000) != 0);
bControl=((GetKeyState(VK_CONTROL) & 0x8000) != 0);
if (bControl) {
dx=1;
dy=1;
} else {
dx=8;
dy=8;
}
drt=arObj[NowSel]->rt;
if (bShift == FALSE) {
switch(wParam) {
case VK_LEFT:
OffsetRect(&drt,-dx,0);
break;
case VK_RIGHT:
OffsetRect(&drt,dx,0);
break;
case VK_UP:
OffsetRect(&drt,0,-dy);
break;
case VK_DOWN:
OffsetRect(&drt,0,dy);
break;
default:
bAction=FALSE;
break;
}
} else {
switch(wParam) {
case VK_LEFT:
if (drt.right > drt.left + 10) {
drt.right -= dx;
}
break;
case VK_RIGHT:
drt.right += dx;
break;
case VK_UP:
if (drt.bottom > drt.top + 10) {
drt.bottom -=dy;
}
break;
case VK_DOWN:
drt.bottom += dy;
break;
default:
bAction=FALSE;
break;
}
}
if (bAction) {
GetClientRect(hWnd,&crt);
InflateRect(&crt,-10,-10);
IntersectRect(&irt,&crt,&drt);
if (!IsRectEmpty(&irt)) {
arObj[NowSel]->rt=drt;
InvalidateRect(hWnd,NULL,TRUE);
}
}
return 0;
}
Űº¸µå·Î À̵¿ ¹× Å©±â º¯°æÀ» ÇÏ´Â ´ë»óÀº ¹°·Ð ¼±ÅÃµÈ µµÇüÀÌ¸ç ¼±ÅÃÀÌ ¾ø´Ù¸é À̵¿À̳ª Å©±â º¯°æµµ ÇÒ ¼ö ¾ø´Ù. ´Ü, Űº¸µå´Â ¸¶¿ì½º¿Í ´Þ¸® ¼±ÅÃ ÅøÀÌ ¾Æ´Ò ¶§µµ »ç¿ëÇÒ ¼ö ÀÖ´Ù´Â Á¡ÀÌ ´Ù¸£´Ù. NowToolÀº ¸¶¿ì½º¸¦ ´©¸¦ ¶§ÀÇ µ¿ÀÛ¿¡ ¿µÇâÀ» ÁÖÁö¸¸ Űº¸µå¿¡´Â ¿µÇâÀ» ÁÖÁö ¾Ê´Âµ¥ ¿Ö³ÄÇÏ¸é ¾îÂ÷ÇÇ Å°º¸µå·Î´Â »õ·Î¿î µµÇüÀ» ¸¸µå´Â ¹æ¹ýÀÌ Á¦°øµÇÁö ¾Ê±â ¶§¹®ÀÌ´Ù. Űº¸µå ÀÔ·ÂÀº ¹«Á¶°Ç ¼±Åà µµÇüÀÇ À̵¿ ¶Ç´Â Å©±â º¯°æÀ¸·Î ÇØ¼®ÇÒ ¼ö ÀÖ´Ù.
½¬ÇÁƮŰ¿Í ÄÁÆ®·ÑŰÀÇ ÇöÀç »óÅ´ GetKeyState ÇÔ¼ö·Î ½±°Ô ±¸ÇÒ ¼ö ÀÖÀ¸¸ç bControl°ª¿¡ µû¶ó À̵¿ ¹× Å©±â º¯°æÀÇ ´ÜÀ§ÀÎ dx, dy°¡ ´Þ¶óÁø´Ù. bShift°¡ FALSEÀ̸é À̵¿ 󸮸¦ Çϴµ¥ µµÇüÀÇ ¿µ¿ªÀ» dx, dy¸¸Å À̵¿½ÃŰ¸é µÈ´Ù. bShift°¡ TRUEÀ̸é Å©±â º¯°æ 󸮸¦ Çϴµ¥ µµÇüÀÇ Á»ó´ÜÀº °íÁ¤ÇØ ³õ°í ¿ìÇÏ´ÜÀÇ ÁÂÇ¥¸¸ Á¶Á¤Ç쵂 Á¤±ÔÈ ¿øÄ¢À» Ç×»ó ¸¸Á·ÇÒ ¼ö ÀÖµµ·Ï ÇØ¾ß ÇÑ´Ù.
Űº¸µå·Î µµÇüÀ» ¿òÁ÷ÀÏ ¶§µµ ĵ¹ö½º ¹Ù±ùÀ¸·Î µµÇüÀÌ ³ª°¥ ¼ö ¾øµµ·Ï ¿¹¿Ü 󸮸¦ ÇÒ Çʿ䰡 ÀÖ´Ù. ۸¦ ÇÑ ¹ø ´©¸¦ ¶§¸¶´Ù µµÇüÀÇ À§Ä¡¿Í Å©±â°¡ ¹Ù²î¸ç ¸Å¹ø Àüü ȸéÀ» ´Ù½Ã ±×¸®µµ·Ï Çß´Ù. ĵ¹ö½º°¡ Ű ÀÔ·ÂÀ» ¹ÞÀ¸·Á¸é ¸ÞÀÎ À©µµ¿ì°¡ Æ÷Ä¿½º¸¦ ĵ¹ö½º¿¡°Ô ¾çº¸ÇØ¾ß ÇÑ´Ù. ´ÙÀ½ Äڵ带 Ãß°¡ÇÑ´Ù.
LRESULT Main_OnSetFocus(HWND hWnd,WPARAM wParam,LPARAM lParam)
{
SetFocus(hCanvas);
return 0;
}
WM_KEYDOWNÀº Æ÷Ä¿½º¸¦ °¡Áø À©µµ¿ì¿¡°Ô¸¸ Àü´ÞµÇ±â ¶§¹®¿¡ ºÎ¸ð°¡ ÀڽĿ¡°Ô Æ÷Ä¿½º¸¦ ¾çº¸ÇÏÁö ¾ÊÀ¸¸é ĵ¹ö½º°¡ Ű ÀÔ·ÂÀ» ¹ÞÀ» ¼ö ¾ø´Ù. ApiDrawÀÇ ¸ÞÀÎ À©µµ¿ì´Â ¾îÂ÷ÇÇ ²®µ¥±â¿¡ ºÒ°úÇϱ⠶§¹®¿¡ Æ÷Ä¿½º¸¦ °¡Áú Çʿ䰡 ÀüÇô ¾ø´Ù. ¿©±â±îÁö°¡ ApiDraw05ÀÌ´Ù.