如何定位弹出菜单的位置?

lianfengyang 2004-05-11 10:02:26
我使用CListCtrl制作列表,想在点击右键时弹出菜单,结果菜单是可以弹出,可是菜单的位置却与点击的位置离很远,我想知道怎样才能让菜单显示在点击的地方,还有一个问题就是,如果我想根据所点击的条目不同,而在选择菜单内容后,做不同的反应,是不是要根据点击位置计算出所点的条目?请大家指教
...全文
58 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
lixiaosan 2004-05-11
  • 打赏
  • 举报
回复
上面是我程序中的一段代码,你试试看
lixiaosan 2004-05-11
  • 打赏
  • 举报
回复
void CDlg::OnNMRclickListDev(NMHDR *pNMHDR, LRESULT *pResult)
{

DWORD dwPos = GetMessagePos();
CPoint point1( LOWORD(dwPos), HIWORD(dwPos) );
CPoint point2( LOWORD(dwPos), HIWORD(dwPos) );

m_list.ScreenToClient(&point2);
int nSelItem = m_list.HitTest(point2);

if (point1.x == -1 && point1.y == -1)
point1.Offset(5, 5);

if(nSelItem >= 0)
{
CMenu menu, *pPopup;
VERIFY(menu.LoadMenu(IDR_POPUP));
pPopup = menu.GetSubMenu(0);
ASSERT(pPopup != NULL);

pPopup->TrackPopupMenu(TPM_LEFTALIGN | TPM_RIGHTBUTTON, point1.x, point1.y, this);
}
*pResult = 0;
}
lixiaosan 2004-05-11
  • 打赏
  • 举报
回复
GetWindowRect()后要ScreenToClient()
快乐鹦鹉 2004-05-11
  • 打赏
  • 举报
回复
你的程序怎么写的?
快乐鹦鹉 2004-05-11
  • 打赏
  • 举报
回复
呵呵。不能用这个point。用GetCursorPos()返回的point吧
lianfengyang 2004-05-11
  • 打赏
  • 举报
回复
以下是我程序中的那段代码
void CUserList::OnRButtonDown(UINT nFlags, CPoint point)
{
// TODO: Add your message handler code here and/or call default

CClientApp* app = (CClientApp*)AfxGetApp();
HMENU hmenu = LoadMenu(AfxGetApp()->m_hInstance,MAKEINTRESOURCE(IDR_POPUP));
HMENU hpopup = GetSubMenu(hmenu, 0);
switch (TrackPopupMenu(hpopup,
TPM_RETURNCMD |
TPM_RIGHTBUTTON,
point.x, point.y,
0,
this->m_hWnd,
NULL))

{
case ID_SENDMSG:

......
}

按右键弹出的菜单几乎在屏幕的左上角,是不是应该有什么东西,可以定位一下位置

15,979

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 界面
社区管理员
  • 界面
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