【PB案例学习笔记】-29制作一个调用帮助文档的小功能

写在前面

这是PB案例学习笔记系列文章的第29篇,该系列文章适合具有一定PB基础的读者。

通过一个个由浅入深的编程实战案例学习,提高编程技巧,以保证小伙伴们能应付公司的各种开发需求。

文章中设计到的源码,小凡都上传到了gitee代码仓库https://gitee.com/xiezhr/pb-project-example.git

gitee代码仓库

需要源代码的小伙伴们可以自行下载查看,后续文章涉及到的案例代码也都会提交到这个仓库【pb-project-example

如果对小伙伴有所帮助,希望能给一个小星星⭐支持一下小凡。

一、小目标

通过本案例我们将制作一个点击菜单,然后调用帮助文档的小功能。这个在日常开发中是一个非常实用的小功能,我们可以将

我们开发好的程序的帮助文档制作成chm格式的文档,然后通过点击【帮助】菜单打开chm帮助文档,这可以大大提供用户体验感。

最终实现功能如下

htmlhelp

二、创作思路

我们通过调用hhctrl.ocx库中的HtmlHelpA函数来实现其功能

hhctrl.ocx 是一个 ActiveX 控件,主要用于显示 HTML 帮助文件(.chm 文件)

函数原型

DWORD HtmlHelpA(HWND hWnd,LPCSTR pszFile,UINT uCommand,DWORD dwData
);

参数说明

  • hWnd: 指向窗口句柄的指针,该窗口将接收帮助对话框的 WM_HELP 消息。
  • pszFile: 帮助文件的路径,通常是 .chm 文件。
  • uCommand: 指定要执行的操作,如 HH_DISPLAY_TOPIC 显示特定主题,HH_DISPLAY_INDEX 显示索引等。
  • dwData: 根据 uCommand 参数的不同,此参数可能包含主题 ID 或其他数据。

③ 返回值

返回值通常是一个 DWORD,其含义取决于 uCommand 参数

④ 调用示例

如果x想打开一个特定的帮助主题,你可以这样调用 HtmlHelpA

HtmlHelpA(hWnd, "myhelpfile.chm", HH_DISPLAY_TOPIC, MAKEINTRESOURCE(IDH_MyTopic));

三、创建程序基本框架

① 创建examplework工作区

② 新建exampleapp应用

③ 新建w_main 窗口,将Title设置为"HtmlHelp调用"

由于文章篇幅原因,以上步骤不再赘述,如果忘记了的小伙伴可以翻一翻该系列文章的第一篇复习一下

四、创建菜单

① 新建菜单对象,并添加菜单项如下图所示

新建菜单

② 将菜单保存为m_menu

五、编写代码

① 定义全局变量,代码如下

long HH_DISPLAY_TOPIC = 0

定义全局变量

② 定义全局扩展函数,代码如下

Function Long HtmlHelpA (long hwnd ,string lpHelpFile , long wCommand, string dwData) Library "hhctrl.ocx" 

定义全局扩展函数

③ 在w_main窗口中新建ue_help returns(none)函数,函数体代码如下

htmlhelpA(handle(this), "pb90.chm" + ">" + "main", HH_DISPLAY_TOPIC, "wbtargetp1.htm")

我们在根目录下准备pb90.chm文件

④ 在m_menu菜单的“帮助”菜单命名中的Clicked事件中添加如下代码

parentwindow.triggerevent("ue_help")

添加点击事件

⑤ 在m_menu菜单的“退出”菜单命名中的Clicked事件中添加如下代码

close(w_main)

退出点击事件

⑥ 在开发界面左边的System Tree中双击exampleapp应用,并在其Open事件中添加如下代码

open(w_main)

六、运行程序

经过一波代码编写之后,来检验下我们的劳动成果

htmlhelp

本期内容到这儿就结束了 ★,°:.☆( ̄▽ ̄)/$:.°★ 。希望对您有所帮助

