ÀÌÁ¦ºÎÅÍ ¸ðµç µµÇüÀÇ ÁÂÇ¥¿Í Å©±â´Â ±×¸®µå¿¡ ¸Â°Ô Á¤·ÄµÇ¾î¾ß ÇÑ´Ù. ´ÙÀ½ ÇÔ¼ö´Â ÁÖ¾îÁø ÁÂÇ¥¸¦ ±×¸®µå °£°Ý¿¡ ¸Â°Ô Á¶Á¤ÇÑ´Ù.
void AdjustToGrid(int &x, int &y)
{
if (bGrid) {
x=x/GridX*GridX;
y=y/GridY*GridY;
}
}
ÁÖ¾îÁø °ªÀ» ±×¸®µåÀÇ ¹è¼ö À§Ä¡°¡ µÇµµ·Ï Á¶Á¤ÇßÀ¸¹Ç·Î ÁÂÇ¥¸¦ ÀÔ·ÂÇÏ¸é ±ÙÁ¢ÇÑ ±×¸®µå À§Ä¡·Î ³»¸²µÉ °ÍÀÌ´Ù. ÀÌ ÇÔ¼ö¿¡¼ bGrid º¯¼ö°ªÀ» ÂüÁ¶ÇϹǷΠÁÂÇ¥¸¦ Á¶Á¤ÇÏ´Â ¸ðµç °÷¿¡¼´Â ¿É¼ÇÀÇ ¼³Á¤ »óÅÂ¿Í »ó°ü¾øÀÌ ÁÂÇ¥¸¦ Àû¿ëÇϱâ Àü¿¡ ÀÌ ÇÔ¼ö¸¸ È£ÃâÇÏ¸é µÈ´Ù. ´ëºÎºÐ ¸¶¿ì½º Çڵ鷯¿¡¼ ÁÂÇ¥¸¦ ´Ù·ç°í ÀÖ´Ù.
LRESULT OnLButtonDown(HWND hWnd,WPARAM wParam,LPARAM lParam)
{
int TempSel;
int nHit;
if (NowTool==DT_SELECT) {
nHit=TrackerHitTest(LOWORD(lParam),HIWORD(lParam));
if (nHit != 0) {
oldx=LOWORD(lParam);
oldy=HIWORD(lParam);
AdjustToGrid(oldx,oldy);
dObj=*arObj[NowSel];
SizeCorner=nHit;
DrawTemp(&dObj);
DragMode=DM_SIZE;
} else {
TempSel=FindObject(LOWORD(lParam),HIWORD(lParam));
if (NowSel != TempSel) {
NowSel=TempSel;
InvalidateRect(hWnd,NULL,TRUE);
UpdateWindow(hWnd);
}
if (NowSel != -1) {
oldx=LOWORD(lParam);
oldy=HIWORD(lParam);
AdjustToGrid(oldx,oldy);
dObj=*arObj[NowSel];
DrawTemp(&dObj);
DragMode=DM_MOVE;
}
}
} else {
sx=LOWORD(lParam);
sy=HIWORD(lParam);
AdjustToGrid(sx,sy);
oldx=sx;
oldy=sy;
DragMode=DM_DRAW;
}
SetCapture(hWnd);
return 0;
}
LRESULT OnMouseMove(HWND hWnd,WPARAM wParam,LPARAM lParam)
{
int ex,ey;
HDC hdc;
ex=(int)(short)LOWORD(lParam);
ey=(int)(short)HIWORD(lParam);
AdjustToGrid(ex,ey);
....
µå·¡±×¸¦ ½ÃÀÛÇϱâ Àü¿¡, µå·¡±× Áß¿¡ ÀÌ ÇÔ¼ö¸¦ È£ÃâÇÏ¿© ±×¸®µå¿¡ ¸Â°Ô ÁÂÇ¥¸¦ Á¶Á¤ÇÏ¸é µÈ´Ù. Űº¸µå À̵¿ Äڵ嵵 ±×¸®µåÀÇ ¿µÇâÀ» ¹Þµµ·Ï »ó¼ö 8À» º¯¼ö·Î ¹Ù²Û´Ù.
LRESULT OnKeyDown(HWND hWnd,WPARAM wParam,LPARAM lParam)
{
....
if (bControl) {
dx=1;
dy=1;
} else {
dx=GridX;
dy=GridY;
}
....
¿©±â±îÁö ÀÛ¼ºÇÑ ÈÄ Å×½ºÆ®ÇØ º¸¸é µµÇüÀÇ ¹èÄ¡ ¹× À̵¿ÀÌ ±×¸®µå ´ÜÀ§·Î ÀÌ·ç¾îÁ® ÈξÀ ´õ ´Ù·ç±â ½¬¿ï °ÍÀÌ´Ù. ±×¸®µåÀÇ ÇÙ½ÉÀº a=a/b*b¶ó´Â ¾ÆÁÖ °£´ÜÇÑ ¼ö½ÄÀÌ´Ù.