OnPaint¿¡¼ ¼±ÅÃµÈ µµÇüÀÇ »óÅ´ ´Ù¸¥ µµÇü°ú Á¶±Ý ´Ù¸£°Ô ±×·Á¾ß Çϴµ¥ Åë»ó ¼±ÅÃµÈ µµÇü ÁÖº¯¿¡´Â 8°³ÀÇ Æ®·¡Ä¿¸¦ ±×¸°´Ù. Æ®·¡Ä¿´Â µµÇüÀÌ ¼±ÅõǾú´Ù´Â °ÍÀ» º¸¿©Áܰú µ¿½Ã¿¡ Å©±â º¯°æÀ» À§ÇÑ µå·¡±× ÇÚµé·Îµµ »ç¿ëµÈ´Ù. ´ÙÀ½ ¸ÅÅ©·Î »ó¼ö´Â Æ®·¡Ä¿ÀÇ Å©±â¸¦ ÁöÁ¤ÇÑ´Ù. °üÇàÀûÀ¸·Î ¸ÅÅ©·Î Á¤Àǹ®Àº #include ¹® ´ÙÀ½¿¡ Á¤ÀÇÇÏ´Â °ÍÀÌ ÁÁ´Ù.
// ¸ÅÅ©·Î Á¤ÀÇ
#define TRSIZE 4
Æ®·¡Ä¿´Â º¸Åë Á¤»ç°¢ÇüÀ¸·Î ±×¸®´Âµ¥ TRSIZE´Â Á¤»ç°¢ÇüÀÇ ÇÑ º¯ ±æÀÌÀÇ Àý¹ÝÀ» Á¤ÀÇÇÑ´Ù. Æ®·¡Ä¿°¡ ³Ê¹« ÀÛÀ¸¸é ºÒÆíÇÏ¸ç ³Ê¹« Å©¸é ¸ÚÀÌ ¾ø¾î ÀûÀýÇÑ Å©±â¸¦ Àß ¼±ÅÃÇØ¾ß Çϴµ¥ Å©±â º¯°æÀ» ½±°Ô ÇÒ ¼ö ÀÖµµ·Ï ¸ÅÅ©·Î »ó¼ö·Î Á¤ÀÇÇß´Ù. ´ÙÀ½ µÎ ÇÔ¼ö´Â ¼±ÅÃµÈ µµÇüÀÇ Æ®·¡Ä¿¸¦ ȸ鿡 ±×¸°´Ù.
void DrawTracker(HDC hdc,int idx)
{
RECT rt;
int i;
if (idx == -1) return;
for (i=1;i<=8;i++) {
GetTrackerRect(idx,i,&rt);
Rectangle(hdc,rt.left,rt.top,rt.right,rt.bottom);
}
}
void GetTrackerRect(int idx,int nTrack,RECT *trt)
{
int tx,ty;
RECT *ort=&arObj[idx]->rt;
switch (nTrack) {
case 1:
tx=ort->left;
ty=ort->top;
break;
case 2:
tx=ort->left+(ort->right-ort->left)/2;
ty=ort->top;
break;
case 3:
tx=ort->right;
ty=ort->top;
break;
case 4:
tx=ort->left;
ty=ort->top+(ort->bottom-ort->top)/2;
break;
case 5:
tx=ort->right;
ty=ort->top+(ort->bottom-ort->top)/2;
break;
case 6:
tx=ort->left;
ty=ort->bottom;
break;
case 7:
tx=ort->left+(ort->right-ort->left)/2;
ty=ort->bottom;
break;
case 8:
tx=ort->right;
ty=ort->bottom;
break;
}
SetRect(trt,tx-TRSIZE,ty-TRSIZE,tx+TRSIZE,ty+TRSIZE);
}
µµÇü ÇϳªÀÇ ÁÖº¯¿¡´Â 8°³ÀÇ Æ®·¡Ä¿°¡ ±×·ÁÁö´Âµ¥ Á¿¡¼ ¿ì·Î À§¿¡¼ ¾Æ·¡·Î Æ®·¡Ä¿ÀÇ ¹øÈ£¸¦ ´ÙÀ½°ú °°ÀÌ ºÎ¿©ÇØ µÎ¾ú´Ù. ÀÌ ¹øÈ£´Â ÇÁ·Î±×·¥ ³»ºÎ¿¡¼ Æ®·¡Ä¿¸¦ ĪÇϱâ À§ÇÑ ÀÏÁ¾ÀÇ ID·Î »ç¿ëµÈ´Ù. ¹øÈ£¸¦ ¾²´Â ´ë½Å #defineÀ̳ª ¿°ÅÇüÀ¸·Î TR_LEFT, TR_RIGHTTOP, TR_RIGHT µîÀÇ »ó¼ö¸¦ Á¤ÀÇÇÏ¿© »ç¿ëÇÒ ¼öµµ ÀÖ´Ù. ±×·¯³ª ÀÌ °æ¿ì´Â ¼ø¼´ë·Î ¹øÈ£¸¦ ºÙ¿´À¸¹Ç·Î ±»ÀÌ À̸§À» ÁÖÁö ¾Ê´õ¶óµµ °ü¸®ÇÏ±â ¾î·ÆÁö ¾ÊÀ¸¸ç ·çÇÁ¸¦ µ¹¸± ¶§ ¿ÀÈ÷·Á ´õ Æí¸®ÇÏ´Ù.
GetTrackerRect ÇÔ¼ö´Â µµÇüÀÇ ¹øÈ£¿Í Æ®·¡Ä¿ ¹øÈ£(nTrack)¸¦ ÀÔ·ÂÀ¸·Î ¹Þ¾Æµé¿© ÀÌ Æ®·¡Ä¿ÀÇ ¿µ¿ªÀ» ¼¼ ¹øÂ° Ãâ·Â Àμö trt¿¡ ´ëÀÔÇÑ´Ù. µµÇüÀÇ ¿µ¿ªÀ» ort Áö¿ª º¯¼ö¿¡ ±¸ÇØ ³õ°í nTrack¿¡ µû¶ó ortÀÇ ÇÑ ²ÀÁöÁ¡ ¶Ç´Â ÇÑ º¯ÀÇ Áß¾ÓÁ¡ÀÇ ÁÂÇ¥¸¦ tx, ty¿¡ ¸ÕÀú ±¸Çϰí tx, ty¸¦ Áß½ÉÀ¸·Î ÇÏ´Â TRSIZE*2 Å©±âÀÇ Á¤»ç°¢Çü ÁÂÇ¥¸¦ ±¸ÇÏ¸é µÈ´Ù. tx, ty¿¡¼ +TRSIZE, -TRSIZEÇÑ ¿µ¿ªÀ» Æ®·¡Ä¿ ¿µ¿ªÀ¸·Î Á¤ÀÇÇϹǷΠTRSIZE°¡ Æ®·¡Ä¿ Å©±âÀÇ Àý¹ÝÀÌ µÇ´Â °ÍÀÌ´Ù.
ÀÌ ÇÔ¼ö°¡ Æ®·¡Ä¿ÀÇ ÁÂÇ¥¸¦ ±¸ÇÏ´Â ÀÛ¾÷À» Àü´ãÇϰí ÀÖÀ¸¹Ç·Î DrawTracker ÇÔ¼ö´Â ÁÖ¾îÁø µµÇü¿¡ ´ëÇØ 1~8±îÁö ·çÇÁ¸¦ µ¹¸ç °¢ Æ®·¡Ä¿ ÁÂÇ¥¸¦ ±¸Çϰí Rectangle ÇÔ¼ö·Î »ç°¢Çü¸¸ ±×¸®¸é µÈ´Ù. ¸¸¾à Æ®·¡Ä¿¸¦ µ¿±×¶þ°Ô ±×¸®°í ½ÍÀ¸¸é Ellipse·Î ±×¸®¸é µÇ°í Ææ, ºê·¯½Ã¸¦ »ç¿ëÇϸé Ä÷¯Ç®ÇÏ°Ô ±×¸± ¼öµµ ÀÖ°í Á» ´õ Å©°Ô ±×¸®°í ½ÍÀ¸¸é TRSIZE ¸ÅÅ©·Î »ó¼ö¸¦ Á¶Á¤ÇÑ´Ù. OnPaint´Â ¼±Åà ¿µ¿ªÀÌ ÀÖÀ» ¶§ DrawTracker ÇÔ¼ö¸¸ È£ÃâÇÏ¸é µÈ´Ù.
LRESULT OnPaint(HWND hWnd,WPARAM wParam,LPARAM lParam)
{
....
if (NowSel != -1) {
DrawTracker(hdc,NowSel);
}
EndPaint(hWnd, &ps);
return 0;
}
Æ®·¡Ä¿¸¦ ±×¸®´Â °ü·Ã ÇÔ¼öµéÀÇ ¿ªÇÒ ºÐ´ãÀÌ Àß µÇ¾î ÀÖ´Ù. GetTrackerRect ÇÔ¼ö´Â ÀÌÈÄ Æ®·¡Ä¿ À§¿¡¼ Ä¿¼ ¸ð¾çÀ» º¯°æÇÏ´Â OnSetCursor ÇÔ¼ö¿¡¼µµ »ç¿ëµÇ¸ç µµÇü Å©±â¸¦ º¯°æÇÒ ¶§µµ »ç¿ëµÈ´Ù. ¿©·¯ ¹ø »ç¿ëµÉ ÇÔ¼öÀ̹ǷΠOnPaint³ª DrawTracker¿¡¼ ÀÛ¾÷À» Á÷Á¢ ó¸®ÇÏÁö ¾Ê°í º°µµÀÇ ÇÔ¼ö·Î ºÐ¸®ÇØ µÐ °ÍÀÌ´Ù. ÀÌ·± ÇÔ¼öÀÇ ºÐ¸®´Â óÀ½ºÎÅÍ »ý°¢Çϱâ´Â ¾î·ÆÁö¸¸ ÇÁ·ÎÁ§Æ®¸¦ ÁøÇàÇÏ´Ù º¸¸é ºÐ¸®ÇÏ´Â °ÍÀÌ ´õ ÁÁ´Ù´Â °ÍÀ» ½±°Ô ¹ß°ßÇÒ ¼ö ÀÖ´Ù. ¿©±â±îÁö Äڵ带 ÀÛ¼ºÇÑ ÈÄ Å×½ºÆ®ÇØ º¸¸é ¼±Åà »óŰ¡ ȸ鿡 Àß Ç¥½ÃµÉ °ÍÀÌ´Ù.
ÀÌ ÇÁ·Î±×·¥Àº ¼±ÅÃÀ» ´Ù¸¥ µµÇü ±×¸®±â¿Í ´ëµîÇÑ ¸ðµå·Î °£ÁÖÇϱ⠶§¹®¿¡ ¼±ÅÃÀ» ÇÏ·Á¸é ¹Ýµå½Ã ¼±ÅÃ Åø·Î ¹Ù²ã¾ß ÇÏ´Â ºÒÆíÇÔÀÌ ÀÖ´Ù. µµÇüÀ» ±×¸®´Â Áß¿¡¶óµµ ºó ¿µ¿ªÀ» Ŭ¸¯ÇÏ¸é ¼±ÅÃ Åø·Î ÀÚµ¿ ÀüȯÇϵµ·Ï ÇØ º¸ÀÚ. AppendObject ÇÔ¼ö´Â µµÇüÀÌ Ãß°¡µÇ¾ú´ÂÁö ±×³É Ŭ¸¯¸¸ µÇ¾ú´ÂÁö¸¦ ¸®ÅϰªÀ¸·Î ¾Ë·Á ÁØ´Ù. µµÇüÀÌ Ãß°¡µÇ¾ú´Ù¸é ¹æ±Ý ±×¸° µµÇüÀ» ¼±ÅÃµÈ µµÇüÀ¸·Î ¸¸µé°í ±×·¸Áö ¾Ê´Ù¸é ºó ¿©¹éÀ» Ŭ¸¯ÇÑ °ÍÀ¸·Î °£ÁÖÇÏ¿© ¼±ÅÃ Åø·Î ÀÚµ¿ ÀüȯÇϵµ·Ï ÇØ º¸ÀÚ.
LRESULT OnLButtonUp(HWND hWnd,WPARAM wParam,LPARAM lParam)
{
if (DragMode==DM_DRAW) {
if (AppendObject(NowTool,sx,sy,oldx,oldy)==TRUE) {
NowSel=arNum-1;
} else {
NowTool=DT_SELECT;
NowSel=-1;
}
InvalidateRect(hWnd,NULL,TRUE);
}
DragMode=DM_NONE;
ReleaseCapture();
return 0;
}
AppendObject´Â »õ·Î Ãß°¡µÈ µµÇüÀ» Ç×»ó ¹è¿ ³¡¿¡ Ãß°¡ÇϹǷΠ»õ·Î Ãß°¡µÈ µµÇüÀÇ Ã·ÀÚ´Â arNum-1·Î ½±°Ô ±¸ÇÒ ¼ö ÀÖ´Ù. ±×·¡¼ µµÇüÀÌ ¼º°øÀûÀ¸·Î Ãß°¡µÇ¾úÀ¸¸é arNum-1À» ¼±Åà »óÅ·Π¸¸µç´Ù. µµÇü Ãß°¡¿¡ ½ÇÆÐÇßÀ¸¸é ¼±ÅÃÀº ÇØÁ¦µÇ°í ¼±Åà ¸ðµå·Î ÀÚµ¿ ÀüȯÇÑ´Ù. µµÇüÀ» ±×¸®´Ù°¡ ¼±ÅÃÅø·Î ÀüȯÇÏ°í ½ÍÀ¸¸é ¸Þ´º¿¡¼ ¼±Åà µµ±¸·Î ÀüȯÇÒ ÇÊ¿ä¾øÀÌ ¹Ù´ÚÀ» ÇÑ ¹ø ÅоîÁÖµíÀÌ ºó ¿µ¿ªÀ» Ŭ¸¯Çϱ⸸ ÇÏ¸é µÈ´Ù.
ÀÌ·± ¹æ¹ý ¿Ü¿¡ µµÇü Çϳª¸¦ ±×¸° ÈÄ ÀÚµ¿À¸·Î ¼±ÅÃÅø·Î ÀüȯÇϵµ·Ï ÇÒ ¼öµµ Àִµ¥ ÀÌ·¸°Ô µÇ¸é µµÇü Ãß°¡ ÈÄ À̵¿À̳ª Å©±â º¯°æÀ» ¹Ù·Î ÇÒ ¼ö ÀÖ¾î Æí¸®Çϱâ´Â ÇÏÁö¸¸ °°Àº ¸ð¾çÀÇ µµÇüÀ» ¹Ýº¹ÀûÀ¸·Î ±×¸± ¶§´Â ¸Å¹ø ÅøÀ» ¼±ÅÃÇØ¾ß ÇϹǷΠ¿ÀÈ÷·Á ºÒÆíÇÑ ¸éµµ ÀÖ´Ù. ¼±ÅÃÅø Àüȯ Á¤Ã¥(Policy)Àº °°Àº µµÇüÀÇ ¹Ýº¹ Ãß°¡ ºóµµ¿¡ µû¶ó °áÁ¤ÇØ¾ß ÇÑ´Ù. °¡Àå ÁÁÀº ¹æ¹ýÀº ¼±ÅÃÅø·Î ÀÚµ¿ ÀüȯÇÏ´Â ¿©·¯ °¡Áö ¹æ¹ýÀ» Á¦°øÇÏ°í »ç¿ëÀÚ°¡ Çʿ信 µû¶ó ¿É¼ÇÀ» ¼±ÅÃÇÒ ¼ö ÀÖµµ·Ï ÇÏ´Â °ÍÀÌ´Ù.