film indir
Aralık
11th 2007
MFC ile DropDown ToolBar oluşturmak

Posted under C# (csharp)



Bu makalede Internet Explorer ve MS-Word gibi uygulamalarda gördüğümüz DropDown özellikli ToolBar’ ları nasıl yapacağımızı göreceğiz.Öncelikle bir ToolBar’ın Butonlarının DropDown özelliğine sahip olması için ToolBar nesnesinin TBSTYLE_EX_DRAWDARROWS özelliğinin set edilmiş olması gerekir. Bu özelliği set edilmiş ToolBar ‘da eğer kullanıcı DropDown oklardan birine basarsa ToolBar’ ın parent penceresine bir TBN_DROPDOWN gönderilir. Burada yapılacak şey Internet Explorer’daki gibi bir menü çıkararak bu mesaja cevap vermek olacaktır. Şimdi bunları adım adım yapalım.

Önce ToolBar nesnemizin TBSTYLE_EX_DRAWDARROWS özelliğini set edelim.

Artık ToolBar’ımız DropDown okunu gösterebilir duruma geldi. Ancak hiçbir butonu oklara sahip değil. Biz Yardım Butonuna bu özelliği ekleyelim. Bunu da az önce eklediğimiz satırların altına şu satırları ekleyerek yapabiliriz.

DWORD Style = m_wndToolBar.GetButtonStyle(m_wndToolBar.CommandToIndex(ID_APP_ABOUT));
Style |= TBSTYLE_DROPDOWN;
m_wndToolBar.SetButtonStyle(m_wndToolBar.CommandToIndex(ID_APP_ABOUT), Style);

Burada Yardım butonuna basıldığında çıkacak menüyü de hazırlamamız gerekiyor. Bu menüyü hazırlayıp IDR_MENU_YARDIM ismini verelim.

Bundan sonra yapacağımız CMainFrame ‘in mesaj haritasına WM_NOTIFY handlerini eklemek ve buna karşılık çağırılacak OnToolBarDropDown() fonksiyonumuzu yazmaktır.

BEGIN_MESSAGE_MAP(CMainFrame, CMDIFrameWnd)
//{{AFX_MSG_MAP(CMainFrame)

ON_NOTIFY(TBN_DROPDOWN, AFX_IDW_TOOLBAR, OnToolBarDropDown)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
void CMainFrame::OnToolBarDropDown(NMTOOLBAR* pnmtb, LRESULT *plr)
{
CWnd *pWnd;
UINT nID;
switch (pnmtb->iItem)
{
case ID_APP_ABOUT:
pWnd = &m_wndToolBar;
nID = IDR_MENU1;
break;
default:
return;
}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);
}


//{{AFX_MSG(CMainFrame)

afx_msg void OnToolBarDropDown(NMTOOLBAR* pnmh, LRESULT* plRes);
//}}AFX_MSG

Trackback URI | Comments RSS

Yorum Yaz - Leave a Reply