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秒后触发消息就行了

可以的用Keyevent这个函数来实现,就是写一个循环来调用Keyevent是某一个键不停销滚的被按下,释销斗陵放。

VOID keybd_event( BYTEbVk, BYTEbScan, DWORDdwFlags, DWORDdwExtraInfo)

Windows提供了一个模拟键盘API函数Keybd_event(),使用该函数可以相应的屏蔽键盘的动作。Keybd_event()函数能触发一个按键事件,也就是说会产生一个WM_KEYDOWN或WM_KEYUP消息。

该函数原型如下:

VOID keybd_event(

BYTE bVk, // virtual-key code

BYTE bScan, // hardware scan code

DWORD dwFlags, // flags specifying various function options

DWORD dwExtraInfo // additional data associated with keystroke

)

从原型可以看出,Keybd_event()共有四个参数

第一个为按键的虚拟键值,如回车键为vk_return, tab键为vk_tab(其他具体的参见附录:常用模拟键的键值对照表);

第二个参数为扫描码,一般不用设置,用0代替就行;

第三个参数为选项标志,如果为keydown则置0即可,如果为keyup则设成"KEYEVENTF_KEYUP";

第四个参数一般也是置0即可。

例子1:模拟按下'A'键

keybd_event(65,0,0,0)

keybd_event(65,0,KEYEVENTF_KEYUP,0)

例子2:模拟按下'亏戚ALT+F4'键

keybd_event(18,0,0,0)

keybd_event(115,0,0,0)

keybd_event(115,0,KEYEVENTF_KEYUP,0)

keybd_event(18,0,KEYEVENTF_KEYUP,0)

WM_LBUTTONDOWN 如果亩衫你用消息 可以根据电判断

如瞎耐塌果是MFC

建议重磨圆写PreTranslateMessage

BOOL CXXXXXDlg::PreTranslateMessage(MSG* pMsg)

{

if(pMsg->message == WM_LBUTTONDOWN)

{

if(pMsg->hwnd == ((CWnd*)GetDlgItem(IDC_BTDOME_01))->m_hWnd)

处理;

}}


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

原文地址: http://outofmemory.cn/yw/12563577.html

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

发表评论

登录后才能评论

评论列表(0条)

保存