我们下期再见ヾ(•ω•`)o (●’◡’●)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/42751.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

每日一道算法题 LCR 150. 彩灯装饰记录 II

题目 LCR 150. 彩灯装饰记录 II - 力扣(LeetCode) Python # Definition for a binary tree node. # class TreeNode: # def __init__(self, val0, leftNone, rightNone): # self.val val # self.left left # self.righ…

中英双语介绍超跑:Ferrari,Lamborghini,Porsche,Bentley,McLaren

中文版 法拉利(Ferrari) 历史 法拉利成立于1939年,由恩佐法拉利(Enzo Ferrari)创立,总部位于意大利马拉内罗。法拉利以其豪华跑车和赛车而闻名,特别是在一级方程式赛车(F1&#x…

2024年7月8日-7月14日(ue5肉鸽视频p34-p44)

试过重点放在独立游戏上,有个indienova独立游戏团队是全职的,由于他们干了几个月,节奏暂时跟不上,紧张焦虑了。五一时也有点自暴自弃了,实在没必要,按照自己的节奏走即可。精力和时间也有限,放在…

个人视角,社会影响力:自媒体的魅力所在

随着数字化时代的到来,自媒体正成为信息传播领域的一场革命。个人视角与社会影响力的结合,赋予了自媒体独特的魅力。在传统媒体受限制的同时,自媒体为每个人提供了表达自己观点和思想的自由。个体的真实视角使得自媒体在信息传播中发挥着重要…

14-40 剑和诗人14 - 为什么机器学习需要合成数据

​​​​​​ 数据是人工智能的命脉。如果没有高质量、有代表性的训练数据,我们的机器学习模型将毫无用处。但随着神经网络规模越来越大、人工智能项目越来越雄心勃勃,人们对数据的需求也越来越大,我们面临着一场危机——现实世界的数据收集和…

如何优化 PostgreSQL 中对于复杂数学计算的查询?

文章目录 一、理解复杂数学计算的特点二、优化原则(一)索引优化(二)查询重写(三)数据库配置调整(四)使用数据库内置函数的优势 三、具体的优化方案和示例(一)…

华为开源自研AI框架昇思MindSpore应用案例:FCN图像语义分割

Mask R-CNN MaskRCNN是一种概念简单、灵活、通用的目标实例分割框架,在检测出图像中目标的同时,还为每一个实例生成高质量掩码。这种称为Mask R-CNN的方法,通过添加与现有边框检测分支平行的预测目标掩码分支,达到扩展Faster R-CN…

LRU 缓存机制

题目 运用你所掌握的数据结构,设计和实现一个 LRU (最近最少使用) 缓存机制 。 实现 LRUCache 类: LRUCache(int capacity) 以正整数作为容量 capacity 初始化 LRU 缓存 int get(int key) 如果关键字 key 存在于缓存中,则返回关键字的值&a…

leetcode判断二分图

判断二分图 图的问题肯定要用到深度优先遍历或者广度优先遍历,但又不是单纯的深度优先遍历算法和广度优先遍历算法,而是需要在遍历的过程中加入与解决题目相关的逻辑。 题干中说了,这个图可能不是连通图,这个提示有什么作用呢&a…

shared_ptr 线程安全

为什么 shared_ptr 可以安全地在多个线程中共享? 循环引用 因为shared_ptr std::shared_ptr 的引用计数是线程安全的。这意味着你可以在多个线程中安全地拷贝、赋值和销毁 std::shared_ptr。然而,访问或修改 shared_ptr 所指向的对象时,需要…

昇思25天学习打卡营第20天|LSTM+CRF序列标注

学AI还能赢奖品?每天30分钟,25天打通AI任督二脉 (qq.com) LSTMCRF序列标注 概述 序列标注指给定输入序列,给序列中每个Token进行标注标签的过程。序列标注问题通常用于从文本中进行信息抽取,包括分词(Word Segmentation)、词性标…

明日周刊-第15期

赶在周末结束前输出一把,周日的晚上大家要睡个好觉哦。 文章目录 一周热点资源分享言论歌曲推荐 一周热点 科技创新与基础设施建设 深中通道正式通车试运营 时间:6月30日 内容:国家重大工程深中通道正式通车试运营,标志着珠江口东…

深入理解Java可执行JAR文件

目录 引言JAR文件简介创建JAR文件 使用JDK的jar工具使用IDE创建JAR文件 指定Main-Class属性 在MANIFEST.MF文件中指定使用jar工具指定 运行可执行JAR文件在Maven项目中创建可执行JAR文件 配置pom.xml使用maven-jar-plugin 在Gradle项目中创建可执行JAR文件 配置build.gradle使…

MySQL中in和exists的区别

in和exists都是在 SQL 中用于检查子查询中是否存在数据的谓词,它们的区别主要体现在语法、用途、效率、错误处理以及子查询范围等方面,具体区别如下: 语法: exists:exists (子查询)in:列 in (子查询) 或 子…

Java实现布隆过滤器的几种方式

布隆过滤器应用场景: 为预防大量黑客故意发起非法的时间查询请求,造成缓存击穿,建议采用布隆过滤器的方法解决。布隆过滤器通过一个很长的二进制向量和一系列随机映射函数(哈希函数)来记录与识别某个数据是否在一个集合中。如果数据不在集合中,能被识别出来,不需要到数…

吉时利KEITHLEY KI-488驱动和说明

吉时利KEITHLEY KI-488驱动和说明

[吃瓜教程]南瓜书第6章支持向量机

0.补充知识 0.1 超平面 定义: 超平面是指在𝑛维空间中,维度为 𝑛−1的子空间。它是分割空间的一个平面。 性质: n维空间的超平面 ( w T x b 0 , 其中 w , x ∈ R n ) (w^Tx_b0,其中w,x\in \mathbb R^n) (wTxb​0,其…

【大模型】大语言模型:光鲜背后的阴影——事实准确性和推理能力的挑战

大语言模型:光鲜背后的阴影——事实准确性和推理能力的挑战 引言一、概念界定二、事实准确性的局限2.1 训练数据的偏差2.2 知识的时效性问题2.3 复杂概念的理解与表述 三、推理能力的局限3.1 表层理解与深层逻辑的脱节3.2 缺乏常识推理3.3 无法进行长期记忆和连续推…

通过端口转发实现docker容器运行时端口更改

通过端口转发实现docker容器运行时端口更改 前言启动容器查看容器ip地址端口转发 前言 关于修改docker正在运行中容器端口,网上大部分分为3类: 1. 删除原有容器重新创建;2. 改配置文件;3. 在现有容器上新提交镜像,用新镜像起新的容器。 1和3属于同一种流…

Spring Boot与Apache Kafka Streams的集成

Spring Boot与Apache Kafka Streams的集成 大家好,我是免费搭建查券返利机器人省钱赚佣金就用微赚淘客系统3.0的小编,也是冬天不穿秋裤,天冷也要风度的程序猿! 一、Apache Kafka Streams简介 Apache Kafka Streams是一个用于构…