持续按住按钮的问题

joyccccee 2011-04-11 03:48:40
现在有一个按钮IDC_BTN_ADD,一个编辑框IDC_EDIT1。每点击一下按钮,编辑框中的数字会加一。我想做的是一直按住按钮不放,编辑框中的数字会持续增加,直到不再点击。要怎么做呢?希望高手细心指点,谢谢!
...全文
275 13 打赏 收藏 转发到动态 举报
AI 作业
写回复
用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这个定时器.

没有具体实现过,可以尝试一下~

16,548

社区成员

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

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

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