关于长按触摸笔[转]

Unity触摸屏幕 拖拽物体 旋转物体 放大缩小物体 单击 双击 长按 Unity触摸屏幕 拖拽物体 旋转物体 放大缩小物体 单击 双击 长按 拖拽物体 using System.Collections; using System.Collections.Generic; using UnityEngine; public class PlayerMove : MonoBehaviour { // Start is called before the ... 阅读详情

Pocket PC Developer Network / Articles /
All about context menus
By Nicholas Tsipanov, September 18, 2002.
Print version

Introduction
Context menu is a very important element of Pocket PC user interface but unfortunatelly this feature is not described enough in helps. This articles explains using context menu in eVC++ applications and gives step-by-step instructions.

What You Need

Microsoft ebedded Visual C++ version 3.0
ContextMenu.zip sample (13 Kb)

Preface
How can I use context menu in my dialog or view in MFC based application? Before answering this question I would like to point to the article on Microsoft.com concerning this question, but from my point of view this article is too short and lacks some examples. Here we will tell this story in other words.

To use the context menus in your application create your own control descendant from the control to use. There is a well-known bug in controls behaviour when you use it in other way than creating from template using the design editor. This bug is discussed in article about demonstration of it in CButton class descendants and here we will use similar technique for CListControl.

Creating own class is simple and straightforward:

class CMyListCtrl : public CListCtrl
{
......
// Implementation
      //{{AFX_MSG(CMyListCtrl)
      afx_msg void OnLButtonDown(UINT nFlags, CPoint point);
      //}}AFX_MSG
.....
};


This is the method to have correct stylus click handling.

void CMyListCtrl::OnLButtonDown(UINT nFlags, CPoint point)
{

//The code below fixes wrong MFC behaviour on Pocket PC 2002 devices
//(running circles appears twice while you tap and hold

 Default();
}


At this point you should decide where you want to handle the context menu notification: either the control itself or in its window parent. Both approaches are possible: if you create control that has common menu (i.e. edit control) you could create and track menu in the control's code. Otherwise it could be more convinient to handle this notification in its parent. In both cases you have to add the method OnContextMenu to your handling class:


class CMyListCtrl : public CListCtrl
{
......
// Implementation
 //{{AFX_MSG(CMyListCtrl)
 afx_msg void OnLButtonDown(UINT nFlags, CPoint point);
 //}}AFX_MSG
 afx_msg BOOL OnContextMenu(NMHDR *pNotifyStruct, LRESULT *result);
.....
};

BOOL CMyListCtrl::OnContextMenu(NMHDR *pNotifyStruct, LRESULT *result)
{
//GN_CONTEXTMENU sends NMRGINFO structure through notify struct parameter
 PNMRGINFO pInfo=(PNMRGINFO)pNotifyStruct;

 CMenu Menu;
 Menu.LoadMenu(IDR_MENUBAR_MYCONTROL);
 Menu.GetSubMenu(0)->TrackPopupMenu( TPM_LEFTALIGN, pInfo->ptAction.x, pInfo->ptAction.y, this);

 *result = TRUE; //This is important!
 return TRUE;
}


In this code we have loaded the context menu from the resources. You have to create a menu bar containing one submenu, which will be shown in control.

If you'd like to have menu created on the fly then use the following code to create a menu:

CMenu Menu;
Menu.CreatePopupMenu();
Menu.AppendMenu(MF_ENABLED,IDR_MENUBAR_MYCONTROL_CUT, _T("Cut"));
Menu.AppendMenu(MF_ENABLED,IDR_MENUBAR_MYCONTROL_COPY, _T("Copy"));
Menu.AppendMenu(MF_ENABLED,IDR_MENUBAR_MYCONTROL_PASTE, _T("Paste"));
Menu.AppendMenu(MF_ENABLED,IDR_MENUBAR_MYCONTROL_WHATEVER, _T("Whatever"));
Menu.TrackPopupMenu( TPM_LEFTALIGN, pInfo->ptAction.x, pInfo->ptAction.y, GetParent());


Ensure that you defined IDR_* constants since Visual Studio won't do it for you in this case (but you can use already defined IDs)

Now you can compile the code to see if it works. But it won't, though compiled without errors. What happened? We forget to add the notification handler in the message map: If we add OnContextMenu to control itself our message map will be look like this:

BEGIN_MESSAGE_MAP(CMyListCtrl, CListCtrl)
 //{{AFX_MSG_MAP(CMyListCtrl)
 ON_NOTIFY_REFLECT(GN_CONTEXTMENU, OnContextMenu)
 ON_WM_LBUTTONDOWN()
 ... // some other entries
 //}}AFX_MSG_MAP
END_MESSAGE_MAP()


And if you add it to the parent (I mean window parent here, not C++) notification add in this way:

BEGIN_MESSAGE_MAP(CMyDialog, CListCtrl)
 //{{AFX_MSG_MAP(CMyListCtrl)
 ON_NOTIFY(GN_CONTEXTMENU, OnContextMenu)
 ... // some other entries
 //}}AFX_MSG_MAP
END_MESSAGE_MAP()


Note that we use ON_NOTIFY instead of ON_NOTIFY_REFLECT macro.

Now its time to handle thse menu entries we added. In simplest case (keep it simple, eh?) - when there are few menu static entries we provide ON_COMMAND handler for each menu entry:

BEGIN_MESSAGE_MAP(CMyDialog, CListCtrl)
 //{{AFX_MSG_MAP(CMyListCtrl)
 ON_NOTIFY(GN_CONTEXTMENU, OnContextMenu)
 ON_COMMAND(IDR_MENUBAR_MYCONTROL_CUT, OnMyControlCut)
 ON_COMMAND(IDR_MENUBAR_MYCONTROL_COPY, OnMyControlCopy)
 ON_COMMAND(IDR_MENUBAR_MYCONTROL_PASTE, OnMyControlPaste)
 ... // some other entries
 //}}AFX_MSG_MAP
END_MESSAGE_MAP()


And the handlers have the simple signature:

void CMyDialog::OnMyControlCut()
{
 // Cut, cut, cut!!
}


If you have dynamic menus or want to have one handler for a range of menu items use ON_COMMAND_RANGE macro:

BEGIN_MESSAGE_MAP(CMyDialog, CListCtrl)
 //{{AFX_MSG_MAP(CMyListCtrl)
 ON_NOTIFY(GN_CONTEXTMENU, OnContextMenu)
 ON_COMMAND_RANGE(IDR_MENUBAR_MYCONTROL_MIN, IDR_MENUBAR_MYCONTROL_MAX, OnMyControlMenu)
 ... // some other entries
 //}}AFX_MSG_MAP
END_MESSAGE_MAP()


In this case handler receives actual command menu item ID.

void CMyDialog::OnMyControlMenu(UINT idCmd)
{
 UINT nIndex = idCmd - IDR_MENUBAR_MYCONTROL_MIN;
 swich(nIndex)
 {
  ....
 }
}


Here we used list control for example but you can this approach will work for other controls as well, such as CListBox.

Sample
If you want the illustrations in compilable form please download the sample project - ContextMenu.zip (13 Kb).

Discuss
Discuss this article. Here you can write your comments and read comments of other developers.
Rate this article:     Poor       Excellent     
  1 2 3 4 5  

注:简而言之,如果要在一个窗口中处理长按时间,通用的做法是在WM_LBUTTONDOWN中使用SHRecognizeGesture判断,当然传入的标志位中须指明,长按后立即返回- SHRG_RETURNCMD,至于SHRG_NOANIMATION则是取消长按产生的圆圈动画

For example:

SHRGINFO    shrg;
    
    shrg.cbSize = sizeof(shrg);
    shrg.hwndClient = hWnd;
    shrg.ptDown.x = LOWORD(lParam);
    shrg.ptDown.y = HIWORD(lParam);
    shrg.dwFlags = SHRG_RETURNCMD|SHRG_NOANIMATION;
    
    if (SHRecognizeGesture(&shrg) == GN_CONTEXTMENU)
    {

}

基于STC8H4K64TL单片机的触摸功能和数码管驱动功能实现一个触摸按键单击长按都增加数值另一个触摸按键单击长按都减少数值应用 main.c#define uchar unsigned char//自定义无符号字符型为uchar#define uint unsigned int//自定义无符号整数型为uint#define ul unsigned long int//自定义无符号长整数型为ul//位定义LED灯的单片机引脚//位定义LED灯的单片机引脚void PortModeSet()//单片机端口模式设置函数//设置P0.0~P0.3为高阻输入//设置P0.4为准双向口 P0.5~P0.7为推挽输出。 阅读详情

相关推荐

Qt通过RAW INPUT解析HID触摸屏与笔设备:从Windows XP到现代系统的兼容实践

本文详细介绍了如何在Qt应用中使用RAW INPUT API处理HID触摸屏和笔设备,实现从Windows XP到现代系统的跨版本兼容。通过解析原始HID数据,开发者可以获取压感、倾斜角度等高级输入信息,提升绘图和笔记应用的自然交互体验。文章提供了设备注册、数据解析和性能优化的完整实践指南。

ujm567890的博客 803

iOS 开发技巧-制作环形进度条

有几篇博客写到了怎么实现环形进度条,大多是使用Core Graph来实现,实现比较麻烦且效率略低,只是一个小小的进度条而已,我们当然是用最简单而且效率高的方式来实现。 先看一下这篇博客,博客地址:http://www.brighttj.com/ios/ios-implement-loop-progress.html这篇博客写的不错,不过看上去还是略微复杂了,我自己根据自己的思路整理了一下,当然目...

weixin_34099526的博客 281

QT在触摸屏上如何实现按键长按功能?

要使用按钮的长按功能,想当然的会想到使用pressed和released信号,在按钮按下和释放的时候发出一个信号。但是我在surface的win10上使用时,长按时按钮似乎不能被按下,只有在点按时可以按下,但是这样pressed和released信号都会马上被触发,起不到长按的效果。

buhuiCyvyan的博客 2585

wince识别触摸笔的右键点击

=============================================================标题:wince识别触摸笔的右键点击摘要:备注:Windows CE日期:2010.5.6姓名:朱铭雷=============================================================    在wince设备中

朱铭雷的日记本 1987

基于STC12C5A60S2系列1T 8051单片机的台湾HOLTEK(合泰盛群)触摸芯片BS813A-1实现一个触摸按键单击长按都增加数值另一个触摸按键单击长按都减少数值的功能

main.c#define uchar unsigned char//自定义无符号字符型为uchar#define uint unsigned int//自定义无符号整数型为uintvoid main()//主函数//定时器0的16位定时模式1用12分频定时2ms初始化函数 晶振为12MHz//数码管开机显示函数while(1)//主循环//按键扫描结果函数Key.c#define uchar unsigned char //定义无符号字符。

CWQLTYH的博客 1302

qt电容触摸屏实现长按_触摸屏ITO制程

电阻式触摸屏电阻式触摸屏的主要两大原材料是上层的ITO膜和下层的ITO玻璃,它们占触摸屏材料成本的一半以上,电阻式触摸屏的总可见光透过率一般在80%左右。 电阻式触摸屏主要材料规格要求四线电阻式触摸屏定位原理电阻式触摸屏实物图A)电阻触摸屏ITO玻璃面的处理分为:1.ITO玻璃区域划分2.ITO玻璃侧ITO刻蚀3.玻璃上印刷Spacer4.印刷玻璃面Ag线5.玻璃印刷绝缘胶ins-16.玻璃印刷绝...

