VC++ 按钮长按

VC++ 按钮长按,第1张

分类: 电脑/网络 >>程序设计 >>其他编程语言

问题描述:

VC++中可以识别按钮的长按与短按吗?网上有人用下面代码实现了~可我却调试不好~期待高手指点~网上的代码是这样的:

从CButton派生个类,在WM_LBUTTONDOWN的时候记下时间,在WM_LBUTTONUP的时候再记一下。

然后,在按钮处理函数里判断时延。

如:

TButton.h

class CTButton : public CButton

{

public:

CTButton()

DWORD st, ed

protected:

{{AFX_MSG(CTButton)

afx_msg void OnLButtonDown(UINT nFlags, CPoint point)

afx_msg void OnLButtonUp(UINT nFlags, CPoint point)

}}AFX_MSG

......

}

TButton.cpp

void CTButton::OnLButtonDown(UINT nFlags, CPoint point)

{

st = GetTickCount()

CButton::OnLButtonDown(nFlags, point)

}

void CTButton::OnLButtonUp(UINT nFlags, CPoint point)

{

ed = GetTickCount()

CButton::OnLButtonUp(nFlags, point)

}

dlg.cpp

void CSdaDlg::OnButton1()

{

if(m_bt.ed - m_bt.st <2000) 可以把判断写成CTButton的函数

{

AfxMessageBox("short")

}

else

{

AfxMessageBox("long")

}

}

解析:

程序我看过了 写的逻辑上没错 也没有明显的语法错误 你如果调试不错 把错误帖上来 别人才好帮你

原程序用的是 ButtonUp 触发的发送消息

你可以在ButtonDown 的时触发一个SetTimer

2秒后触发消息就行了

首先需要硬件支持,也就是单片机某个引脚可以控制断电和维持上电

按键的的作用也可以给单片机供电,并且还要有个专门的引脚检测按键状态。

软件:首先是长按判断。这个最好用按键扫描。就是检测按键按下时候,定时器计时,如果松开就立即清零。在设置一个功能函数检测定时值,大于两秒后,就表示长按。

按键按下单片机供电开始计时,如果达到长按标准,就输出引脚控制持续供电,这时候按键松了也不会断电。

运行期间,按键再次按下并符合长按,那木引脚输出停止供电,这时候如果按键松开,那就彻底没电关机。


欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/yw/12032565.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-20
下一篇2023-05-20

发表评论

登录后才能评论

评论列表(0条)

    保存