ÀÌ Ç׸ñÀÇ ¿¹Á¦´Â ¿©·¯ ºñÆ®¸Ê ¸Þ´º Ç׸ñÀÌ Æ÷ÇÔ µÈ °¢ µÎ °³ÀÇ ¸Þ´º¸¦ ¸¸µì´Ï´Ù. °¢ ¸Þ´º¿¡ ´ë ÇÑ ÀÀ¿ë ÇÁ·Î±×·¥ ÁÖ Ã¢ ¸Þ´º ¸ðÀ½¿¡ ÇØ´ç ¸Þ´º À̸§ Ãß°¡.
ù ¹øÂ° ¸Þ´º¿¡ °¢ ¼¼ °¡Áö Â÷Æ® Á¾·ù¸¦ Ç¥½Ã ÇÏ´Â ¸Þ´º Ç׸ñÀÌ: ¿øÇü, ¼± ¹× ¹Ù. ÀÌ·¯ÇÑ ¸Þ´º Ç׸ñ¿¡ ´ë ÇÑ ºñÆ®¸Ê ¸®¼Ò½º·Î Á¤ÀÇ ÇÏ °í »ç¿ë ÇÏ ¿© ·Îµå¸¦ LoadBitmap ÇÔ¼ö. ¸Þ´º ¸ðÀ½¿¡¼ "Â÷Æ®" ¸Þ´º À̸§ÀºÀÌ ¸Þ´º¿Í ¿¬°ü µÈ.
°¢ »ç¿ë 5 ¼± ½ºÅ¸ÀÏÀ» Ç¥½Ã ÇÏ´Â ¸Þ´º Ç׸ñÀ» Æ÷ÇÔ ÇÏ´Â µÎ ¹øÂ° ¸Þ´º´Â CreatePen ÇÔ¼ö: PS_SOLID, PS_DASH, PS_DOT, PS_DASHDOT, ¹× PS_DASHDOTDOT. ÀÀ¿ë ÇÁ·Î±×·¥ GDI ±×¸®±â ±â´ÉÀ» »ç¿ë ÇÏ ¿© ·±Å¸ÀÓ¿¡ ÀÌ·¯ÇÑ ¸Þ´º Ç׸ñ¿¡ ´ë ÇÑ ºñÆ®¸ÊÀ» ¸¸µì´Ï´Ù. ÀÌ ¸Þ´º¿Í ¿¬°ü µÈÀº ¸Þ´º ¸ðÀ½¿¡¼ "¼±" ¸Þ´º À̸§.
ÀÀ¿ë ÇÁ·Î±×·¥ÀÇ Ã¢ ÇÁ·Î½ÃÀú¿¡ Á¤ÀÇ µÈ ºñÆ®¸Ê ÇÚµéÀÇ µÎ Á¤Àû ¹è¿ µË´Ï´Ù. ÇϳªÀÇ ¹è¿ Â÷Æ® ¸Þ´º¿¡ »ç¿ë µÇ´Â ¼¼ °³ÀÇ ºñÆ®¸Ê ÇÚµéÀ» Æ÷ÇÔ ÇÕ´Ï´Ù. ´Ù¸¥ ¶óÀÎ ¸Þ´º¿¡ »ç¿ë µÇ´Â 5 °³ÀÇ ºñÆ®¸Ê ÇÚµéÀ» Æ÷ÇÔ ÇÕ´Ï´Ù. WM_CREATE ¸Þ½ÃÁö¸¦ ó¸®ÇÒ ¶§ â ÇÁ·Î½ÃÀú Â÷Æ® ºñÆ®¸ÊÀ» ·Îµå ¼± ºñÆ®¸ÊÀ» »ý¼º ÇÏ °í ÇØ´ç ¸Þ´º Ç׸ñÀ» Ãß°¡ ÇÕ´Ï´Ù. WM_DESTROY ¸Þ½ÃÁö¸¦ ó¸®ÇÒ ¶§ â ÇÁ·Î½ÃÀú ¸ðµÎ ºñÆ®¸ÊÀ» »èÁ¦.
´ÙÀ½Àº ÀÀ¿ë ÇÁ·Î±×·¥ÀÇ Çì´õ ÆÄÀÏÀÇ °ü·Ã ºÎºÐ.
/ / # Define IDM_PIE 1 # # define IDM_BAR 3 # define IDM_SOLID 4 # define IDM_DASH 5 # define IDM_DASHDOT 6 # define IDM_LINE 2¸¦ Á¤ÀÇ ÇÏ´Â ¸Þ´º Ç׸ñ ½Äº°ÀÚ IDM_DASHDOTDOT 7 / / ¼ö Â÷Æ® ¹× ¶óÀÎ ¸Þ´º¿¡ ÀÖ´Â Ç׸ñÀÇ # define C_LINES 5 # define C_CHARTS 3 / / ºñÆ®¸Ê ¸®¼Ò½º ½Äº°ÀÚ # define IDB_PIE 1 # define IDB_LINE 2 # define IDB_BAR 3 / Å©±â / ¼± ºñÆ®¸ÊÀÇ # define CX_LINEBMP 40 # define CY_LINEBMP 10
´ÙÀ½Àº â ÇÁ·Î½ÃÀúÀÇ °ü·Ã ºÎºÐÀÔ´Ï´Ù. ÀÀ¿ë ÇÁ·Î±×·¥ Á¤ÀÇ LoadChartBitmaps, CreateLineBitmaps, ¹× AddBitmapMenu ÇÔ¼ö È£Ãâ,ÀÌ Ç׸ñÀÇ µÞºÎºÐ¿¡ ¼³¸í ÇÏ ¿© ´ëºÎºÐÀÇ Ãʱâȸ¦ ¼öÇà Çϴ â ÇÁ·Î½ÃÀú.
LRESULT Äݹé MainWindowProc (HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam) {Á¤Àû HBITMAP aHbmLines [C_LINES];
Á¤Àû HBITMAP aHbmChart [C_CHARTS];
int ³ª;
½ºÀ§Ä¡ (uMsg) {WM_CREATE °æ¿ì: / È£Ãâ ÇÏ´Â ÀÀ¿ë ÇÁ·Î±×·¥ Á¤ÀÇ ÇÔ¼ö¸¦ ·Îµå ÇÏ´Â /´Â / / Â÷Æ® ¸Þ´º¿¡ ´ë ÇÑ ºñÆ®¸ÊÀ» ¸¸µé°í ±×¿¡ ´ë ÇÑ / / ¶óÀÎ ¸Þ´º.
LoadChartBitmaps(aHbmChart);
CreateLineBitmaps(aHbmLines);
/¸¦ ¸¸µå´Â ÀÀ¿ë ÇÁ·Î±×·¥ Á¤ÀÇ ÇÔ¼ö¸¦ È£Ãâ ÇÏ´Â / / / ºñÆ®¸Ê ¸Þ´º Ç׸ñÀÌ Æ÷ÇÔ µÈ ¸Þ´º. ±â´É / / ¶ÇÇÑ ¸Þ´º À̸§À» À©µµ¿ìÀÇ ¸Þ´º ¸ðÀ½¿¡ Ãß°¡ ÇÕ´Ï´Ù.
AddBitmapMenu (hwnd, / / ¸Þ´º Ç¥½ÃÁÙÀÇ ¼ÒÀ¯ÀÚ Ã¢ "¾ÚÇÁ;Â÷Æ®ÀÇ °æ¿ì"/ / ÅØ½ºÆ® ¸Þ´ºÀÇ ¸Þ´º À̸§ IDM_PIE, ¹Ù / / ID ¸Þ´º Ahbmchart¿¡¼ ù ¹øÂ° Ç׸ñÀÇ / C_CHARTS¸¦ ó¸® ÇÏ´Â ºñÆ®¸ÊÀÇ ¹è¿ / / / ¸Þ´º¿¡ ÀÖ´Â Ç׸ñÀÇ ¼ö);
AddBitmapMenu (hwnd, "& ¶óÀÎ", IDM_SOLID, aHbmLines, C_LINES);
ÈÞ½Ä ½Ã°£;
WM_DESTROY »ç·Ê:¿¡ ´ë ÇÑ (I = 0; ³ < C_LINES; i + +) DeleteObject(aHbmLines[i]);
¿¡ ´ë ÇÑ (I = 0; ³ < C_CHARTS; i + +) DeleteObject(aHbmChart[i]);
PostQuitMessage(0);
ÈÞ½Ä ½Ã°£;
/ / ¿©±â ¸Þ½ÃÁö ó¸® Ãß°¡.
±âº»°ª: (DefWindowProc (hwnd, uMsg, wParam, lParam)) ¹Ýȯ;
} 0; ¹Ýȯ
}
ÀÀ¿ë ÇÁ·Î±×·¥ Á¤ÀÇ LoadChartBitmaps ÇÔ¼ö¸¦ È£Ãâ ÇÏ ¿© Â÷Æ® ¸Þ´º¿¡ ´ë ÇÑ ºñÆ®¸Ê ¸®¼Ò½º ·Îµå´Â °°ÀÌ LoadBitmap ÇÔ¼ö.
VOID WINAPI LoadChartBitmaps(HBITMAP *paHbm) {paHbm [0] = LoadBitmap (g_hinst, MAKEINTRESOURCE(IDB_PIE));
paHbm [1] = LoadBitmap (g_hinst, MAKEINTRESOURCE(IDB_LINE));
paHbm [2] = LoadBitmap (g_hinst, MAKEINTRESOURCE(IDB_BAR));
}
ÀÀ¿ë ÇÁ·Î±×·¥ Á¤ÀÇ CreateLineBitmaps ÇÔ¼ö´Â GDI ±×¸®±â ±â´ÉÀ» »ç¿ë ÇÏ ¿© ¶óÀÎ ¸Þ´º¿¡ ´ë ÇÑ ºñÆ®¸ÊÀ» ¸¸µì´Ï´Ù. ÇÔ¼ö´Â ¸Þ¸ð¸® ÀåÄ¡ ÄÁÅØ½ºÆ® (DC) ¹ÙÅÁ ȸé â DC¿Í °°Àº ¼Ó¼ºÀ¸·Î ¸¸µì´Ï´Ù. °¢ ¼± ½ºÅ¸ÀÏ¿¡ ´ë ÇÑ ÇÔ¼ö¸¦ ºñÆ®¸Ê, ¸Þ¸ð¸® DC·Î ¼±Åà ¸¸µé°í ±×°ÍÀ» ±×¸³´Ï´Ù.
VOID WINAPI Create&LineBitmaps(HBITMAP *paHbm) {HWND hwndDesktop = GetDesktopWindow();
HDC hdcDesktop = GetDC(hwndDesktop);
HDC hdcMem = CreateCompatibleDC(hdcDesktop);
COLORREF clrMenu = GetSysColor(COLOR_MENU);
HBRUSH hbrOld;
HPEN hpenOld;
HBITMAP hbmOld;
int fnDrawMode;
int ³ª;
/ / ¸Þ´º ¹è°æ»öÀ» »ç¿ë ÇÏ ¿© ºê·¯½Ã¸¦ ¸¸µì´Ï´Ù / / ¸Þ¸ð¸® DC·Î ¼±Åà ÇÕ´Ï´Ù.
hbrOld = SelectObject (hdcMem, CreateSolidBrush(clrMenu));
/ / ºñÆ®¸ÊÀ» ¸¸µì´Ï´Ù. ¸Þ¸ð¸®¿¡ °¢ÀÚ ¼±Åà / / DC´Â ¸¸µé¾îÁø ÇÏ °í ±×°Í¿¡ ±×¸³´Ï´Ù.
¿¡ ´ë ÇÑ (I = 0; ³ lt; C_LINES; i + +) {/ / ºñÆ®¸ÊÀ» »ý¼º ÇÏ °í DC·Î ¼±Åà ÇÕ´Ï´Ù.
paHbm [i] = CreateCompatibleBitmap (hdcDesktop, CX_LINEBMP, CY_LINEBMP);
hbmOld = SelectObject (hdcMem, paHbm[i]);
/ / ¹è°æ ºê·¯½Ã¸¦ »ç¿ë ÇÏ ¿© ÀÛ¼º ÇÕ´Ï´Ù.
PatBlt (hdcMem, 0, 0, CX_LINEBMP, CY_LINEBMP, PATCOPY);
/ / ÆæÀ» »ý¼º ÇÏ °í DC·Î ¼±Åà ÇÕ´Ï´Ù.
hpenOld = SelectObject (hdcMem, CreatePen (PS_SOLID + I, 1, RGB (0, 0, 0)));
/ / ¼±À» ±×¸³´Ï´Ù. ¹è°æ »ö»óÀ» º¸Á¸ ÇÏ·Á¸é ¾îµð / / ÆæÀº Èò»ö, R2_MASKPEN µå·ÎÀ× ¸ðµå¸¦ »ç¿ë ÇÕ´Ï´Ù.
fnDrawMode = SetROP2 (hdcMem, R2_MASKPEN);
MoveToEx (hdcMem, 0, CY_LINEBMP/2, NULL);
LineTo (hdcMem, CX_LINEBMP, CY_LINEBMP/2);
SetROP2 (hdcMem, fnDrawMode);
/ / ÆæÀ» »èÁ¦ ÇÏ °í ¿À·¡ µÈ Ææ ¹× ºñÆ®¸ÊÀ» ¼±Åà ÇÕ´Ï´Ù.
DeleteObject (SelectObject (hdcMem, hpenOld));
SelectObject (hdcMem, hbmOld);
} / / ºê·¯½¬¸¦ »èÁ¦ ÇÏ °í ¿ø·¡ ºê·¯½¬¸¦ ¼±Åà ÇÕ´Ï´Ù.
DeleteObject (SelectObject (hdcMem, hbrOld));
/ / ¸Þ¸ð¸® DC¸¦ »èÁ¦ ÇÏ °í ¹ÙÅÁ ȸé DC¸¦ ³õ½À´Ï´Ù.
DeleteDC(hdcMem);
ReleaseDC (hwndDesktop, hdcDesktop);
}
ÀÀ¿ë ÇÁ·Î±×·¥ Á¤ÀÇ AddBitmapMenu ÇÔ¼ö ¸Þ´º¸¦ ¸¸µé°í ±×°ÍÀ» ºñÆ®¸Ê ¸Þ´º Ç׸ñÀÇ ÁöÁ¤ µÈ ¹øÈ£¸¦ Ãß°¡ ÇÕ´Ï´Ù. ´ÙÀ½ ÁöÁ¤ÇÑ Ã¢ ¸Þ´º ¸ðÀ½¿¡ ÇØ´ç ¸Þ´º À̸§ Ãß°¡.
VOID WINAPI AddBitmapMenu (HWND hwnd / âÀº LPSTR lpszText ¸Þ´º¹Ù ¼ÒÀ¯ / / / UINT uID ¹Ù ¸Þ´º¿¡¼ ¸Þ´ºÀÇ ÅØ½ºÆ® À̸§ / HBITMAP Ç׸ñÀ» ù ¹øÂ° ºñÆ®¸Ê ¸Þ´ºÀÇ ID / * paHbm, / / ¸Þ´º¿¡ ´ë ÇÑ ºñÆ®¸Ê Ç׸ñ int cItems) / ºñÆ®¸Ê ¸Þ´º Ç׸ñ ¹øÈ£ / {HMENU hmenuBar = GetMenu(hwnd);
HMENU hmenuPopup = CreatePopupMenu();
MENUITEMINFO ¹Ì;
int ³ª;
/ / ºñÆ®¸Ê ¸Þ´º Ç׸ñÀ» ¸Þ´º¿¡ Ãß°¡ ÇÕ´Ï´Ù.
¿¡ ´ë ÇÑ (I = 0; ³ lt; cItems; i + +) {mii.fMask = MIIM_ID (ko) | MIIM_TYPE | MIIM_DATA;
mii.fType = MFT_BITMAP;
mii.wID = uID + ³ª;
mii.dwTypeData = (LPSTR) (paHbm[i]);
InsertMenuItem (hmenuPopup, ³, TRUE, & mii);
} / / ¸Þ´º Ç¥½ÃÁÙ¿¡ ¸Þ´º À̸§À» Ãß°¡ ÇÕ´Ï´Ù.
mii.fMask = MIIM_TYPE (ko) | MIIM_DATA | MIIM_SUBMENU;
mii.fType = MFT_STRING;
mii.hSubMenu = hmenuPopup;
mii.dwTypeData = lpszText;
InsertMenuItem (hmenuBar, GetMenuItemCount(hmenuBar), TRUE, & mii);
}