weixin_39907591的博客 919

韦东山嵌入式Linux学习——017 ADC和触摸屏(3)-长按实现

ADC和触摸屏(2)-按下松开检测 /*  *硬件平台:韦东山嵌入式Linxu开发板(S3C2440.v3)  *软件平台:运行于VMware Workstation 12 Player下UbuntuLTS16.04_x64 系统,  *参考资料:开发版原理图,S3C2440A datasheet */ 目录ADC和触摸屏(2)-按下松开检测 ...

weixin_42813232的博客 791

Qt触摸屏按钮优化:解决长按与选择框问题

本文针对Qt工业控制系统中触摸屏按钮存在的长按无法连续触发和显示选择框问题,提出解决方案。通过分析发现,问题根源在于Qt默认将触摸事件转换为鼠标事件,以及Windows系统将长按触摸映射为右键单击。解决方案包括:1)创建自定义按钮类重写event方法,准确区分原生和转换事件;2)调整系统设置关闭长按右键功能。实现效果良好,既能实现长按连续触发,又消除了界面干扰。经验表明,工业界面开发需兼顾功能性、操作体验和跨平台适配。未来可进一步扩展手势支持、优化性能并增强反馈机制。

qq_48757944的博客 491

qt编写触摸事件的关键

提要 无论你的电脑是支持触摸屏,还是你通过usb外部连接触摸屏,都能验证你的触摸程序功能。下面说说程序中使用触摸按钮等。 示例 按钮可以实现触摸功能; 自动义控件可以实现触摸按下拖动; 触摸长按出现对话框(也可以是其它控件)。 按钮可以实现触摸功能 只需要在该按钮所在的对话框的构造函数中添加下面一句: setAttribute(Qt::WA_AcceptTouchEvents);//支持多点触控 使用的是控件自身的事件,比如按钮的clicked槽函数,添加上面的支持触控后,触摸点击按钮后就会执行槽函数

