
问题描述:
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秒后触发消息就行了
首先需要硬件支持,也就是单片机某个引脚可以控制断电和维持上电
按键的的作用也可以给单片机供电,并且还要有个专门的引脚检测按键状态。
软件:首先是长按判断。这个最好用按键扫描。就是检测按键按下时候,定时器计时,如果松开就立即清零。在设置一个功能函数检测定时值,大于两秒后,就表示长按。
按键按下单片机供电开始计时,如果达到长按标准,就输出引脚控制持续供电,这时候按键松了也不会断电。
运行期间,按键再次按下并符合长按,那木引脚输出停止供电,这时候如果按键松开,那就彻底没电关机。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)