怎么取得弹出菜单的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);
------解决方案--------------------
就像你在资源视图那里设计菜单时,为每个菜单设置ID,如ID_MENU_OPEN等,其实这些ID,如ID_MENU_OPEN都是代表一个整数来的。
不成功可以是本身你调用 的方法不对,换种方法吧
------解决方案--------------------
学习
------解决方案--------------------
如果窗口使用菜单时用的是 SetMenu, 可以 GetMenu , 然后 GetMenuItemID
如果是 TrackPopupMenu , 可以加 TPM_RETURNCMD 标志, 返回ID
------解决方案--------------------
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);
想让程序模拟鼠标点击弹出菜单的某项。在主窗口定义了一个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);
------解决方案--------------------
就像你在资源视图那里设计菜单时,为每个菜单设置ID,如ID_MENU_OPEN等,其实这些ID,如ID_MENU_OPEN都是代表一个整数来的。
不成功可以是本身你调用 的方法不对,换种方法吧
------解决方案--------------------
学习
------解决方案--------------------
如果窗口使用菜单时用的是 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);