小弟第一次來報道,現有一事相求??????????別笑話啊,一個很菜的問題??????????

时间:2021-12-11 16:04:25
小弟学还VC没多久,现有问题,请教大哥大姐一下,
 今天看了一个东东,是关于BUTTON的,我用MFC做了一个对话框,上面其中有两个BUTTON按钮,
 我按下键盘上的A键时,BUTTON1也被按下,按下B键时BUTTON2也被按下,
  现在问题是我想来计数它们,也就是说当我第一次按A或B时,对话框上自动显示1,(也就是按键的次数为一次)
  第二次若按相同的键就不计算,若不相同的键,则自动加1,
  我不知道怎样来用代码表示它们,请哪位大哥大姐能否教我一下,在下谢谢了,

20 个解决方案

#1


不会你的问题,但是鼓励一下你学VC :)

#2


在PreTranslateMessage中处理WM_KEYDOWN,维护两个计数器。

#3


這兩個計數器怎麼來表示呀,
?

#4


这个问题建议你查看一些有关键盘按键消息捕获的代码,找到响应函数的处理代码,在里面做手脚就可以啊!设置2个全局变量a记录上次按键,int i;
if(本次按键!=a)
{
i=i+1;
本次按键=a;
}
记录按键的变量我就不知道了,嘻嘻

#5


你看雅克医生已经说了函数的名字了,谢谢医生,你就在这个函数里面做手脚阿

#6


同意牙医

#7


添加WM_CHAR消息也可以!

#8


在PreTranslateMessage加入以下代码:
int Count = 0;
int LastKey = -1;
if(int(pMsg->message) == WM_KEYDOWN)
{
if(pMsg->wParam != LastKey)
{
Count++;
}
}
Count就是你要统计的次数

#9


错了,应该是
int Count = 0;
int LastKey = -1;
if(int(pMsg->message) == WM_KEYDOWN)
{
if(pMsg->wParam != LastKey)
{
Count++;
LastKey = pMsg->wParam;
}
}

#10


高手們請留步,怎么让结果显示出来呀,
我用DC....顯示不出來呀

#11


謝謝,我現在做做看看,

#12


各位大狹,还有一点错误呀,就是在对话框上显示不出来,
这是为什么???
我用 AfxMessageBox(" click count is %d",Count);不行呀
请大狹说说这是为什么啊

#13


可以显示出来了,可是重复的键也在内呀,我不要重复的呀,
这可怎么办

#14


设置一个BOOL型信号信号量,获得当前按键时判断该信号量的值,并根据当前按键重新为该信号量赋值,以便处理下一个按键时是否是重复。

#15


依照这个程序,应该怎么添加呢
我先前定义过BOOL,可是没有反映,
if( (pMsg->message) == WM_KEYDOWN)
 

static int Count = 0;
       
      if( pMsg->wParam== LastKey)
  
{ Count++;
 LastKey = pMsg->wParam;


   m_Count.Format("%d",Count);
}
 
  this->UpdateData(false);

我就是这样的,可以显示,但是重复的它也算了,不知我用这个来显示是不是对的,m_Count.Format("%d",Count);  this->UpdateData(false);
???????????????

#16


??????????????????????

#17


小弟我郁悶呀

#18


up

#19


自己ding一下

#20


呵呵 加油

#1


不会你的问题,但是鼓励一下你学VC :)

#2


在PreTranslateMessage中处理WM_KEYDOWN,维护两个计数器。

#3


這兩個計數器怎麼來表示呀,
?

#4


这个问题建议你查看一些有关键盘按键消息捕获的代码,找到响应函数的处理代码,在里面做手脚就可以啊!设置2个全局变量a记录上次按键,int i;
if(本次按键!=a)
{
i=i+1;
本次按键=a;
}
记录按键的变量我就不知道了,嘻嘻

#5


你看雅克医生已经说了函数的名字了,谢谢医生,你就在这个函数里面做手脚阿

#6


同意牙医

#7


添加WM_CHAR消息也可以!

#8


在PreTranslateMessage加入以下代码:
int Count = 0;
int LastKey = -1;
if(int(pMsg->message) == WM_KEYDOWN)
{
if(pMsg->wParam != LastKey)
{
Count++;
}
}
Count就是你要统计的次数

#9


错了,应该是
int Count = 0;
int LastKey = -1;
if(int(pMsg->message) == WM_KEYDOWN)
{
if(pMsg->wParam != LastKey)
{
Count++;
LastKey = pMsg->wParam;
}
}

#10


高手們請留步,怎么让结果显示出来呀,
我用DC....顯示不出來呀

#11


謝謝,我現在做做看看,

#12


各位大狹,还有一点错误呀,就是在对话框上显示不出来,
这是为什么???
我用 AfxMessageBox(" click count is %d",Count);不行呀
请大狹说说这是为什么啊

#13


可以显示出来了,可是重复的键也在内呀,我不要重复的呀,
这可怎么办

#14


设置一个BOOL型信号信号量,获得当前按键时判断该信号量的值,并根据当前按键重新为该信号量赋值,以便处理下一个按键时是否是重复。

#15


依照这个程序,应该怎么添加呢
我先前定义过BOOL,可是没有反映,
if( (pMsg->message) == WM_KEYDOWN)
 

static int Count = 0;
       
      if( pMsg->wParam== LastKey)
  
{ Count++;
 LastKey = pMsg->wParam;


   m_Count.Format("%d",Count);
}
 
  this->UpdateData(false);

我就是这样的,可以显示,但是重复的它也算了,不知我用这个来显示是不是对的,m_Count.Format("%d",Count);  this->UpdateData(false);
???????????????

#16


??????????????????????

#17


小弟我郁悶呀

#18


up

#19


自己ding一下

#20


呵呵 加油

#21