vc如何vc 判断汉字button是否被点击?

VC++6.0中使用按钮单击,双击,自定义消息的技巧
点击图片查看原图
供货总量:
发货期限:
自买家付款之日起
最后更新:
浏览次数:
联系人齐开元(先生)
会员 [当前离线]
电话0地区天津-南开
地址九龙湾宏开道8号其士商业中心
VC++6.0中使用按钮单击,双击,自定义消息的技巧
下面主要介绍VC++6.0中使用按钮单击,双击,自定义消息的技巧。
首先介绍按钮单击,这个比较简单,只要直接在界面上双击按钮就可以写它的事件处理程序。如:
void CDlgCls::OnDoubleclickedButton1(){ // TODO: Add your control notification handlercode here AfxMessageBox( 双击按钮 );//注意此处加入的代码不能执行得到}
其次,我们介绍双击,这个稍有点难,因为用户不知道设置的话,无从下手。
用户在类向导中,生成了一个按钮的DoublceClicked事件后,但在里面填了代码,却无法执行。如
void CDlgCls::OnDoubleclickedButton1(){ // TODO: Add your control notification handlercode here AfxMessageBox( 双击按钮 );//注意此处加入的代码不能执行得到}
要使上面的代码可以执行,就得在界面上右击该按钮,并将“Notify”(即“通告”)打勾才行。否则不能执行到双击事件.当然,如果用户没有打勾也可以在PreTranslateMessage(MSG*pMsg) 中拦到双击消息,如:
BOOL CDlgCls::PreTranslateMessage(MSG* pMsg){ // TODO: Add your specialized code here and/orcall the base class if(pMsg-&message==WM_RBUTTONDBLCLK) { if(pMsg-&hwnd==::GetDlgItem(m_hWnd,IDC_BUTTON1))//可以调用PreTranslateMessage(MSG*)截获右键双击事件
AfxMessageBox( 右键双击按钮 ); }
returnCDialog::PreTranslateMessage(pMsg);}
最后重点介绍自定义消息。
第一步,请在界面所在的类的头文件中声明宏消息。如在DlgCls.h中的protected或public中声明一个消息,详见下面。
afx_msg void OnMouseClickEvent(); //此处定义一个消息
第二步,在DlgCls.cpp中映射该消息,使之与按钮 IDC_BUTTON1, 如下
BEGIN_MESSAGE_MAP(CDlgCls, CDialog) //{{AFX_MSG_MAP(CDlgCls)
ON_MESSAGE(IDC_BUTTON1,OnMouseClickEvent) //此处实现消息映射 //}}AFX_MSG_MAPEND_MESSAGE_MAP()
第三步,在DlgCls.cpp中实现该消息,如下
void CDlgCls::OnMouseClickEvent() //此处实现在头文件中定义的消息{ // TODO: Add your message handler code hereand/or call default
AfxMessageBox( 自定义消息产生点击按钮的事件 );}
最后一步,就是在某个需要的地方触发该事件。如下我们在PreTranslateMessage(MSG* pMsg)触发消息,每当用户一移动到按钮上就触发消息。
BOOL CDlgCls::PreTranslateMessage(MSG* pMsg){ // TODO: Add your specialized code here and/orcall the base class
if(pMsg-&message==WM_MOUSEMOVE) {
if(pMsg-&hwnd==::GetDlgItem(m_hWnd,IDC_BUTTON1))//可以调用PreTranslateMessage(MSG*)截获右键双击事件
CDlgCls::OnMouseClickEvent();//此处鼠标一移动到按钮IDC_BUTTON1上就会触发到OnMouseClickEvent事件
return CDialog::PreTranslateMessage(pMsg);}
最后,按CTRL+F5执行程序,马上测试一下,另外,自己作个小总结,好好领悟一下。
VC++6.0中使用按钮单击,双击,自定义消息的技巧由香港商路通商务咨询有限公司提供,该企业负责VC++6.0中使用按钮单击,双击,自定义消息的技巧的真实性、准确性和合法性。商务路路通对此不承担任何保证责任。VC &&&&最新内容
VC &&&&随机内容查看: 5580|回复: 8
如何使用SendMessage函数实现模拟鼠标点击按钮事件?(内有两种代码比较)
阅读权限30
普通会员, 积分 296, 距离下一级还需 4 积分
用SPY++获得了QQ连连看的 开始按钮坐标!
利用坐标写了如下代码:
& & & & m_hGame = FindWindow(NULL, &QQ游戏 - 连连看角色版&);
& & & & lparam = ((562)&&16) + 664;
& & & & lparam = ((562)&&16)+(664);
& & & & SendMessage(m_hGame, WM_LBUTTONDOWN, 0, lparam);
& & & & SendMessage(m_hGame, WM_LBUTTONUP, 0, lparam);
& & & & SendMessage(m_hGame, WM_LBUTTONDOWN, 0, lparam);
& & & & SendMessage(m_hGame, WM_LBUTTONUP, 0, lparam);
上述代码不能实现开始按钮的点击这是怎么回事???
上述代码应该是属于软件模拟,所以我尝试了使用硬件模拟:
& & & & & & //获取游戏窗口句柄
& & & & & & HWND
& & & & & & gameh=::FindWindow(NULL,&QQ游戏 - 连连看角色版&);
& & & & & & CRect r1;
& & & & & & ::GetWindowRect(gameh,&r1);
& & & & & &
& & & & & & //保存当前鼠标指针
& & & & & && & //取得当前鼠标位置
& & & & & & CP
& & & & & & GetCursorPos(&p);
& & & & & & //设置鼠标指针位置&&取开局所在坐标:x=655;y=577 //lparam 0x0241028f
& & & & & & SetCursorPos(655+r1.left,577+r1.top);
& & & & & & //模拟鼠标的 单击(鼠标按下/鼠标抬起)
& & & & & & //MOUSEEVENTF_LEFTDOWN Specifies that the left button is down.
& && && && && &//MOUSEEVENTF_LEFTUP
& & & & & & //鼠标在当前位置按下
& & & & & & mouse_event(MOUSEEVENTF_LEFTUP,0,0,0,0);
& & & & & & mouse_event(MOUSEEVENTF_LEFTDOWN,0,0,0,0);
& & & & & & //鼠标在当前位置抬起
& & & & & & mouse_event(MOUSEEVENTF_LEFTUP,0,0,0,0);
& & & & & & //还原鼠标位置
& & & & & & Sleep(200);//过一段时间 再执行后边的代码
& && && && && & SetCursorPos(p.x,p.y);
利用这段代码就正确实现了开始按钮的点击!
这两段代码在逻辑上应该是一样的,但是为什么有两种不一样的结果产生?
怎么在后台模拟这个开始按钮的点击事件呢?或者如何正确使用SendMessage实现鼠标点击开始按钮这个事件呢?
发帖求助前要善用【】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请编辑帖子并把分类改成【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【热心】和【驿站币】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
阅读权限200
SendMessage 改成 PostMessage 试试……
发帖求助前要善用【】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请编辑帖子并把分类改成【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【热心】和【驿站币】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
阅读权限60
铜牌会员, 积分 1159, 距离下一级还需 341 积分
教程里讲过,有的程序会检测鼠标的位置来防止自动点击.所以要用硬件的方式进行点击.另外,开始界面程序有一定延时,要有SLEEP .
发帖求助前要善用【】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请编辑帖子并把分类改成【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【热心】和【驿站币】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
阅读权限30
普通会员, 积分 296, 距离下一级还需 4 积分
ge1044 发表于
教程里讲过,有的程序会检测鼠标的位置来防止自动点击.所以要用硬件的方式进行点击.另外,开始界面程序有 ...
延迟设置我也有试过还是不行& &应该不会吧我用鼠标模拟点击连连看棋子的时候用SendMessage按键模拟是能够成功的·
发帖求助前要善用【】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请编辑帖子并把分类改成【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【热心】和【驿站币】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
阅读权限60
铜牌会员, 积分 1159, 距离下一级还需 341 积分
shy88488 发表于
延迟设置我也有试过还是不行& &应该不会吧我用鼠标模拟点击连连看棋子的时候用SendMessage按键模拟是能够 ...
你再看看郁金香的视频,我记得到最后游戏的界面都去掉了.
发帖求助前要善用【】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请编辑帖子并把分类改成【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【热心】和【驿站币】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
阅读权限30
普通会员, 积分 296, 距离下一级还需 4 积分
Syc 发表于
SendMessage 改成 PostMessage 试试……
一样的·············
发帖求助前要善用【】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请编辑帖子并把分类改成【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【热心】和【驿站币】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
阅读权限60
铜牌会员, 积分 1355, 距离下一级还需 145 积分
楼主去找一下..鼠标点击也应该有相应的事件,试着去把发送消息那两行代码,换成相应的鼠标点击事件的发起吧...
发帖求助前要善用【】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请编辑帖子并把分类改成【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【热心】和【驿站币】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
阅读权限60
铜牌会员, 积分 1355, 距离下一级还需 145 积分
本帖最后由 malliarage699 于
10:58 编辑
原来第二个例子就是事件发起的吖..
个人的理解是这样子,消息发送给对应窗体之后,对应窗体会有对应的消息处理函数.
楼主的情况大概是消息处理函数中,当判断为鼠标点击消息的时候,并没有发起鼠标点击事件.
在windows中,相应的操作,键盘和鼠标的操作,是通过捕获事件,对事件进行处理来完成的.
也就是说,你的每一次操作,键盘和鼠标的操作,如鼠标的左击,左击点击之后,想交给操作系统来完成,即是按操作的做法来完成的话.你应该是发起事件..这大概是因为windows系统中对这些操作的处理并不是在捕获到相应的消息时执行的,而是在获取到相应的事件之后处理的.
所以当你敲击一个键盘按钮的时候,会有一按键消息发送出去,而在这个消息的处理函数中,会帮你发起相应按键的事件.
发帖求助前要善用【】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请编辑帖子并把分类改成【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【热心】和【驿站币】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
阅读权限30
普通会员, 积分 296, 距离下一级还需 4 积分
ge1044 发表于
你再看看郁金香的视频,我记得到最后游戏的界面都去掉了.
恩恩还是谢谢了
发帖求助前要善用【】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请编辑帖子并把分类改成【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【热心】和【驿站币】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
站长提醒 /2
本着让大家学习到更多更好的VC++编程技术,选择一个适合自己的方向发展下去。VC驿站从即日起招聘教程讲师,主要是VC++方向,可以涉及安全类、破解类、编程开发类等等。
期待您的加盟。。。
为了能给广大编程爱好者提供一个更好的学习交流平台,从即日起面向广大网友特举办《发原创得奖励》活动。Vip教程,驿站U盘,无线鼠标 免费送,礼品丰厚,赶快来参加吧!
VC驿站微信公众号cctry2009
Powered by Discuz! X3.2输入您需解决的
软件开发问题并开始搜索,
IT异常查询网可以方便地提供各类
程序错误解决方案。
怎么让vc里的按钮禁用但是颜色不变灰,和正常按钮一样,只是不能点 - VC/MFC
&&&发布于: 21:54:54&&&
如何让vc里的按钮禁用但是颜色不变灰,和正常按钮一样,只是不能点。我需要控制一个开关必要时禁用,但是禁用以后很难看,我希望禁用时保留正常时的状态,网上找了代码说
& CMainFrame::CMainFrame() &
& this-& m_bAutoMenuEnable=FALSE; &
但是我的是基本dlg类,没有CMainFrame,也没有m_bAutoMenuEnable
还有说不影射消息响应函数就行,具体怎么做呢?------解决的方法--------------------------------------------------------禁用以后的状态比较明显啊,显不好看的话,可以在WM_PAINT中处理,爱搞成什么样子都行
------解决的方法--------------------------------------------------------可以自己定义一个成员变量保存按钮的状态。
class CXXXDlg
BOOL m_bIsD
然后在对应的响应函数中使用:
void XXX::OnButtonClick()
if(m_bIsDisable)//如果按钮被禁用
//返回,不执行任何操作
///在下面添加按钮未被禁用时的处理
------解决的方法--------------------------------------------------------仅对按钮来说,实现上很简单:
看你的那小段程序估计你是用MFC的,那么就从CButton类派生一个子类,给子类增加对WM_LBUTTONDOWN消息的处理。在你的处理函数里测试一个标志变量。希望允许按钮被点击时,将调用直接传给父类的OnLButtonDown,此时由于父类的OnLButtonDown默认的调Default从而实现的按钮的点击行为。不希望允许按钮被点击时,只需什么也不错即可。
------解决的方法--------------------------------------------------------如果是工具栏,做一个正常时的图象,作一个灰时的图象,CToolBarCtrl::SetImageList ,CToolBarCtrl::SetDisabledImageList来设置,包两个图象绘来一样不就是你要的结果。
相关解决方法
你也许会喜欢
Web前端&&热门解决方法
Web前端&&最新解决方法
Web前端&&随机解决方法
诚心交换友情链接:qq:}

我要回帖

更多关于 vc 判断汉字 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信