持续按住按钮的问题

joyccccee 2011-04-11 03:48:40
现在有一个按钮IDC_BTN_ADD,一个编辑框IDC_EDIT1。每点击一下按钮,编辑框中的数字会加一。我想做的是一直按住按钮不放,编辑框中的数字会持续增加,直到不再点击。要怎么做呢?希望高手细心指点,谢谢!
...全文
263 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
Dreadnought 2011-04-12
  • 打赏
  • 举报
回复
[Quote=引用 12 楼 joyccccee 的回复:]

引用 11 楼 huangcheng90 的回复:
引用 10 楼 joyccccee 的回复:

引用 9 楼 visualeleven 的回复:
引用 8 楼 joyccccee 的回复:
引用 6 楼 huangcheng90 的回复:
引用 2 楼 visualeleven 的回复:

重写CButton类,处理WM_LBUTTONDOWN、WM_LBUTTONUP、WM……
[/Quote]
已发送,请查收
joyccccee 2011-04-12
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 huangcheng90 的回复:]
引用 10 楼 joyccccee 的回复:

引用 9 楼 visualeleven 的回复:
引用 8 楼 joyccccee 的回复:
引用 6 楼 huangcheng90 的回复:
引用 2 楼 visualeleven 的回复:

重写CButton类,处理WM_LBUTTONDOWN、WM_LBUTTONUP、WM_TIMER消息,设置一个BOOL标记,DOWN的时候为……
[/Quote]
ilovemobnkey@163.com谢谢你
Dreadnought 2011-04-12
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 joyccccee 的回复:]

引用 9 楼 visualeleven 的回复:
引用 8 楼 joyccccee 的回复:
引用 6 楼 huangcheng90 的回复:
引用 2 楼 visualeleven 的回复:

重写CButton类,处理WM_LBUTTONDOWN、WM_LBUTTONUP、WM_TIMER消息,设置一个BOOL标记,DOWN的时候为TRUE,UP的时候为FALSE,WM_TIMER……
[/Quote]
留下你的邮箱,我把工程传你…
joyccccee 2011-04-12
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 visualeleven 的回复:]
引用 8 楼 joyccccee 的回复:
引用 6 楼 huangcheng90 的回复:
引用 2 楼 visualeleven 的回复:

重写CButton类,处理WM_LBUTTONDOWN、WM_LBUTTONUP、WM_TIMER消息,设置一个BOOL标记,DOWN的时候为TRUE,UP的时候为FALSE,WM_TIMER中判断标记值。或者用多线程去做也可以


C/C……
[/Quote]
在DemoDlg里创建有关CButtonEx的变量时,就会出现C2146错误,就是头文件错误。我在DemoDlg.h中加入ButtonEx.h,原来的错误没有消失,ButtonEx.h中的 CDemoDlg *pDlg 也会出错。怎么解决呢?
Eleven 2011-04-11
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 joyccccee 的回复:]
引用 6 楼 huangcheng90 的回复:
引用 2 楼 visualeleven 的回复:

重写CButton类,处理WM_LBUTTONDOWN、WM_LBUTTONUP、WM_TIMER消息,设置一个BOOL标记,DOWN的时候为TRUE,UP的时候为FALSE,WM_TIMER中判断标记值。或者用多线程去做也可以


C/C++ code

#pragma once……
[/Quote]
静态关联或者动态创建都可以,静态关联利用DDX_Control,动态创建Create();
joyccccee 2011-04-11
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 huangcheng90 的回复:]
引用 2 楼 visualeleven 的回复:

重写CButton类,处理WM_LBUTTONDOWN、WM_LBUTTONUP、WM_TIMER消息,设置一个BOOL标记,DOWN的时候为TRUE,UP的时候为FALSE,WM_TIMER中判断标记值。或者用多线程去做也可以


C/C++ code

#pragma once
#include "DemoDlg.h"

……
[/Quote]
还有个问题,对话框上的按钮怎么使用新创建的ButtonEx这个类呢?
joyccccee 2011-04-11
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 huangcheng90 的回复:]
引用 2 楼 visualeleven 的回复:

重写CButton类,处理WM_LBUTTONDOWN、WM_LBUTTONUP、WM_TIMER消息,设置一个BOOL标记,DOWN的时候为TRUE,UP的时候为FALSE,WM_TIMER中判断标记值。或者用多线程去做也可以


C/C++ code

#pragma once
#include "DemoDlg.h"

……
[/Quote]

首先谢谢你的细心指导。我按照以上方法试了一下,编辑框里的数字没有改变。我猜想可能是编辑框里原始数字是0的原因。可是把++nValue改成nValue=nValue+1还是不行。为什么呢?我按照自己的想法只能做到点一下按钮,编辑框的数字一直加,再点一下停止。真头疼!希望你能再详细解答下,谢谢。
Dreadnought 2011-04-11
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 visualeleven 的回复:]

重写CButton类,处理WM_LBUTTONDOWN、WM_LBUTTONUP、WM_TIMER消息,设置一个BOOL标记,DOWN的时候为TRUE,UP的时候为FALSE,WM_TIMER中判断标记值。或者用多线程去做也可以
[/Quote]

#pragma once
#include "DemoDlg.h"

// CButtonEx

class CButtonEx : public CButton
{
DECLARE_DYNAMIC(CButtonEx)

public:
CButtonEx();
virtual ~CButtonEx();

protected:
DECLARE_MESSAGE_MAP()
public:
afx_msg void OnLButtonDown(UINT nFlags, CPoint point);
afx_msg void OnLButtonUp(UINT nFlags, CPoint point);
BOOL bPressed;
afx_msg void OnTimer(UINT_PTR nIDEvent);
public:
CDemoDlg *pDlg;
};



