SDK编程一日一学(控件响应右键)
来源:互联网 发布:ps4热血无赖淘宝暗号 编辑:程序博客网 时间:2024/05/22 14:53
方法一是处理WM_CONTEXTMENU消息,鼠标右键单击控件都会响应这个消息,但是问题来了怎么知道单击了那个控件呢?这可能与WM_CONTEXTMENU消息的wparam和lparam有关系,我不知道这两个参数此时代表什么,但下面代码可以实现右键单击事件,先获取鼠标位置,在用WindowFromPoint获取鼠标位置处的控件句柄,然后与我们想要右键单击的那个控件句柄相比较,相等的话就弹出右键菜单。。哈哈。。该方法的确相当猥琐。。你可以查一下WM_CONTEXTMENU消息的wparam和lparam参数,看看有没有给我们提供好的方法。。
case WM_CONTEXTMENU:
{
POINT Point;
GetCursorPos(&Point);
HWND hList=GetDlgItem(hwnd,IDC_LIST1);
HWND hList2=WindowFromPoint(Point);
if(hlist==hList2)
{
TrackPopupMenu(PopMenu,TPM_LEFTALIGN,Point.x,Point.y,0,hwnd,NULL);
}
ULONG ControlId=wparam&0x0000FFFF;
break;
}
方法2:当控件被单击或其它各种击时都会发送一个WM_NOTIFY消息,这个最近我才知道,唉!早知道有这个消息,我就。。。。,好了有了这个消息,我们就可以正规的处理控件的右键功能了,当有这个消息时,wparam为发生事件的控件ID,lparam为一个指向NMHDR结构的指针,这个指针是什么呢?如下:
typedef struct tagNMHDR
{
HWND hwndFrom;
UINT idFrom;
UINT code; // NM_ code
} NMHDR;
typedef NMHDR FAR * LPNMHDR;
这个结构里面的那个code就是通知吗,这个通知吗可能是:
● NM_CLICK——用户在控件上按下了鼠标左键。
● NM_DBLCLK——用户在控件上双击鼠标左键。
● NM_KILLFOCUS——控件失去了键盘输入焦点。
● NM_OUTOFMEMORY——控件在运行中内存耗尽。
● NM_RCLICK——用户在控件上按下了鼠标右键。
● NM_RDBLCLK——用户在控件上双击鼠标右键。
● NM_RETURN——用户在控件上按下了回车键。
● NM_SETFOCUS——控件得到了键盘输入焦点。
所以要响应右键信息,只需处理NM_RCLICK即可,代码如下:
case WM_NOTIFY:
{
if(你的控件ID==wparam)
{
if(NM_RCLICK==((NMHDR*)lparam)->code)
{
做相应的操作。。
}
}
break;
}
- SDK编程一日一学(控件响应右键)
- sdk一日一学(1)---WM_DRAWITEM消息
- 一、Rxjava从头学:响应式编程
- Windows编程一日一练(1)
- windows编程一日一练(2)
- windows编程一日一练(3)
- Windows编程一日一练(1)
- windows编程一日一练(2)
- windows编程一日一练(3)
- 一日一学Oracle --- Oracle virtual column(虚拟列)
- MFC对话框中控件 添加右键响应
- mfc picture控件响应鼠标右键事件
- 汇编一日一学(1)--Hello World!
- 汇编一日一学(7)--输入输出字串
- 汇编一日一学(10)--正负数组
- 汇编一日一学(11)--输出十进制
- #C++一日一学#头文件
- 我的大学--汇编一日一学
- 火鸟数据库开发笔记
- 类的访问权限
- SDK 编程之控件
- ABAddressBook个人使用总结,联系人中、英文排序及中、英文及号码搜索
- 日韩企业模式比较
- SDK编程一日一学(控件响应右键)
- oracle 查看当前用户拥有的角色权限信息的命令
- sql语句大全
- 美国的穷人有多穷?
- java的I/O操作,读取和写入文件
- 帮助学习云计算开发的几个开源平台
- extern “C”
- 《当程序员的那些快乐日子》(六)第一次成功的面试
- 随机洗牌算法和随机选择算法