问一个关于CMenu弹出的问题,为何无法弹出呢?
TrackPopup来弹出菜单,代码如下:
这样可以正常显示菜单,但是如果我现在想实现按住鼠标后(不放开),就是拖动,移开菜单后,然后关闭这个菜单,鼠标移动到另外的菜单上,此时鼠标未释放,但再也打不开任何菜单了,不知有什么方法可以做到呢?
我想实现鼠标拖拽到不同的菜单上时,弹出不同的菜单(鼠标不释放的情况下)
void ShowSubMenu(FAVORITE fav, int n)
{
CSimpleArray<FAVORITE> favorites = _Module.m_FavoriteConfig.GetFavoritesByNode(fav.Node);
CPoint point(m_Controls[n].rect.left, m_Controls[n].rect.bottom);
ClientToScreen(&point);
int nMenuHeight = ::GetSystemMetrics(SM_CYMENU);
int nScreenHeight = GetSystemMetrics(SM_CYFULLSCREEN);
int nMaxCount = (nScreenHeight - point.y - 50) / nMenuHeight;
CMenuHandle menu;
menu.CreatePopupMenu();
menu.AppendMenu(MF_STRING, 4000 + m_MenuFavorites.GetSize(), _T("收藏到此文件夹下"));
menu.AppendMenu(MF_STRING, 5000 + m_MenuFavorites.GetSize(), _T("打开此文件夹下所有链接"));
menu.AppendMenu(MF_SEPARATOR);
m_MenuFavorites.Add(fav);
if (favorites.GetSize() >= 0)
{
for (int i = 0; i < favorites.GetSize(); i++)
{
DWORD dwExtraAttr = ((i + 4) % nMaxCount == 0) && _Module.m_Config.GetFavoriteMultiCol() ? MF_MENUBARBREAK : 0;
FAVORITE * pFav = &favorites[i];
CString title = pFav->Title.GetLength() > 30 ? pFav->Title.Left(30) + _T("...") : pFav->Title;
if (pFav->IsFolder)
{
m_MenuFavorites.Add(*pFav);
AddSubMenu(menu, dwExtraAttr, pFav, 2);
}
else
{
menu.AppendMenu(MF_STRING | dwExtraAttr, 1000 + m_MenuFavorites.GetSize(), title);
m_MenuFavorites.Add(*pFav);
}
}
MENUINFO menuInfo;
menuInfo.cbSize = sizeof(MENUINFO);
menuInfo.dwStyle = MNS_DRAGDROP;
menuInfo.fMask = MIM_STYLE;
menu.SetMenuInfo(&menuInfo);
UINT uCmd = menu.TrackPopupMenu(TPM_LEFTBUTTON | TPM_LEFTALIGN | TPM_RETURNCMD, point.x, point.y, m_hWnd);
menu.DestroyMenu();
}
}这样可以正常显示菜单,但是如果我现在想实现按住鼠标后(不放开),就是拖动,移开菜单后,然后关闭这个菜单,鼠标移动到另外的菜单上,此时鼠标未释放,但再也打不开任何菜单了,不知有什么方法可以做到呢?
我想实现鼠标拖拽到不同的菜单上时,弹出不同的菜单(鼠标不释放的情况下)
...全文
相关推荐
个性化弹出菜单(MFC程序,CMenu派生子类)
本文将深入探讨如何使用MFC创建一个具有个性化的弹出菜单,特别是通过从CMenu类派生一个新的子类来实现带有图片显示的菜单项。
MFC CMenu使用演示
**CMenu的创建** 在MFC中,你可以通过调用`CMenu::CreateMenu()`函数来创建一个空的菜单。这个新创建的菜单对象可以附加到窗口的菜单栏,或者作为弹出菜单使用。2.
CButtonST和CMenu类
**CMenu类**CMenu类是MFC中的一个关键类,用于处理Windows应用程序的菜单。它提供了创建、修改和管理菜单的接口,使得开发者可以方便地控制程序的菜单栏和上下文菜单。1.
基于MFC的CButtonST类和CMenu类
接下来,我们转向CMenu类。CMenu类是MFC中处理菜单栏和弹出菜单的核心类。它允许程序员创建、修改、显示和销毁菜单资源。
CMenu的简介用法
【CMenu的简介用法】在Windows编程中,CMenu是MFC(Microsoft Foundation Classes)库中的一个类,用于处理Windows应用程序的菜单项。


界面
