问一个关于CMenu弹出的问题,为何无法弹出呢?

kbsoft kbsoft 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区
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();
}

}


这样可以正常显示菜单,但是如果我现在想实现按住鼠标后(不放开),就是拖动,移开菜单后,然后关闭这个菜单,鼠标移动到另外的菜单上,此时鼠标未释放,但再也打不开任何菜单了,不知有什么方法可以做到呢?

我想实现鼠标拖拽到不同的菜单上时,弹出不同的菜单(鼠标不释放的情况下)
...全文

相关推荐

评论 6
收藏 已收藏
分享
返回顶部
kbsoft
界面 15,976 成员 115,866 内容