其他语言

本类阅读TOP10

·基于Solaris 开发环境的整体构思
·使用AutoMake轻松生成Makefile
·BCB数据库图像保存技术
·GNU中的Makefile
·射频芯片nRF401天线设计的分析
·iframe 的自适应高度
·BCB之Socket通信
·软件企业如何实施CMM
·入门系列--OpenGL最简单的入门
·WIN95中日志钩子(JournalRecord Hook)的使用

分类导航
VC语言Delphi
VB语言ASP
PerlJava
Script数据库
其他语言游戏开发
文件格式网站制作
软件工程.NET开发
VC中为工具栏创建下拉式按扭

作者:未知 来源:月光软件站 加入时间:2005-2-28 月光软件站

实现步骤:
1、toolbar在CMainFrame::OnCreate()中被创建之后,扩展Toolbar的样式使其能够映射箭头按钮的消息。
DWORD dwExStyle = TBSTYLE_EX_DRAWDDARROWS;
m_wndToolBar.GetToolBarCtrl().SendMessage(TB_SETEXTENDEDSTYLE, 0, (LPARAM)dwExStyle);     

2、将箭头加到指定的按钮中,通过SetButtonStyle()方法实现:
DWORD dwStyle = m_wndToolBar.GetButtonStyle(m_wndToolBar.CommandToIndex(ID_SEL_MODE));
dwStyle |= TBSTYLE_DROPDOWN;
m_wndToolBar.SetButtonStyle(m_wndToolBar.CommandToIndex(ID_SEL_MODE), dwStyle);
m_wndToolBar.SetButtonStyle(m_wndToolBar.CommandToIndex(ID_VIEW_MODE), dwStyle);

3、加入箭头按钮的消息映射:
BEGIN_MESSAGE_MAP(CMainFrame, CMDIFrameWnd)
         ON_NOTIFY(TBN_DROPDOWN, AFX_IDW_TOOLBAR, OnToolbarDropDown)
END_MESSAGE_MAP()

声明消息响应函数
protected:
afx_msg void OnToolbarDropDown(NMTOOLBAR* pnmh, LRESULT* plRes);

消息响应函数:
void CMainFrame::OnToolbarDropDown(NMTOOLBAR* pnmtb, LRESULT *plr)
{
    CWnd *pWnd;
    UINT nID;

    // Switch on button command id's.
    switch (pnmtb->iItem)
    {
    case ID_SEL_MODE:
        pWnd = &m_wndToolBar;
        nID  = IDR_SEL_MODE;
        break;

 case ID_VIEW_MODE:
  pWnd = &m_wndToolBar;
  nID = IDR_VIEW_MODE;
  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);
}




相关文章

相关软件