// ButtonEx.cpp : 实现文件
//

#include "stdafx.h"
#include "Demo.h"
#include "ButtonEx.h"


// CButtonEx

IMPLEMENT_DYNAMIC(CButtonEx, CButton)

CButtonEx::CButtonEx()
: bPressed(FALSE)
{
pDlg = (CDemoDlg *)AfxGetApp()->GetMainWnd();
}

CButtonEx::~CButtonEx()
{
}


BEGIN_MESSAGE_MAP(CButtonEx, CButton)
ON_WM_LBUTTONDOWN()
ON_WM_LBUTTONUP()
ON_WM_TIMER()
END_MESSAGE_MAP()



// CButtonEx 消息处理程序




void CButtonEx::OnLButtonDown(UINT nFlags, CPoint point)
{
// TODO: 在此添加消息处理程序代码和/或调用默认值
bPressed = TRUE;
SetTimer(1,1000,NULL);
CButton::OnLButtonDown(nFlags, point);
}


void CButtonEx::OnLButtonUp(UINT nFlags, CPoint point)
{
// TODO: 在此添加消息处理程序代码和/或调用默认值
bPressed = FALSE;
KillTimer(1);
CButton::OnLButtonUp(nFlags, point);
}


void CButtonEx::OnTimer(UINT_PTR nIDEvent)
{
// TODO: 在此添加消息处理程序代码和/或调用默认值
int nValue = pDlg->GetDlgItemInt(IDC_EDIT1);
if (bPressed)
{
++nValue;
pDlg->SetDlgItemInt(IDC_EDIT1,nValue);
}
CButton::OnTimer(nIDEvent);
}


帮你搞定了..
joyccccee 2011-04-11
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 visualeleven 的回复:]
重写CButton类,处理WM_LBUTTONDOWN、WM_LBUTTONUP、WM_TIMER消息,设置一个BOOL标记,DOWN的时候为TRUE,UP的时候为FALSE,WM_TIMER中判断标记值。或者用多线程去做也可以
[/Quote]
谢谢你,我这就试试!
lj2lxm 2011-04-11
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 visualeleven 的回复:]
重写CButton类,处理WM_LBUTTONDOWN、WM_LBUTTONUP、WM_TIMER消息,设置一个BOOL标记,DOWN的时候为TRUE,UP的时候为FALSE,WM_TIMER中判断标记值。或者用多线程去做也可以
[/Quote]
就这样整
haogeai123 2011-04-11
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 visualeleven 的回复:]

重写CButton类,处理WM_LBUTTONDOWN、WM_LBUTTONUP、WM_TIMER消息,设置一个BOOL标记,DOWN的时候为TRUE,UP的时候为FALSE,WM_TIMER中判断标记值。或者用多线程去做也可以
[/Quote]++
Eleven 2011-04-11
  • 打赏
  • 举报
回复
重写CButton类,处理WM_LBUTTONDOWN、WM_LBUTTONUP、WM_TIMER消息,设置一个BOOL标记,DOWN的时候为TRUE,UP的时候为FALSE,WM_TIMER中判断标记值。或者用多线程去做也可以
xuwei__5720 2011-04-11
  • 打赏
  • 举报
回复
是不是可以这样:

写一个鼠标按下的消息响应函数,在函数里判断是不是按在了这个按纽上,如果是,就启动定时器,定时器里边进行数字的+1;

然后再写一个鼠标抬起的消息响应函数,在里边KILL这个定时器.

没有具体实现过,可以尝试一下~
高手勿下,菜鸟请进 有完整程序,wave仿真通过,也有proteus仿真电路图连接,可看到具体电路仿真结果,首先要装proteus软件 1)电路采用单片机AT89s51实现,显示器采用四联共阴极LED数码显示器,加二联共阴极数码管。其中分,小时的字段由P1.0~P1.3控制,经4511进行译码驱动;字位由P1.4—P1.7分别控制分的个位,十位,小时的个位,十位数码管。秒的的字段由p2.0~P2.3控制;字位由P2.6,P2.7控制.电路设有“校分”、 “校时”、 “设定”及“结束”,倒计时5个按键及铃响信号输出(铃响信号驱动蜂鸣器发声)。 (2)时间校对 在任何时候均可通过按压“校时”和“校分”按钮进行显示时间调整。每按动一下“校时”按钮,小时自动加1;持续按住不放,小时将自动连续加1。当小时指示为24时,再加1将自动回零。每按动一下“校分”按钮,分钟自动加1;持续按住“校分”按钮不放,分钟将自动连续加1。当分钟指示为59时,再按动“校分’’按钮,分钟将变为0 ,较时速度大约为一秒三次。 (3)设定报时时间 需要设定报时时间点时,应首先按“设定”按钮,然后再按动“校时”和“校分按钮,使指示时间与要求时间一致,再按“设定”按钮保存(保存有效时可听到“哔哔”声响)。 较时开关采用按下,断开加1 ,再按下和断开的之间调用了显示程序,有一定的延迟, 能起的防抖动的功能,故没必要增加延迟电路。再按“校时”和“校分”按钮可进行下一个时间设定,调好时间后按“设定’按钮保存(保存有效时,可听到“哔哔”声响),如此可设定多个报时时间点。设定完毕,最后按“结束’按钮退出设定状态,返回正常计时状态。 从正常计时状态进入设定状态(即在正常状态—下按压“设定按钮)时,旧的动态时间表将自动作废。 闹钟到时后将听到两种不同频率的声响,并持续一段时间后停止。 (4) 按下倒计时开关时,电路就从当前的时间开始倒计时,到 00:00:00 回到23:59:59. (5)电路的具体功能实现在程序钟注明

16,470

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