Windows tablet数位板数位屏开发出现的问题

news/2024/10/20 13:43:07/

Windows Ink开发使用COM组件开发

官方示例初始化

HRESULT Init(
HWND hWnd)
{// Initialize event sink. This consists of setting//  up the free threaded marshaler.HRESULT hr = m_InkEvents.Init(hWnd);if (FAILED(hr))...// Create the ink collectorhr = CoCreateInstance(CLSID_InkCollector, NULL, CLSCTX_ALL, IID_IInkCollector, (void **) &m_pInkCollector);
/*
CLSID_InkCollector 创建时会自动加载InkObj.dll
但是如果动态库加载位置不对,很有可能会导致后面的put_hWnd或者put_Enabled出现crash的情况
我在项目中曾经就栽在这个坑上。它加载的位置是用户安装的老版office下面的目录下,导致程序崩溃。
在我windows10正常的加载模块目录应该是下面这个InkObj.dll    C:\Program Files (x86)\Common Files\microsoft shared\Ink\InkObj.dll    N/A    N/A    未加载符号。        177    10.0.17763.806 (WinBuild.160101.0800)    2026/10/12 7:01    58AF0000-58C75000    [12296] TrainLine.exe: 本机    
动态库加载后可以先通过如下代码获取并检查HMODULE dll_hInstance = ::GetModuleHandle(_T("inkobj.dll"));if(dll_hInstance == NULL)return FALSE;TCHAR path[MAX_PATH] = {0};GetModuleFileName(dll_hInstance, path, MAX_PATH);OS_INFO_TRACE_THIS("CInkCollector::Init dll path = "<<Encoding::ToUtf8(path));if(path[0] == 0)return FALSE;CString strTemp = path;strTemp.MakeUpper();int nPos = strTemp.Find(_T("OFFICE"));if(nPos > 0)return FALSE;
当然这种方法并不准确,我们可以使用查找注册表的方法来获取正确的加载路径,具体代码我就不贴了,大家可以自行摸索。
*/if (FAILED(hr))...// Set up connection between Ink Collector and our event sinkhr = m_InkEvents.AdviseInkCollector(m_pInkCollector);if (FAILED(hr))...// Attach Ink Collector to windowhr = m_pInkCollector->put_hWnd((long) hWnd);if (FAILED(hr))...// Allow Ink Collector to receive input.return m_pInkCollector->put_Enabled(VARIANT_TRUE);
}

最后放上我对官方demo改动后的代码,加入了Windows墨迹数据采集功能,并采用gdi+渲染采集到的数据。

 


http://www.ppmy.cn/news/665377.html

相关文章

BL0939计量芯片驱动程序

STM32+BL0939计量芯片驱动程序 本文章介绍BL0939计量芯片基本驱动程序,如需完整方案(电压、电流、功率、电量、过载、过零、漏电)请私信。 串口配置 void BL_Config(void) {USART_DeInit(USART2);//复位串口//GPIO端口设置GPIO_InitTypeDef GPIO_InitStructure;USART_Ini…

数字绘画技术,从数位板到数位屏

“数字绘画“科普时间&#xff01;新世界的大门 对于数字绘画&#xff0c;很多人觉得它遥不可及&#xff0c;其实&#xff0c;数字绘画已无声无息地潜入我们的生活&#xff0c;等到惊觉的时候&#xff0c;我们还来得及拒绝吗&#xff1f; 关于数字绘画 数字绘画是通过运用计算机…

Mixly-数位计及1602屏亮度显示

使用图形化编程实现数位计控制LED灯亮度及1602屏显示亮度的值 实验所需 硬件&#xff1a;Arduino、LED灯、数位计、1602屏 软件&#xff1a;Mixly IDE 1.Arduino简介 Arduino是一种开源的电子平台&#xff0c;该平台最初主要基于AVR单片机的微控制器和相应的开发软件&#x…

2、基于51单片机智能交流电表抄表OLED屏

毕设帮助、开题指导、技术解答&#xff08;有偿&#xff09;见文末。 目录 摘要 一、硬件方案 二、设计功能 三、实物图 四、原理图 五、PCB图 六、程序源码 七、资料包括 摘要 电表表示着人们日常用电的多少&#xff0c;现在每家每户安装的根本上是带有转盘的那种电表…

FPGA之旅设计99例之第九例-----驱动0.96寸OLED屏

一. 简介 这是FPGA之旅设计的第九例啦&#xff01;&#xff01;&#xff01;本例将介绍如何使用FPGA驱动OLED屏幕&#xff0c;并在接下来的几例中&#xff0c;配合其它模块&#xff0c;进行一些有趣的综合实验。由于使用的OLED屏是IIC接口的&#xff0c;对IIC接口不是很清楚的…

Arduino--Mixly-数位计及1602屏亮度显示

Mixly-数位计及1602屏亮度显示 硬件&#xff1a;Arduino、LED灯、数位计、1602屏 软件&#xff1a;Mixly IDE 原理&#xff1a; 1.使用数位计实现旋钮调灯亮度功能。 2.使用1602屏实现实时显示灯的当前亮度功能。 #include <LiquidCrystal_SoftI2C.h> #include <Sof…

ESP HMI 智能屏方案介绍

​ 随着智能化设备的普及&#xff0c;现代化的人机交互&#xff08;HMI&#xff09;取代了传统的按钮和开关&#xff0c;允许用户通过轻触屏幕或语音来控制其他设备。乐鑫充分发挥 ESP32 系列芯片在人机交互领域的能力&#xff0c;面向各垂直市场&#xff0c;推出单芯片 HMI 智…

机器学习13: 使用 TensorFlow 进行二元分类(Binary Classification)编程实践

在【机器学习6】和【机器学习9】中&#xff0c;我们使用 TensorFlow 进行了“线性回归模型”和“组合特征”编程实践。本质上&#xff0c;其中采用的都是回归模型&#xff0c;也就是说&#xff0c;我们创建了产生浮点预测的模型&#xff0c;比如“这个社区的房子要花 N 千美元。…