如何在 CMyDialog 中用纯 API 实现弹出菜单?    1. 菜单需要动态创建,而不是从资源中读取。
    2. 我知道大概要用到 CreatePopupMenu(), InsertMenuItem(), TrackPopupMenu(), MENUITEMINFO 等内容。但就是不能正确写出程序来。
    3. 在使用 MENUITEMINFO 生成新菜单项的时候,编译器老是说 MIIM_STRING(也许这里写错了,但在程序中绝对没有写错) 没有定义,而且包含了 winuser.h 之后仍然如此 (注:我用的是 WindowsXP)。
    4. 请大家帮个忙,最好能给出可以用的实例,谢谢!

解决方案 »

  1.   

    why use API when you can use CMenu class, for example:void CTestDlgMenuDlg::OnRButtonDown(UINT nFlags, CPoint point) 
    {#define ID_TST1 100
    #define ID_TST2 101 ClientToScreen( &point ); CMenu PM;
    ASSERT(PM.CreatePopupMenu( ));
    ASSERT(PM.AppendMenu( MF_ENABLED | MF_UNCHECKED |
    MF_STRING,
    ID_TST1, _T("Test&1")));
    ASSERT(PM.AppendMenu( MF_ENABLED | MF_UNCHECKED |
    MF_STRING,
    ID_TST2, _T("Test&2"))); ASSERT(PM.TrackPopupMenu( TPM_LEFTALIGN, point.x,
    point.y, this)); CDialog::OnRButtonDown(nFlags, point);
    }
      

  2.   

    用 CMenu 很简单,我知道,但是我的项目中不允许使用 MFC,所以我只能用 API,请告诉我如何用 API 完成这个功能。我说的在 CDialog 中,只是说我实验的时候用的 CDialog。在项目的是一点 MFC 也不用的。
      

  3.   

    嘿嘿,最easy的办法跟踪一下CMenu的函数看它是怎样create的不就知道了么
      

  4.   

    CMenu menu;
    menu.CreatePopupMenu();
    men.AppendMenu(MF_STRINTG,..).
    TrackPopupMenu(..)
      

  5.   

    老兄,我要用纯 API,包括生成菜单都用纯 API,一点 MFC 也不用。
      

  6.   

    see an example here:http://www.kumei.ne.jp/c_lang/sdk/sdk_46.htm
      

  7.   

    其实答案很简单的,用 AppentMenu 函数就可以了。我一直以为只能用 InsertMenuItem 函数,结果老出问题。好了,谢谢大家!