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 »óŰ¡ µÇ´Ï ¾Ë¾ÆµÎ½Ã±æ...