drop arrow on toolbar

 À§¿¡¼­ º¸µíÀÌ Åø¹Ù¿¡ ¸Þ´º¸¦ µ¡ºÙÀÌ´Â ¿¹Á¦ÀÔ´Ï´Ù. ¿©±â¼­´Â MRU(±âÁ¸¿¡ ºÒ·¯µé¿´´ø ÆÄÀϵé) °¡ Ç¥½ÃµÇ°Ô ÇØ³õÀº ¿¹Á¦Áö¸¸ ¸Þ´º ID¸¦ ´Ù¸¥ °É·ç ¹Ù²Ù¾î¼­ ¾²¸é ´Ù¸¥ ¸Þ´º¸í·Éµµ ³ÖÀ» ¼ö ÀÖ½À´Ï´Ù. ¹°·Ð ´ÙÀ½¿¡ ³ª¿Ã ÇÔ¼ö¿¡¼­ Á¶±Ý ¹Ù²Ü ºÎºÐÀÌ ÀÖÁö¸¸¿ä..

1. ResourceView¿¡¼­ ¸Þ´º¸¦  Ãß°¡ÇÕ´Ï´Ù. ¸Þ´º ID´Â óÀ½ »ý±ä ±×´ë·Î IDR_MENU1À̶ó°í ¾²ÁÒ.

2. »õ·Î Ãß°¡ÇÑ ÀÌ ¸Þ´º¸¦ ´ÙÀ½ ±×¸²°ú °°ÀÌ ¼Ó¼ºÀ» Á¤ÇÕ´Ï´Ù.

 À§¿Í °°ÀÌ ID¸¦ ID_FIEL_MRU_FILE1À¸·Î Á¤Çϸé(ÀÌ°Ç ±âÁ¸¿¡ ÀÖ´ø °ÅÁÒ) ±× À§Ä¡°¡ MRU·Î ¾Ë¾Æ¼­ ä¿öÁý´Ï´Ù. ±×¸®±¸ ÀÌ MRU °¹¼ö´Â µðÆúÆ®·Î 4°³·Î Á¤ÇØÁ® Àִµ¥, ÀÌ°Ç AppWizard¿¡¼­ ÇÁ·ÎÁ§Æ®¸¦ ¸¸µå´Â µµÁß¿¡ º¯°æÇÒ ¼ö ÀÖ½À´Ï´Ù.

3. ¸ÕÀú MainFrm.h¿¡´Ù°¡ ´ÙÀ½ ÇÑÁÙÀ» Ãß°¡ÇÕ´Ï´Ù.

// Generated message map functions
protected:
        //{{AFX_MSG(CMainFrame)
        afx_msg int OnCreate(LPCREATESTRUCT lpCreateStruct);
        afx_msg void OnToolbarDropDown(NMTOOLBAR* pnmh, LRESULT* plRes);  // Ãß°¡
        //}}AFX_MSG
        DECLARE_MESSAGE_MAP()
};

4. ´ÙÀ½Àº MainFrm.cpp ÆÄÀÏÀÇ ¸Þ½ÃÁö ¸Ê¿¡ Ãß°¡ÇÒ ºÎºÐÀÔ´Ï´Ù.

BEGIN_MESSAGE_MAP(CMainFrame, CFrameWnd)
        //{{AFX_MSG_MAP(CMainFrame)
        ON_WM_CREATE()
        ON_NOTIFY(TBN_DROPDOWN, AFX_IDW_TOOLBAR, OnToolbarDropDown)   // Ãß°¡
        //}}AFX_MSG_MAP
END_MESSAGE_MAP()

5. MainFrm.cpp ÆÄÀÏ¿¡ ´ÙÀ½ ÇÔ¼ö¸¦ Ãß°¡ÇÕ´Ï´Ù. ¸Þ´º°¡ ³ªÅ¸³ª´Â À§Ä¡¸¦ ¹Ù²Ù°í ½ÍÀ» ¶§³ª ¸Þ´º°¡ ID¸¦ ¹Ù²Ù¾úÀ» ¶§´Â ´ÙÀ½ ÇÔ¼öÀÇ »¡°£»ö ºÎºÐ°ú 6¹øÂ° ¼ø¼­ÀÇ »¡°£»ö ºÎºÐÀ» Àû´çÈ÷ ¹Ù²Ù¾î ÁÖ¸é µË´Ï´Ù.

void CMainFrame::OnToolbarDropDown(NMTOOLBAR* pnmtb, LRESULT *plr)
{
    CWnd *pWnd;
    UINT nID;

    // Switch on button command id's.
    switch (pnmtb->iItem)
    {
    case ID_FILE_OPEN:
        pWnd = &m_wndToolBar;
        nID = IDR_MENU1;
        break;
    default:
        return;
    }
    
    // load and display popup menu
    CMenu menu;
    menu.LoadMenu(nID);
    CMenu* pPopup = menu.GetSubMenu(0);
    ASSERT(pPopup);
    
    CRect rc;
    pWnd->SendMessage(TB_GETRECT, pnmtb->iItem, (LPARAM)&rc);
    pWnd->ClientToScreen(&rc);
    
    pPopup->TrackPopupMenu( TPM_LEFTALIGN | TPM_LEFTBUTTON | TPM_VERTICAL,
    rc.left, rc.bottom, this, &rc);
}

6. MainFrm.cpp ÆÄÀÏÀÇ OnCreate ¿¡´Ù ´ÙÀ½ÀÇ Äڵ带 Ãß°¡ÇÕ´Ï´Ù.

        // TODO: Delete these three lines if you don't want the toolbar to
        //  be dockable
        m_wndToolBar.EnableDocking(CBRS_ALIGN_ANY);
        EnableDocking(CBRS_ALIGN_ANY);
        DockControlBar(&m_wndToolBar);

    // Set the drop arrow. ' ¾Æ·¡ÀÇ ±½Àº ±Û¾¾ºÎºÐÀ» Ãß°¡ÇØ ÁÖ´Â °Ì´Ï´Ù.
    m_wndToolBar.GetToolBarCtrl().SetExtendedStyle(TBSTYLE_EX_DRAWDDARROWS);

    DWORD dwStyle = m_wndToolBar.GetButtonStyle(m_wndToolBar.CommandToIndex(ID_FILE_OPEN));
    dwStyle |= TBSTYLE_DROPDOWN;
    m_wndToolBar.SetButtonStyle(m_wndToolBar.CommandToIndex(
ID_FILE_OPEN), dwStyle);

        return 0;
}

 

(NOTE)

5¹ø°ú 6¹øÀÇ ¼ø¼­¿¡¼­ »¡°£»ö ºÎºÐÀ» Àû´çÈ÷ ¹Ù²Ù¸é ¸Þ´ºÀÇ ID³ª À§Ä¡¸¦ ¹Ù²Ü ¼ö ÀÖ½À´Ï´Ù. ±×·±µ¥ Åø¹ÙÀÇ Çڵ鷯°¡ ¾øÀ¸¸é Åø¹Ù°¡ Disable »óŸ¦ Ç¥½ÃÇÏ´Â Gray ·Î Ç¥½ÃµÇÁÒ.. ±×·± À§Ä¡¿¡¼­ ¸Þ´º¸¦ Ç¥½ÃÇÏ·Á°í ÇÏ¸é ¸Þ´ºÇ¥½ÃÇÏ´Â ºÎºÐµµ °°ÀÌ Disable »óŰ¡ µÇ´Ï ¾Ë¾ÆµÎ½Ã±æ...