如何在LabVIEW中无需路径加载自定义光标?扩展光标列表需求
问题
是否可以在LabVIEW中无需从路径加载来设置其他/自定义光标?我希望能够扩展光标列表。
LabVIEW自带的所有光标列表截图
例如,我想使用的许多光标已包含在User32.dll中,但LabVIEW无法识别光标更改,还会在鼠标事件中尝试覆盖光标!
调用User32.dll的LabVIEW代码截图
我的核心需求:
- 拒绝从路径加载光标,避免路径依赖带来的各种问题
- 实现光标在生成的.exe应用及不同Windows电脑上通用
解决方案
1. 调用Windows API加载系统内置光标
直接利用User32.dll中的系统API加载内置光标,完全无需外部文件:
- 在LabVIEW中添加调用库函数节点,分别配置调用
LoadCursorA和SetCursor:LoadCursorA:第一个参数传入NULL(代表调用系统内置光标),第二个参数传入对应光标常量值,输出为光标句柄SetCursor:输入参数为LoadCursorA获取到的光标句柄,执行后即可设置当前光标
2. 规避LabVIEW自动覆盖光标
LabVIEW的鼠标事件(移动、点击等)会自动重置光标,可通过两种方式处理:
- 在事件结构的所有鼠标相关事件分支末尾,添加
SetCursor调用,强制恢复自定义光标 - 启动一个低频率后台循环(如100ms一次),持续调用
SetCursor维持光标状态,避免被LabVIEW覆盖
3. 常用系统光标常量(十进制)
列举几个可直接使用的系统光标常量:
- 等待沙漏光标:32514(对应IDC_WAIT)
- 帮助问号光标:32651(对应IDC_HELP)
- 十字定位光标:32515(对应IDC_CROSS)
- 禁止操作光标:32648(对应IDC_NO)
关键注意事项
- 配置调用库函数节点时,需确保参数类型与Windows API匹配:
LoadCursorA返回值为指针句柄类型,SetCursor的输入参数同样为该类型 - 打包成.exe时,无需附加任何光标文件,因为调用的是Windows系统自带资源,天然支持跨Windows电脑通用
内容的提问来源于stack exchange,提问作者Robin Fauser
相关产品推荐
相关产品推荐

