怎么取得弹出菜单的ID

如何取得弹出菜单的ID
想让程序模拟鼠标点击弹出菜单的某项。在主窗口定义了一个CMenu menu,然后用动态的方式menu.AppendMenu创建了弹出菜单项。其中第一项创建语句:
menu.AppendMenu(MF_STRING|MF_ENABLED, 10000, T("第一项"));
想用PostMessage向弹出菜单的第一项发送一个消息,以模拟鼠标点击的效果。
SendMessage(AfxGetMainWnd()->GetSafeHwnd(),WM_COMMAND,ID,NULL);
不知弹出菜单第一项的ID如何取得,或者是否可以通过菜单句柄发送消息?
请高手指点一下。
------解决方案--------------------
弹出菜单的ID一般都是自己先定义好的啊 怎么还需要去获取?直接用就是了啊
------解决方案--------------------
你是想看ID对应的数值是多少吗?是的话直接把编码的时候输入ID,按F12就能看到他的数值了
------解决方案--------------------
不知道这样行不,GetDlgItem(IDR_MENU1)->GetSafeHwnd();
我还没弄过这玩意!
------解决方案--------------------
CMenu::AppendMenu

BOOL AppendMenu( UINT nFlags, UINT nIDNewItem = 0, LPCTSTR lpszNewItem = NULL );
BOOL AppendMenu( UINT nFlags, UINT nIDNewItem, const CBitmap* pBmp );

返回值:如果成功,则返回非零值,否则为0。

参数:
nFlags 指定了增加到菜单中的新菜单项状态的有关信息。它包括说明中列出的一个或多个值。
nIDNewItem 指定了新菜单项的命令ID号,或如果nFlags被设置为MF_POPUP,该参数指定弹出菜单的菜单句柄(HMENU)。如果nFlags被设置为MF_SEPARA-TOR,那么参数NewItem将被忽略。
lpszNewItem lpszNewItem指定了新菜单项的内容。参数nFlags以下列方式解释lpszNewItem:

那个10000不是ID了吗
------解决方案--------------------
你菜单IDC_MENU的值就是10000,直接这样用试一下
SendMessage(AfxGetMainWnd()->GetSafeHwnd(),WM_COMMAND,10000,NULL);

------解决方案--------------------
::GetMenuItemID( __in HMENU hMenu,__in int nPos);

或者CMenu::GetMenuItemID(__in int nPos);
------解决方案--------------------
引用:
Quote: 引用:

CMenu::AppendMenu

BOOL AppendMenu( UINT nFlags, UINT nIDNewItem = 0, LPCTSTR lpszNewItem = NULL );
BOOL AppendMenu( UINT nFlags, UINT nIDNewItem, const CBitmap* pBmp );

返回值:如果成功,则返回非零值,否则为0。

参数:
nFlags 指定了增加到菜单中的新菜单项状态的有关信息。它包括说明中列出的一个或多个值。
nIDNewItem 指定了新菜单项的命令ID号,或如果nFlags被设置为MF_POPUP,该参数指定弹出菜单的菜单句柄(HMENU)。如果nFlags被设置为MF_SEPARA-TOR,那么参数NewItem将被忽略。
lpszNewItem lpszNewItem指定了新菜单项的内容。参数nFlags以下列方式解释lpszNewItem:

那个10000不是ID了吗


试过10000,不能成功。
引伸出一个问题,动态创建菜单项输入的整数值到底是做什么用的?


就像你在资源视图那里设计菜单时,为每个菜单设置ID,如ID_MENU_OPEN等,其实这些ID,如ID_MENU_OPEN都是代表一个整数来的。


不成功可以是本身你调用 的方法不对,换种方法吧
------解决方案--------------------
学习怎么取得弹出菜单的ID
------解决方案--------------------
如果窗口使用菜单时用的是 SetMenu, 可以 GetMenu  , 然后 GetMenuItemID
如果是 TrackPopupMenu , 可以加 TPM_RETURNCMD 标志, 返回ID
------解决方案--------------------

CPoint point;
GetCursorPos(&point);

CMenu Menu;
Menu.CreatePopupMenu(); 

UINT uId =  ID_MENU_CHART;
CString strName =_T("删除");
Menu.AppendMenu(MF_STRING,uId,strName); 

Menu.TrackPopupMenu(TPM_LEFTALIGN,point.x,point.y,this);


ID_MENU_CHART 就是ID啊
------解决方案--------------------
 BOOL CMenu::AppendMenu(
   UINT nFlags,
   UINT_PTR nIDNewItem = 0,
   LPCTSTR lpszNewItem = NULL 
);
第二个参数就是ID
PostMessage(菜单关联的主窗口HWND句柄, WM_COMMAND, MAKEWPARAM(10000, 0), 0);