vc弹出菜单PopMenu

a.实现函数:

void  ShowMenu(UINT* pnFlags, UINT_PTR* pnIDNewItem, TCHAR** lppNewItem, UINT nItemCount, CWnd* pParent)
{
    int i;
    LPPOINT   lpoint=new   tagPOINT; 
    ::GetCursorPos(lpoint);//得到鼠标位置 
    CMenu   menu; 
    menu.CreatePopupMenu();//声明一个弹出式菜单 
    //增加菜单项“关闭”,点击则发送消息WM_DESTROY给主窗口(已 
    //隐藏),将程序结束。 
    //
    //menu.AppendMenu(MF_STRING,WM_DESTROY, _T("导出 "));  
    for (i=0; i<nItemCount; ++i)
    {
        menu.AppendMenu((pnFlags[i]), pnIDNewItem[i], lppNewItem[i]);  
    }
    
    //确定弹出式菜单的位置 
    menu.TrackPopupMenu(TPM_LEFTALIGN,lpoint->x,lpoint->y,pParent); 
    //资源回收 
    HMENU   hmenu=menu.Detach(); 
    menu.DestroyMenu(); 
    delete   lpoint; 
}

b.调用实例:

1.xxx.h

#define UC_BROWSEDLG_EXPORT_FLOWDATA                (1001)

#define UC_BROWSEDLG_EXPORT_FLOWDATA2                (1002)


class xxx {

afx_msg void    OnUcExportFlowdata();
afx_msg void    OnUcExportFlowdata2();
}

2.xxx.cpp

BEGIN_MESSAGE_MAP(BrowseDlg, CDialog)
    ON_WM_CLOSE()
    ON_WM_SIZE()
    ON_COMMAND(UC_BROWSEDLG_EXPORT_FLOWDATA, &BrowseDlg::OnUcExportFlowdata)
    ON_COMMAND(UC_BROWSEDLG_EXPORT_FLOWDATA2, &BrowseDlg::OnUcExportFlowdata2)
END_MESSAGE_MAP()
void    BrowseDlg::OnUcExportFlowdata()
{
    MessageBox(_T("uc1"), _T("uc"), 0);
}

void    BrowseDlg::OnUcExportFlowdata2()
{
    MessageBox(_T("uc2"), _T("uc"), 0);
}

3.调用

    UINT pnFlags[2];
    UINT_PTR pnIDNewItem[2];
    TCHAR* lppNewItem[2];

    pnFlags[0] = MF_STRING;
    pnIDNewItem[0] = UC_BROWSEDLG_EXPORT_FLOWDATA;
    lppNewItem[0] = _T("导出");

    pnFlags[1] = MF_STRING;
    pnIDNewItem[1] = UC_BROWSEDLG_EXPORT_FLOWDATA2;
    lppNewItem[1] = _T("导入");

    ShowMenu(pnFlags, pnIDNewItem, lppNewItem, 2, this);

 

posted @ 2016-12-28 10:37  菠萝布丁  阅读(561)  评论(0编辑  收藏  举报