-
2021-05-20 07:44:51
Mark..
8
您的原始语法是正确的.
g_signal_connect(window, "key-release-event", G_CALLBACK(key_event), NULL);
key_event函数看起来像(注意我使用gdk_keyval_name将keyval int值转换为字符串进行打印):
static gboolean
key_event(GtkWidget *widget,
GdkEventKey *event)
{
g_printerr("%s\n",
gdk_keyval_name (event->keyval));
return FALSE;
}
这是一个完整的示例程序:
#include
static gboolean
key_event(GtkWidget *widget,
GdkEventKey *event)
{
g_printerr("%s\n",
gdk_keyval_name (event->keyval));
return FALSE;
}
int main( int argc,
char *argv[] )
{
GtkWidget *window;
gtk_init (&argc, &argv);
window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
g_signal_connect(window, "key-release-event", G_CALLBACK(key_event), NULL);
gtk_widget_show (window);
gtk_main ();
return 0;
}
@Sinthet,事件变量是指向GdkEventKey(http://developer.gnome.org/gdk/stable/gdk-Event-Structures.html#GdkEventKey)结构的指针.它有一个成员keyval:一个unsigned int,对应于被按下的键.此映射在gdkkeysyms.h中定义(http://git.gnome.org/browse/gtk+/plain/gdk/gdkkeysyms.h) (2认同)
更多相关内容 -
利用51单片机仿真实现检测按键按下的次数
2019-06-22 07:15:12利用51单片机仿真实现检测按键按下的次数。仿真电路图+(51单片机)程序代码。(自己做的课程设计)——随下随用。 -
请问如何检测一个按键是否被按下?
2021-05-19 14:05:23该楼层疑似违规已被系统折叠隐藏此楼查看此楼不要跟我说什么GetKeyState,这个该死的函数折磨死我了,大神们都说加winuser.h头文件,可是一加入就出现一大堆错误。1>c:\program files (x86)\microsoft sdks\...该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
不要跟我说什么GetKeyState,这个该死的函数折磨死我了,大神们都说加winuser.h头文件,可是一加入就出现一大堆错误。
1>c:\program files (x86)\microsoft sdks\windows\v7.0a\include\winuser.h(46): error C2146: 语法错误: 缺少“;”(在标识符“HDWP”的前面)
1>c:\program files (x86)\microsoft sdks\windows\v7.0a\include\winuser.h(46): error C4430: 缺少类型说明符 - 假定为 int。注意: C++ 不支持默认 int
1>c:\program files (x86)\microsoft sdks\windows\v7.0a\include\winuser.h(46): error C4430: 缺少类型说明符 - 假定为 int。注意: C++ 不支持默认 int
1>c:\program files (x86)\microsoft sdks\windows\v7.0a\include\winuser.h(47): error C2146: 语法错误: 缺少“;”(在标识符“MENUTEMPLATEA”的前面)
1>c:\program files (x86)\microsoft sdks\windows\v7.0a\include\winuser.h(47): error C4430: 缺少类型说明符 - 假定为 int。注意: C++ 不支持默认 int
1>c:\program files (x86)\microsoft sdks\windows\v7.0a\include\winuser.h(47): error C4430: 缺少类型说明符 - 假定为 int。注意: C++ 不支持默认 int
1>c:\program files (x86)\microsoft sdks\windows\v7.0a\include\winuser.h(54): error C2146: 语法错误: 缺少“;”(在标识符“LPMENUTEMPLATEA”的前面)
1>c:\program files (x86)\microsoft sdks\windows\v7.0a\include\winuser.h(54): error C4430: 缺少类型说明符 - 假定为 int。注意: C++ 不支持默认 int
1>c:\program files (x86)\microsoft sdks\windows\v7.0a\include\winuser.h(54): error C4430: 缺少类型说明符 - 假定为 int。注意: C++ 不支持默认 int
1>c:\program files (x86)\microsoft sdks\windows\v7.0a\include\winuser.h(62): error C2065: “CALLBACK”: 未声明的标识符
1>c:\program files (x86)\microsoft sdks\windows\v7.0a\include\winuser.h(62): error C2065: “WNDPROC”: 未声明的标识符
1>c:\program files (x86)\microsoft sdks\windows\v7.0a\include\winuser.h(62): error C4430: 缺少类型说明符 - 假定为 int。注意: C++ 不支持默认 int
1>c:\program files (x86)\microsoft sdks\windows\v7.0a\include\winuser.h(62): fatal error C1903: 无法从以前的错误中恢复;正在停止编译
========== 生成: 成功 0 个,失败 1 个,最新 0 个,跳过 0 个 ==========
------来自 爱贴吧HD for Windows8
-
多按键检测实现(修改中断向量)
2021-05-20 08:43:34while (GetKey (1)==0){ /*按ESC退出*/ press = 0; for (i = 0; i ; i++) if (GetKey (i)) { press = 1; printf (“%4d”,i); } if (press) printf (“\n”); else printf (“\nNokey!\n”); } ShutDownKeyboard ...稍作修改使之更完善
#include”dos.h”
char key_state[128], key_pressed[128];
void interrupt far (*OldInt9Handler) ();
void far interrupt NewInt9 (void)
{
char ScanCode,temp;
ScanCode = inportb (0×60);
if (ScanCode & 0×80) {
ScanCode &= 0x7f;
key_state[ScanCode] = 0;
}
else {
key_state[ScanCode] = 1;
key_pressed[ScanCode] = 1;
}
OldInt9Handler(); /*调用原来的中断例程*/
}
void InstallKeyboard (void)
{
int i;
for (i = 0; i < 128; i++)
key_state = key_pressed = 0;
OldInt9Handler = getvect (9);
setvect (9, NewInt9);
}
void ShutDownKeyboard (void)
{
setvect (9, OldInt9Handler);
}
int GetKey (int ScanCode)
{
int res;
res = key_state[ScanCode] | key_pressed[ScanCode];
key_pressed[ScanCode] = 0;
return res;
}
main ()
{
int i,press;
InstallKeyboard ();
while (GetKey (1)==0){ /*按ESC退出*/
press = 0;
for (i = 0; i < 128; i++)
if (GetKey (i)) {
press = 1;
printf (“%4d”,i);
}
if (press)
printf (“\n”);
else
printf (“\nNokey!\n”);
}
ShutDownKeyboard ();
}
-
单片机的仿真记录按键按下的次数
2010-04-18 14:20:58单片机的仿真记录按键按下的次数,是用汇编编写的,希望有用 -
课程设计 统计按键的次数
2012-02-23 12:50:50用二进制数显示按键按下的总次数,功能用C语言来实现 -
MFC--按键、按钮按下和弹起事件检测
2019-09-24 19:42:23MFC按钮按下事件很容易实现,为一个按钮直接添加点击事件即可,但是有时需要检测按钮的抬起,即按钮的按下和抬起单独实现各自的功能时,就需要对两种状态单独检测。下面把MFC按钮和键盘的按下和抬起一起实现。 方法...MFC按钮按下事件很容易实现,为一个按钮直接添加点击事件即可,但是有时需要检测按钮的抬起,即按钮的按下和抬起单独实现各自的功能时,就需要对两种状态单独检测。下面把MFC按钮和键盘的按下和抬起一起实现。
方法是重写**PreTranslateMessage(MSG* pMsg)*函数:
步骤:
1.新建一个对话框MFC工程,名称自主定义即可
2.添加一个按钮,ID默认为IDC_BUTTON1,不需更改,也不必为按钮添加点击事件
3.按住“Ctrl+W”打开类向导,在Message Maps选项卡中的Messages下,选择
PreTranslateMessage并实现功能添加:
4.具体实现PreTranslateMessage(MSG pMsg)函数,代码如下:int i=0; BOOL CTestButtonUpDownDlg::PreTranslateMessage(MSG* pMsg) { // 键盘按键检测 if (pMsg->message == WM_KEYDOWN)// 按键按下检测 { if (pMsg->wParam == VK_UP) { // 向上键按下 TRACE("PgUp(top) Down\n"); } else if (pMsg->wParam == VK_DOWN) { // 向下键按下 TRACE("PgDn Down\n"); } else if (pMsg->wParam == VK_LEFT) { // 向左键按下 TRACE("Home(left) Down\n"); } else if (pMsg->wParam == VK_RIGHT) { // 向右键按下 TRACE("End(right) Down\n"); } else if (pMsg->wParam == VK_SHIFT) { //Shift 键按下 TRACE("Shif Down\n"); } else if (pMsg->wParam == VK_CONTROL) { //Ctrl 键按下 TRACE("Ctrl Down\n"); } else if (pMsg->wParam>=VK_NUMPAD0 && pMsg->wParam<=VK_NUMPAD9) { // 小键盘数字键按下 TRACE("small number down(0~9)\n"); } else if (pMsg->wParam>=0x30 && pMsg->wParam<=0x39) { // 数字键按下 (不能使用 VK_0) TRACE("number key down(0~9)\n"); } else if (pMsg->wParam>=0x41 && pMsg->wParam<=0x5A) { // 键盘字母键按下 (不能使用 VK_A) TRACE("Alphabet down(A~Z)\n"); } else if (pMsg->wParam == VK_BACK) { // 退格键按下 TRACE("Backspace down\n"); } else if (pMsg->wParam == VK_DELETE) { // 删除键按下 } else if (pMsg->wParam == VK_F1) { //F1 键按下 TRACE("F1 down\n"); } //屏蔽ESC和Enter键:避免按ESC和Enter键,对话框退出 else if (pMsg->wParam == VK_ESCAPE)//ESC { return TRUE; } else if (pMsg->wParam == VK_RETURN)//Enter { return TRUE; } //return true; // 使消息不再进行处理 } if (pMsg->message == WM_KEYUP)//按键弹起检测 { if (pMsg->wParam == VK_SHIFT) { //Shift 键弹起 TRACE("Shif Up %d\n",i); } else if (pMsg->wParam == VK_CONTROL) { //Ctrl 键弹起 } //return true; // 使消息不再进行处理 } //MFC界面按钮检测 if(pMsg->message == WM_LBUTTONDOWN) { if(pMsg->hwnd == GetDlgItem(IDC_BUTTON1)->m_hWnd) { //按钮按下 TRACE("MFC Button Down\n"); } } else if(pMsg->message == WM_LBUTTONUP)//判断是否有MFC界面按钮弹起 { if(pMsg->hwnd == GetDlgItem(IDC_BUTTON1)->m_hWnd) //IDC_BUTTON1为MFC界面button按钮的ID { //按钮弹起 TRACE("MFC Button Up\n"); } } return CDialog::PreTranslateMessage(pMsg); }
5.以调试模式(F5)运行测试,按下键盘按键或MFC界面按钮:
结语:谢谢 !
-
android按键精灵 设置次数
2021-06-02 21:28:49您可以使用以下3个命令俩实现有限循环简单例子Dim xunhuncishu=10For xunhuncishuTracePrint "循环中"NextFor 循环一定次数功能循环一定次数命令参数参数1 整数型,循环次数范例例子1:固定循环次数后离开For 10 '... -
按键的长按,短按,以及按键按下后不松开,只计算一次有效按下
2021-07-31 17:24:32判断按键长按还是短按,就需要引入时间的概念了。 对于STM32G431RBT6这块板子来说,直接开启一个定时器用来检测即可。 这里要讲到一个定时器时间计算公式 TLCK指的就是系统时钟频率,设置为100MHz的话,用... -
AVR单片机实践--ATmega16按键控制流水灯
2021-03-24 11:39:36(2)K1为启/停键,按下后控制LED流水灯按照当前指定样式运行或停止; (3)K2为流水灯样式选择键,分两种样式,默认为样式1。每次按下K2当前样式立即转变。 样式1:每次仅一个LED熄灭,熄灭LED从L0至L7转移,如此... -
《ESP8266学习笔记》之 采用定时器内的按键扫描方法,摒弃传统的延时按键消抖
2021-01-06 10:10:43这种新的按键扫描思想并不复杂,你需要定义一个 1ms 的定时器,在定时器中判断按键状态,如果按键按下,则按键的检测按下次数 加一,最后将 按键的检测按下次数 乘以 1ms 则可以得到按键按下时间,如果检测到... -
Arduino 按键模块统计按键次数
2020-09-08 08:58:155)时,并不是只循环了5次而是5秒,在这5秒有无限可能,所以当我按下一次时并不是只返回按键次数,而是返回得是我从摁下到松手while了几次。这就不太好。 思路 只有在提示之后,才会出现摁键行为 -
利用AT89C51单片机制作的按键次数计数器
2021-05-23 09:01:13该计数器用于对按键次数的计算,比如鼠标中的微按钮或其它按钮做QC测试用.该程序为汇编延时程序,用了取两次定时中断的键值做比较以达到简单防抖动和取健值的目的.本计数器的计数范围为0-999999,最大的频率为50Hz.该... -
按键1按下数码管显示1,按键2按下数码管显示2,按键3按下8个LED灯实现流水灯效果;
2021-05-31 21:46:12#include "reg52.h" //此文件中定义了单片机的一些特殊功能寄存器 #include<intrins.h> //因为要用到左右移函数,所以加入这个头文件 #define led P2 //将P2口定义... //定义按键管脚 sbit k2=P3^0; sbit . -
按键检测程序(可以连续按)
2012-08-28 16:44:53自己写的比较通用的按键检测程序,保持一直按的状态,数字会连续的加减。 -
单片机——八盏灯依次显示按键次数从1-255,数码管显示按键次数(Proteus和KeilC51)
2021-12-30 09:27:07八盏灯按顺序依次显示按键次数从1-255个二进制数,灯亮表示1,灭表示0,同时4位数码管显示值。 效果预览 解析 连接电路图 第一步:首先根据题目我们需要用到的器件是八盏led灯、一个四位数码管、一个按键 根据要求... -
利用汇编编写51单片机串口通信程序,实现对于按键次数的显示
2020-12-09 21:49:55利用汇编编写51单片机串口通信程序,实现对于按键次数的显示 题目如下 甲乙两个单片机之间通信,其中甲机连接有8个流水灯循环闪烁和一个按键,乙机连接有一个LED数码管,按下甲机的按键,流水灯闪烁不受影响,乙机... -
按键精灵判断与循环的使用
2022-04-02 15:03:41按键精灵循环和判断的结合使用 -
最好的按键扫描和消抖方法,适用于复合、长按、按下或抬起响应按键
2021-05-26 03:43:432. 许多功能在不同界面下是不同的,把按键处理在中断进行,导致分支很多,业务流不清晰。3. 特殊功能按键的处理麻烦。在需要长按作为特殊按键、复合按键响应、复合按键长按响应的时候,需要增加很多的标志位,反复... -
单片机的按键判断程序
2021-03-29 16:35:19采用定时器,没10ms一次中断 void Key_Scan(void) { if(SW == LOW) { if(key_count < 400) key_count++;...= 否则每个循环都会出现一组长按 { key_sos_long = 1; // Flag_Speaker_long -
Swing计算按钮点击次数 代码
2021-03-13 19:03:44计算按钮点击次数package swing;import javax.swing.*; //引入Swing包名//import com.sun.java.swing.*;//使用JDK 1.2 Beta 4版和所有Swing 1.1 Beta 3//之前的版本,引入Swing包名用此方法。import java.awt.*;... -
单片机按键检测
2021-05-27 21:55:211.等待按键释放2.10ms检测一次3.外部中断触发4.Delay延时检测 -
STC15W单片机状态机检测按键长按和短按
2021-05-17 17:53:59第三步:定时器定时10毫秒到后调用函数,再次判断按键是否被按下(第二次判断为按键消抖),一、如果按键确实被按下,就开始计数,然后把变量改为0x02,进行下一步判断按键是长按还是短按。二、否则就判断为已经抬... -
打字按键次数
2022-01-05 16:41:44我们知道,按下CapsLock键,可以切换大小写模式。我们在小写模式时候,同时按下shift+字母键,就能写出大写字母。在大写模式的时候,按下shift+字母键,就能写出小写字母。现在问题来了,给你一个字符串,问你最少... -
PIC单片机之电容触摸按键
2020-07-14 04:04:13这样我们就可以同过判断 RC震荡频率的快慢来判断 是否有手指按下。 如何判断RC震荡频率的快慢呢? 这就和我们平时判断一个人做事情快慢是一样的。比如我们给个10S的时间,让两个人吃薯条如果吃的越多的,就说明... -
矩阵键盘_按键检测_按键次数检测
2018-05-13 22:43:36在进行矩阵按键检测的时候,对于51单片机来说,由于IO输出电流较小,驱动能力不足,若用一个A号IO口去检测B号IO口,无论B口高电平还是低电平,A口皆是低电平;若A口置高,可用来检测B口的低电平。 IO.H文件 #... -
C语言,在定时器中断模式中,单个按键 连续按下两次(开关灯) 和长时间按下(开关灯)功能
2021-05-31 10:58:461.定时器中断设置:由于按键按下可能有抖动,所以我设置的时间为1ms进入一次,这样的话可以在程序中加点防抖判断。 2:定时器中断回调函数: void hx_keyset_timer_(eTIMER_IDX TimerIdx){ static uint16_t ... -
普通延时函数实现按键的长按与短按
2019-04-18 10:33:09使用定时器的间隔定时来计算按键按下的时间是通用的做法,然而对于不太熟悉定时器使用,又没有严格的延时长度的情况下,使用普通的延时函数实现长短按键的区分也是一个不错的选择。按键SW1短按的时候,切... -
单片机按键长短按检测区分
2020-10-13 15:13:08使用单片机很多情况下需要使用按键来进行切换功能,其中就涉及到检测按键和区分按键长短按。按键一般构成就是一个单片机的外部中断IO口加一个按键和一个电容,电容一般选择104大小的瓷片电容,具体的要看硬件项目... -
Android之有效防止按钮多次重复点击的方法(必看篇)
2021-01-05 00:34:37我的想法是,判断用户点击按钮间隔时间,如果间隔时间太短,则认为是无效操作,否则进行相关业务处理 首先将这块提取为工具类(方便接下来的调用),现在就起名为:ButtonUtils public class ButtonUtils { private ...