肩上风骋的博客 7182

基于STC12C5A60S2系列1T 8051单片机的厦门icman(晶尊微)触摸芯片SC04B实现一个触摸按键单击长按都增加数值另一个触摸按键单击长按都减少数值的功能

main.c#define uchar unsigned char//自定义无符号字符型为uchar#define uint unsigned int//自定义无符号整数型为uintvoid main()//主函数//定时器0的16位定时模式1用12分频定时2ms初始化函数 晶振为12MHz//数码管开机显示函数while(1)//主循环//按键扫描结果函数Key.c#define uchar unsigned char //定义无符号字符。

CWQLTYH的博客 1297

【TestNG自动化测试框架详解】

TestNG是一款设计测试用例执行流程的测试框架。

weixin_43936332的博客 1539

android 触摸长按事件,android中的长按事件与触摸事件

package com.rfstar.clicktest;import androidx.appcompat.app.AppCompatActivity;import android.os.Bundle;import android.view.MotionEvent;import android.view.View;import android.widget.Button;import andro...

weixin_29924243的博客 2087

智能车竞赛走马观碑组:如何高效识别目标板并优化绕行策略(附实战代码)

本文深入探讨了智能车竞赛走马观碑组中,如何构建从图像识别到路径决策的全栈优化方案。针对目标板识别与绕行策略的核心难点,文章详细解析了基于MobileNetV2的高效识别流水线、结合预瞄点与纯追踪算法的平滑路径规划,以及横向与纵向协同控制策略,并提供了实战代码与调试指南,旨在全面提升小车的比赛表现。

