LISTBOX用鼠标右键选择一项的同时弹菜单(有代码)不过出问题了

来源:百度知道 编辑:UC知道 时间:2024/05/18 07:19:15
我派生了个LISTBOX处理鼠标右键的类,代码如下,本来思路是处理鼠标右键在列表框里点下的时间,模拟鼠标在点右键的位置点击左键实现选择列表某项的功能(直觉告诉我,这有点蒙人,不过我知道的函数不多,只能凑合了~),但是加了菜单弹出后,居然总是选不了项目,把菜单弹出的函数注释起来就能用鼠标右键实现鼠标左键的选择功能了,郁闷,我在GETSUBMENU前加上了Sleep(3000)都没反映,哪位高手指点指点,不胜感激~谢谢
void MYlistbox::OnRButtonDown(UINT nFlags, CPoint point)
{
// TODO: Add your message handler code here and/or call default
CMenu menu;
POINT p;
GetCursorPos(&p); //获得鼠标坐标
SetCursorPos(p.x,p.y);
mouse_event(MOUSEEVENTF_LEFTDOWN,0,0,0,0);
mouse_event(MOUSEEVENTF_LEFTUP,0,0,0,0);

menu.LoadMenu(IDR_MENU1); //读取资源
menu.GetSubMenu(0)->TrackPopupMenu(TPM_LEFTALIGN|TPM_LEFTBUTTON, p.x, p.y, this) ;//弹出自定义右键菜单

CListBox::OnRButtonDown(nFlags, point);
}
CListBox::OnRButtonDown(nFlags, point); //看看这句*****************************

加上去没用啊,我把POINT该成P也不好用。。。而且还有个问题,OnRButtonDown,在MSDN里是CWND的成员函数,怎么可以CListBox::OnRButtonDown(nFlags, point); 用CListBox::调用呢?希望有高手回答一下

移动到

不是叫你加一句,而是叫你将最后一句移动到***指定的位置,这样应该可以了吧.

你这样做确实不行.这样做:
void MYlistbox::OnRButtonDown(UINT nFlags, CPoint point)
{
// TODO: Add your message handler code here and/or call default
CMenu menu;
POINT p;
GetCursorPos(&p); //获得鼠标坐标
SetCursorPos(p.x,p.y);
mouse_event(MOUSEEVENTF_LEFTDOWN,0,0,0,0); //可以不要
mouse_event(MOUSEEVENTF_LEFTUP,0,0,0,0); //可以不要

CListBox::OnRButtonDown(nFlags, point); //看看这句*****************************

menu.LoadMenu(IDR_MENU1); //读取资源
menu.GetSubMenu(0)->TrackPopupMenu(TPM_LEFTALIGN|TPM_LEFTBUTTON, p.x, p.y, this) ;//弹出自定义右键菜单
}