ÇöÀç °ËÁ¤»ö Ææ¿¡ Èò»ö ºê·¯½Ã·Î¸¸ µµÇüÀ» ±×¸®¹Ç·Î Á¶±Ý ½ä··ÇÑ °¨ÀÌ Àִµ¥ µµÇü¿¡ ¼Ó¼ºÀ» ÁÖ¾î ¼±ÀÇ ±½±â¿Í »ö»ó, ¸éÀÇ »ö»óÀ» ¹Ù²Ü ¼ö ÀÖµµ·Ï ÇØ º¸ÀÚ. ApiEdit06 ÇÁ·ÎÁ§Æ®¸¦ »õ·Î ¸¸µé°í ´ÙÀ½ ½Ç½ÀÀ» ÁøÇàÇÑ´Ù. ¼Ó¼ºÀº °¢ µµÇüº°·Î ´Ù¸£°Ô ÁöÁ¤ÇÒ ¼ö ÀÖ¾î¾ß ÇϹǷΠµµÇüÀÇ Á¤º¸¸¦ ÀúÀåÇÏ´Â DObject ±¸Á¶Ã¼¿¡ °ü·Ã ¸â¹ö¸¦ Ãß°¡ÇÑ´Ù. ±â¾ïÇØ¾ßÇÒ Á¤º¸ÀÇ ¾çÀÌ ´Ã¾î³µÀ¸¹Ç·Î ÀÚ·á ±¸Á¶°¡ È®ÀåµÇ¾î¾ß ÇÑ´Ù.
struct DObject
{
DTool Type;
RECT rt;
unsigned short Flag;
short LineWidth;
COLORREF LineColor;
COLORREF PlaneColor;
};
¼±ÀÇ ±½±â, ¼± »ö»ó, ¸éÀÇ »ö»óÀ» ÁöÁ¤ÇÒ ¼ö ÀÖÀ¸¸ç »ö»óÀÇ °æ¿ì -1ÀÇ Æ¯À̰ªÀ» Åõ¸í»öÀ¸·Î Á¤ÀÇÇß´Ù. ¸éÀ» ä¿ìÁö ¾Ê´Â »ç°¢Çü°ú Ÿ¿øÀ» ±×¸± Çʿ䵵 ÀÖÀ¸¹Ç·Î ¸éÀÇ Åõ¸í 󸮵µ ¹Ýµå½Ã ÇÊ¿äÇÏ´Ù. °³º° µµÇüÀÇ ¼Ó¼ºµé ¿Ü¿¡ Àü¿ª ¿É¼ÇÀ» ±â¾ïÇÒ º¯¼öµµ ÇÊ¿äÇѵ¥ °¢ ¿É¼Çº°·Î µû·Î º¯¼ö¸¦ ¸¸µé ¼öµµ ÀÖÁö¸¸ µµÇüÀÇ ¼Ó¼ºÀÌ DObject ±¸Á¶Ã¼¿¡ Æ÷ÇԵǾî ÀÖÀ¸¹Ç·Î DObjectÇüÀÇ ±¸Á¶Ã¼ º¯¼ö Çϳª¸¦ ¼±¾ðÇϰí ÀÌ º¯¼öÀÇ ¿É¼Ç ¸â¹öµéÀ» Àü¿ª ¼³Á¤À¸·Î »ç¿ëÇÏ¸é µÈ´Ù.
DObject Opt;
Opt ±¸Á¶Ã¼ÀÇ ³ª¸ÓÁö ¸â¹ö(Type, rt, Flag)´Â »ç¿ëµÇÁö ¾ÊÀ¸¸ç ¼Ó¼º°ú °ü·ÃµÈ Á¤º¸¸¸ »ç¿ëµÈ´Ù. µµÇüÀÇ ¼Ó¼ºÀ» ÁöÁ¤ÇÏ´Â Àü¿ª ¿É¼ÇÀ» µµÇü°ú °°Àº ±¸Á¶Ã¼·Î ¼±¾ðÇϸé ÀÌÈÄ µµÇüÀÇ ¿É¼ÇÀÌ ´õ ´Ã¾î³ªµµ Àü¿ª ¿É¼Ç º¯¼ö¸¦ ´Ã¸± Çʿ䰡 ¾ø¾î È®Àå¿¡ À¯¸®ÇÏ´Ù. OnCreate¿¡¼ ´ÙÀ½°ú °°ÀÌ Àü¿ª ¿É¼ÇÀ» ÃʱâÈÇÑ´Ù.
LRESULT OnCreate(HWND hWnd,WPARAM wParam,LPARAM lParam)
{
....
Opt.Type=(DTool)-1;
Opt.LineWidth=3;
Opt.LineColor=RGB(0,0,0);
Opt.PlaneColor=RGB(0,255,0);
return 0;
}
±½±â 3ÀÇ °ËÁ¤»ö ¼±, ÃÊ·Ï»öÀÇ ¸é»ö»óÀ¸·Î ¼³Á¤Çß´Ù. Åë»ó ÀÌ·± ¼Ó¼ºÀº ½ºÅå ¿ÀºêÁ§Æ®ÀÇ ¼Ó¼º´ë·Î ±½±â 1ÀÇ °ËÁ¤»ö ¼±¿¡ Èò»öÀÇ ¸éÀ» »ç¿ëÇϴµ¥ Å×½ºÆ®ÀÇ ÆíÀǸ¦ À§ÇØ ¶Ñ·ÇÇÏ°Ô ±¸ºÐµÉ ¼ö ÀÖ´Â ¼Ó¼ºÀ» »ç¿ëÇß´Ù. ÃÖÁ¾ ¸±¸®ÁîÇÒ ¶§´Â Á» ´õ ¹«³ÇÑ ±âº»°ªÀ¸·Î º¯°æÇÏ´Â °ÍÀÌ ÁÁ´Ù. OptÀÇ TypeÀ» -1·Î ¼³Á¤ÇÏ´Â ÀÌÀ¯´Â ÀÌ ±¸Á¶Ã¼°¡ ½ÇÁ¦ µµÇü °´Ã¼°¡ ¾Æ´Ï¶ó Àü¿ª ¿É¼Ç°ªÀ» ±â¾ïÇÏ´Â ¿ëµµ·Î »ç¿ëµÈ´Ù´Â °ÍÀ» Ç¥½ÃÇÑ´Ù. ÀÌ °ªÀº Â÷ÈÄ ¼³Á¤ ´ëÈ»óÀÚ¿¡¼ Àü¿ª ¿É¼ÇÀ̶ó´Â °ÍÀ» ±¸ºÐÇϱâ À§ÇØ »ç¿ëµÇ´Âµ¥ OptÀÇ ¼³Á¤°ªÀº »õ·Î »ý¼ºµÇ´Â µµÇüÀÇ ¼Ó¼º°ªÀ¸·Î »ç¿ëµÈ´Ù. AppendObject¿¡¼ »õ·Î¿î µµÇüÀ» ¸¸µé ¶§ ÀÌ ¿É¼ÇµéÀ» µµÇü¿¡ ±â·ÏÇÑ´Ù.
BOOL AppendObject(DTool Type,int x1,int y1,int x2,int y2)
{
....
arObj[arNum]->LineWidth=Opt.LineWidth;
arObj[arNum]->LineColor=Opt.LineColor;
arObj[arNum]->PlaneColor=Opt.PlaneColor;
arNum++;
return TRUE;
}
»õ·Î Ãß°¡µÇ´Â µµÇüÀº Opt º¯¼öÀÇ Àü¿ª ¼Ó¼ºÀ» ±×´ë·Î ´ëÀÔ¹ÞÁö¸¸ µµÇüÀÌ »ý¼ºµÈ ÈÄ °³º°ÀûÀ¸·Î ¼Ó¼ºÀ» º¯°æÇÒ ¼öµµ ÀÖ´Ù. OnPaint¿¡¼´Â µµÇüÀÇ ¼Ó¼º´ë·Î Ãâ·ÂÇϴµ¥ °¢ µµÇüÀÇ ¼Ó¼º¿¡ ±â·ÏµÇ¾î Àִ´ë·Î Ææ°ú ºê·¯½Ã¸¦ ¸¸µé¾î ¼±ÅÃÇÑ ÈÄ µµÇüÀ» ±×¸®¸é µÈ´Ù. °³º° µµÇü¸¶´Ù ¼Ó¼ºÀÌ Á¦°¢°¢ÀÏ ¼ö ÀÖÀ¸¹Ç·Î ¸Å µµÇüÀ» ±×¸± ¶§¸¶´Ù GDI ¿ÀºêÁ§Æ®¸¦ »ý¼ºÇØ¾ß ÇÑ´Ù.
LRESULT OnPaint(HWND hWnd,WPARAM wParam,LPARAM lParam)
{
HDC hdc;
PAINTSTRUCT ps;
int idx;
HPEN hPen,hOldPen;
HBRUSH hBrush,hOldBrush;
hdc=BeginPaint(hWnd, &ps);
for (idx=0;idx<arNum;idx++) {
if (arObj[idx]->LineColor == (COLORREF)-1) {
hPen=(HPEN)GetStockObject(NULL_PEN);
} else {
hPen=CreatePen(PS_INSIDEFRAME,arObj[idx]->LineWidth,arObj[idx]->LineColor);
}
hOldPen=(HPEN)SelectObject(hdc,hPen);
if (arObj[idx]->PlaneColor == (COLORREF)-1) {
hBrush=(HBRUSH)GetStockObject(NULL_BRUSH);
} else {
hBrush=CreateSolidBrush(arObj[idx]->PlaneColor);
}
hOldBrush=(HBRUSH)SelectObject(hdc,hBrush);
switch (arObj[idx]->Type) {
case DT_LINE:
....
}
SelectObject(hdc,hOldPen);
SelectObject(hdc,hOldBrush);
if
(arObj[idx]->LineColor != (COLORREF)-1) {
DeleteObject(hPen);
}
if
(arObj[idx]->PlaneColor != (COLORREF)-1) {
DeleteObject(hBrush);
}
}
if (NowSel != -1) {
DrawTracker(hdc,NowSel);
}
EndPaint(hWnd, &ps);
return 0;
}
»ö»óÀÌ -1ÀÎ °æ¿ì´Â Åõ¸íÀÎ »óŸ¦ ÀǹÌÇϹǷΠNULL_PEN, NULL_BRUSH ½ºÅå ¿ÀºêÁ§Æ®¸¦ ÀûÀýÈ÷ Àß È°¿ëÇØ¾ß ÇÑ´Ù. Åõ¸í»öÀÇ °³³äÀÌ ¾øÀ¸¸é ¼ÓÀÌ ºñ¾îÀִ Ÿ¿ø°ú »ç°¢ÇüÀ» ±×¸± ¼ö ¾øÀ» °ÍÀÌ´Ù. ÆæÀº ¹Ýµå½Ã PS_INSIDEFRAME À» »ç¿ëÇØ¾ß Çϴµ¥ ±×·¸Áö ¾ÊÀ¸¸é µµÇüÀÇ ¿µ¿ª ¹Ù±ùÀ¸·Î °æ°è¼±ÀÌ »ßÁ® ³ª°¡°Ô µÈ´Ù. ¿©±â±îÁö ÀÛ¼ºÇÏ¸é ¸ðµç µµÇüÀÌ °ËÁ¤»ö 3Çȼ¿¼±, ÃÊ·Ï»ö ¸éÀ» °¡Áö°Ô µÉ °ÍÀÌ´Ù.