o5p6q的博客 884

WinCE识别触摸笔的右键点击

WinCE系统中,触摸笔长按事件相当于是鼠标右键弹出上下文菜单,在网上大约能找到两段相似的代码,一是用timer事件实现,另一个是捕获WM_LBUTTON_DOWN消息,再调用SHRecognizeGesture实现,大致代码如下:   在桌面上按住左键不放  弹出右键菜单。 case WM_LBUTTONDOWN: {   SHRGINFO    shrg;   HMENU

ComputerInBook的专栏 3671

C++ 类

本文介绍了C++中类的核心概念和使用方法。

weixin_54859557的博客 1016

图像处理(12)--图像各种噪声及消除方法

文章目录结构1.什么是图像噪声2. 图像噪声来源3. 噪声分类及其消除方法3.1 高斯噪声及其消除方式3.1.1 如何确定一种噪声是高斯噪声3.1.2 高斯滤波消除高斯噪声3.1.3 高斯函数的重要性质3.2 瑞利噪声及其消除方式3.3 伽马(爱尔兰)噪声及其消除方式3.4 指数分布噪声及其消除方式3.5 均匀噪声及其消除方式3.6 脉冲(椒盐)噪声及其消除方式 1.什么是图像噪声 图像噪声是指...

ShaneHolmes 11万+

qtopia让窗体区别触摸屏短按与长按

qtopia让窗体区别触摸屏短按与长按 板子:君益兴helper2416     qtopia2.2     作者:帅得不敢出门   c++哈哈堂:31843264    在窗体构造函数中 right_pressed = false; // 类成员 // Enable stylus press events QPEApplication::setStylusOpe

zmlovelx(帅得不敢出门 程序员群31843264) 1778

Python+Flask+Echarts打造全国气象数据可视化分析大屏

本文详细介绍了如何使用Python+Flask+Echarts构建全国气象数据可视化分析大屏,实现实时监控、趋势分析和快速决策。通过Python强大的数据处理能力、Flask的轻量级优势和Echarts的交互体验,打造高效的气象数据可视化系统,提升农业、物流等行业的决策效率。

weixin_29061531的博客 1060

Vue 移动端的长按与触摸事件

Vue 移动端的长按与触摸事件 文章目录Vue 移动端的长按与触摸事件说明实现代码演示优化体验 博客说明 文章所涉及的资料来自互联网整理和个人总结,意在于个人学习和经验汇总,如有什么地方侵权,请联系本人删除,谢谢! 说明 在手机端的需求难免会遇到与手势相关的,比如div的长按和单击事件,长按可能是分享或者删除等操作,一般的形式是通过弹窗来展现。 实现 其实主要是利用dom的触摸事件,touchstart,touchmove,touchend 代码 <template> <div&

归子莫的博客 1420

10分钟快速搭建OpenClaw(基于Windows+飞书)

OpenClaw 是一款功能强大的 AI 智能体工具,能够帮助用户管理邮件、日历等日常事务。本文详细介绍了在 Windows11 系统上安装和配置 OpenClaw 的完整步骤,包括 Node.js 环境搭建、Git 安装、OpenClaw 部署以及飞书机器人创建与对接。通过简单的命令行操作和可视化界面配置,用户可以快速完成 AI 助手部署,实现智能办公自动化。文中还提供了飞书机器人权限设置等关键环节的图文指引,帮助用户轻松完成系统集成。

Hello, New World! 2925

C#粘包和分包问题及解决方法

一:通过图解法来描述一下分包和粘包,这样客户更清晰直观的了解:  下面对上面的图进行解释:  1.正常情况:如果Socket Client 发送的数据包,在Socket Server端也是一个一个完整接收的,那个就不会出现粘包和分包情况,数据正常读取。  2.粘包情况:Socket Client发送的数据包,在客户端发送和服务器接收的情况下都有可能发送,因为客户端发送的数据都是发送的一个缓冲...

weixin_42033401的博客 7767

Win10系统的SurfacePro4的触摸笔如何使用

初次使用需要配对,微软的触摸笔是蓝牙配对的,打开平板的蓝牙,长按触摸笔后面的按钮,触摸笔会闪烁小灯,平板会提示配对准备已就绪 点击配对之后,提示已连接 可以按下触摸笔后面的按钮,一键打开OneNote应用(如果没有登录会提示登录) 如果长按后面的按钮,则为激活 Cortana(如 Cortana 未被设置则会打开搜索功能) Surfa...

weixin_30340775的博客 1788

18-XLINX的XC7A100T的BANK0引脚说明

DXP_0和 DXN_0是纯输入引脚,Xilinx Artix-7 FPGA 内部集成的一个片上监控模数转换器​ 的差分模拟输入对,模数转换器​的模拟信号输入端,将外部的模拟电压​ 采样并转换为内部的数字值,是一个单向的信号采集过程。它是与 VCCADC配对的关键引脚,共同为内部的精密模数转换器提供一个纯净、安静、独立的参考地平面。多FPGA同步配置: 在多FPGA系统中,主FPGA配置完成后,可以拉低从FPGA的 INIT_B使其等待,等所有FPGA都准备好后,再同时释放,实现同步启动。

weixin_44479192的博客 232
上一篇: 进程间调用[合集]
下一篇: 发现一个EVC编译器对自增算符处理时的隐患
皮鲁
博客等级 码龄23年 44粉丝 73原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值