¸Þ´º Ç׸ñÀÌ ºñÆ®¸ÊÀÇ ¿¹

ÀÌ Ç׸ñÀÇ ¿¹Á¦´Â ¿©·¯ ºñÆ®¸Ê ¸Þ´º Ç׸ñÀÌ Æ÷ÇÔ µÈ °¢ µÎ °³ÀÇ ¸Þ´º¸¦ ¸¸µì´Ï´Ù. °¢ ¸Þ´º¿¡ ´ë ÇÑ ÀÀ¿ë ÇÁ·Î±×·¥ ÁÖ Ã¢ ¸Þ´º ¸ðÀ½¿¡ ÇØ´ç ¸Þ´º À̸§ Ãß°¡.

ù ¹øÂ° ¸Þ´º¿¡ °¢ ¼¼ °¡Áö Â÷Æ® Á¾·ù¸¦ Ç¥½Ã ÇÏ´Â ¸Þ´º Ç׸ñÀÌ: ¿øÇü, ¼± ¹× ¹Ù. ÀÌ·¯ÇÑ ¸Þ´º Ç׸ñ¿¡ ´ë ÇÑ ºñÆ®¸Ê ¸®¼Ò½º·Î Á¤ÀÇ ÇÏ °í »ç¿ë ÇÏ ¿© ·Îµå¸¦ 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); 
} 
 

 

Index