有谁知道QQ等聊天软件中,表情框(就是显示所有表情图片的下拉框)是怎么实现的吗?

解决方案 »

  1.   

    我曾做了一个具有下拉菜单,看对你有没有帮助:
    先在主框架类的OnCreate消息函数里创建具有下拉式风格的按钮
    m_wndToolBar.GetToolBarCtrl().SetExtendedStyle(TBSTYLE_EX_DRAWDDARROWS);
    DWORD dwStyle=m_wndToolBar.GetButtonStyle(m_wndToolBar.CommandToIndex(
    ID_HATCHED));
    dwStyle |=TBSTYLE_DROPDOWN;
    m_wndToolBar.SetButtonStyle(m_wndToolBar.CommandToIndex(ID_HATCHED),dwStyle);再手动添加消息函数afx_msg void OnToolbarDropDown(NMTOOLBAR* pnmh,LRESULT* plRes);
    同时在消息队列里:ON_NOTIFY(TBN_DROPDOWN,AFX_IDW_TOOLBAR,OnToolbarDropDown)
    函数实现:
    void CMainFrame::OnToolbarDropDown(NMTOOLBAR* pnmh,LRESULT* plRes)
    {
    CWnd *pWnd;
    UINT  nID; //在工具栏按钮中切换,寻找需要加入下拉式菜单的按钮
    switch(pnmh->iItem)
    {
    case ID_HATCHED:
    pWnd=&m_wndToolBar;
    nID=IDR_HATCH;
    break;
    default:
    return;
    } CMenu menu;
    menu.LoadMenu(nID);
    CMenu* pPopup=menu.GetSubMenu(0);
    ASSERT(pPopup); CRect rc;
    pWnd->SendMessage(TB_GETRECT,pnmh->iItem,(LPARAM)&rc);
    pWnd->ClientToScreen(&rc);

    pPopup->TrackPopupMenu(TPM_LEFTALIGN|TPM_LEFTBUTTON|
    TPM_VERTICAL,rc.left,rc.bottom,this,&rc);
    }ps:alon21(漂一族.Alon)老兄:能给我一份吗?谢谢!!
    [email protected]