搜索
bottom↓
回复: 10

VC++6.0中如何实现按钮控制的mouseup/down 事件的捕捉????

[复制链接]

出0入0汤圆

发表于 2011-1-3 08:45:47 | 显示全部楼层 |阅读模式
VC++6.0中如何实现按钮控制的mouseup/down 事件的捕捉/

阿莫论坛20周年了!感谢大家的支持与爱护!!

一只鸟敢站在脆弱的枝条上歇脚,它依仗的不是枝条不会断,而是自己有翅膀,会飞。

出0入0汤圆

发表于 2011-1-3 13:55:02 | 显示全部楼层
HOOK

消息钩子编程,利用消息钩子捕捉事件!
介绍个网站:http://www.vckbase.com/

出0入0汤圆

发表于 2011-1-3 18:55:26 | 显示全部楼层
用不着勾子这么复杂的东西,处理鼠标消息就可以了

出1070入962汤圆

发表于 2011-1-3 19:01:13 | 显示全部楼层
如果要处理的是自己程序内部鼠标事件,确实只要在程序中处理相应鼠标消息就OK,
如果是处理别的进程里边的消息,就需要钩子了。楼主去CSDN翻翻吧,大把的文章。

出0入0汤圆

发表于 2011-1-3 19:07:08 | 显示全部楼层
现在号称中国最大源码搜索引擎
因有尽有。。
www.hackchina.com

出0入0汤圆

发表于 2011-1-5 17:56:48 | 显示全部楼层
mfc么?重载窗口的PreTranslateMessage函数,自己处理MSG,通过hwnd判断控件,message判断事件

出0入0汤圆

发表于 2011-1-5 19:45:50 | 显示全部楼层
5楼的方法可以,最近才用过这个东西!只是我们用的更笨的办法,在获取lbuttondown事件以后,直接去判断的鼠标所在位置对应的是哪个按键。
经过实验,如果仅响应窗口的LButtondown和UP事件的话,会发现在点空白处的时候能进到事件响应函数中,而在点具体某个按钮时不会进入事件响应函数!
我们在做这个的时候也花了好多时间,希望可以给其他兄弟一点协助。稍候回家把代码贴出来。

出0入0汤圆

发表于 2011-1-5 22:38:38 | 显示全部楼层
回复【6楼】ytangy
5楼的方法可以,最近才用过这个东西!只是我们用的更笨的办法,在获取lbuttondown事件以后,直接去判断的鼠标所在位置对应的是哪个按键。
经过实验,如果仅响应窗口的lbuttondown和up事件的话,会发现在点空白处的时候能进到事件响应函数中,而在点具体某个按钮时不会进入事件响应函数!
我们在做这个的时候也花了好多时间,希望可以给其他兄弟一点协助。稍候回家把代码贴出来。
-----------------------------------------------------------------------

重载lbuttondown消息就行了。

出0入0汤圆

发表于 2011-1-5 23:02:30 | 显示全部楼层
先把我的实现方式贴出来。
BOOL CcanshowDlg::PreTranslateMessage(MSG* pMsg)
{
        BYTE tmp = 0;

        tmp = FindButton();
        BYTE Txdata[8];
        switch(pMsg->message)
        {
        case WM_LBUTTONDOWN:
               break;
         case WM_LBUTTONUP:
               break;
         }
}
重写PreTranslateMessage这个函数,从传进来的参数中可以得到当前是什么事件发生了,然后我筛选出我需要的消息WM_LBUTTONDOWN 和 WM_LBUTTONUP
FindButton(); 用来找出是窗口上的哪个按键被按下了。实现如下:
BYTE CcanshowDlg::FindButton(void)
{
        CPoint point;
        GetCursorPos(&point);
        CWnd *pWnd;
        CRect   rc;

        pWnd = GetDlgItem(IDC_BUTTON2);
        pWnd->GetWindowRect(rc);
        if(rc.PtInRect(point))
                return 1;

        pWnd = GetDlgItem(IDC_BTFL_DW);
        pWnd->GetWindowRect(rc);
        if(rc.PtInRect(point))
                return 2;
}
可能有点笨,但达到了目的。
我元旦找了好几天,所有人在论坛上的回答都是重载lbuttondown消息就可以了。但具体怎么实现一直没有找到参考。http://www.vckbase.com/似乎有相关的东西,但好像下载都是要花钱的。
希望这点东西可以帮助到顶楼的兄弟。同时也希望有朋友可以教一下具体怎么用重载lbuttondown的方式实现“按下”“释放”两个事件分别触发。
感激不尽。

出0入0汤圆

发表于 2011-1-5 23:18:52 | 显示全部楼层
我博客中有篇文章刚好讲到这个问题。
http://blog.csdn.net/cy757/archive/2009/08/07/4424060.aspx

出0入0汤圆

发表于 2011-1-6 00:32:38 | 显示全部楼层
mark
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-6-16 09:49

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表