导言

前一段时间,在编写程序的过程中,需要一个帮助功能按钮。这个按钮众所周知,按下按钮以后,鼠标变成带有问号的鼠标,然后点击画面上的控件,然后就回出现一个提示的文本,该处是什么含意。就好像右击“我的电脑”以后,选择属性,然后在出现的系统属性对话框中的右上角问号按钮一样。其实要实现该功能很简单,我们只需要调用C#提供的HelpProvider类就可以了,但是这里有一个问题,如果我们使用该类显示帮助,需要将窗体的HelpButton设置为True,MaximizeBox设置为False,MinimizeBox设置为False,才能使用。那么我们有什么办法,既可以让窗体有最大化最小化,又可以让我们提供帮助按钮的功能呢?

实现

     我们为了实现该功能,主要的办法是我们调用了API库“user32.dll”的SendMessage函数,该函数发送了一条消息给窗体。首先我们在使用这个函数之前,需要DLLImport相关的DLL,并且定义好相关的参数,代码如下:

[DllImport( "user32.dll", CharSet = CharSet.Auto, SetLastError = false )]
private static extern IntPtr SendMessage
( IntPtr hWnd, Int32 Msg, IntPtr wParam, IntPtr lParam );

private const int WM_SYSCOMMAND = 0x112;
private const int SC_CONTEXTHELP = 0xf180;

我们定义完毕函数以后 ,需要定义一个HelpProvider对象,该对象的作用是截断帮助的请求,并且显示相应的提示。代码如下:

   private System.Windows.Forms.HelpProvider helpProvider1;
   helpProvider1.SetHelpString( textBox1, "http://www.shehui001.com/" );//帮助所提示的内容
   helpProvider1.SetShowHelp( textBox1, true );//将帮助信息与控件绑定

最后我们实行帮助按钮仿真功能按钮,在点击的事件中,我们必须使用适当的参数调用SendMessage函数。代码如下:

private void btnHelp_Click( object sender, EventArgs e )
  {
   // 将Capture 设置为false, 将使控件不会接收到所有的鼠标消息: 当鼠标在窗体的外边时,窗体是不会接收到任何消息.
            btnHelp.Capture = false;
   // 利用SendMessage函数模仿帮助功能

SendMessage( this.Handle, WM_SYSCOMMAND, ( IntPtr )SC_CONTEXTHELP, IntPtr.Zero );
  }

转载于:https://www.cnblogs.com/yangyang8848/archive/2009/08/10/1542569.html

调用WindowsAPI显示帮助提示相关推荐

  1. iOS 调用支付宝 显示系统繁忙,请稍后再试(ALI10

    调用支付宝 显示系统繁忙,请稍后再试(ALI10) 我们签约的是 移动支付 代码没有报错,为何老是提示显示系统繁忙 在targets 的中 info  添加  url types  添加  alisd ...

  2. 已解决cv2库安装后,调用函数显示黄色高亮

    问题描述: 这里用一下别人的错误示范,我的已经改好了不想改回去了,上面cv2的调用函数显示黄色高亮,而且运行程序返回值是一串乱码 问题描述:进程已结束,退出代码-1073741819 (0xC0000 ...

  3. IDEA设置方法自动显示参数提示

    IDEA设置方法自动显示参数提示 IDEA设置方法自动显示参数提示 捷键 代码写到16行之后,过了一会再去完善valueOf方法,但是Integer有好几个重载的valueOf方法,具体用哪个可以按c ...

  4. 织梦联动类别-地区调用不显示第三级城市的解决方法

    织梦联动类别-地区调用不显示第三级城市的原因 1.附加表dede_addoninfos 或者 你的其他表中的字段nativeplace数据类型为int型,无法保存第三级城市对应的的evalue值(比如 ...

  5. 显示消息提示对话框(WebForm)

    1: /// <summary> 2: /// 显示消息提示对话框. 3: /// Copyright (C) Maticsoft 4: /// </summary> 5: p ...

  6. IDEA设置取消自动显示参数提示

    IDEA设置取消自动显示参数提示 最近在使用IDEA的过程中,发现方法中一直显示形参名的提示,无法选中,也无法删除,基于不同人的使用习惯不同,有的人不喜欢这种提示,我也在网上寻找各种解决方案,由于搜索 ...

  7. php可以调用windowsapi吗_2.如何调用WindowsApi

    2.如何调用WindowsApi 在上一篇章节中 很不专业的介绍了一下WindowsApi 如果你本身就知道 那你也压根不用看 如果你本身就不知道 就算我说的再多 估计你也觉得是多余 所以还是来点实际 ...

  8. 加载本地json文件,并利用批处理调用Chrome显示html

    加载本地json文件 1.加载本地json文件 为了调试保存在本地的json数据,需要进行读入.一般使用jQuery来进行,但需要对浏览器进行一点设置. Chrome浏览器中有一个启动选项--allo ...

  9. STM32中断中调用OLED显示出现OLED花屏

    STM32中断中调用OLED显示出现OLED花屏 在TIM5中断处理函数中,我写了OLED显示,经过DEBUG发现程序执行到OLED显示语句的时候,OLED就会花屏. //中断服务处理函数 void ...

最新文章

  1. datagrid底部显示水平滚动_easyUI datagrid 横向滚动条显示问题
  2. NLP | 医学AI又一突破,微软开源生物医学NLP基准:BLURB
  3. FSMO角色以及DC修复
  4. IOS的UI基础02
  5. 1730: 数区间(线段覆盖,贪心)
  6. requirednew基于xml配置日志不回滚_Mybatis 系列 4:引入日志框架
  7. HBuilder:最快的Web开发IDE
  8. windows7使用Sphinx+PHP+MySQL详细介绍
  9. TPAMI 2022综述 | 视觉Transformer系统性测评及未来方向探讨
  10. mac 用户 文件夹 权限_WIN7局域网文件分权限共享设置方法
  11. 源码:Hadoop-3.0.3 启动过程中执行start-all.sh开始
  12. 二叉树创建,遍历,叶子,深度
  13. 关于SUSE linux
  14. Fiddler2介绍
  15. vfp 生成html,利用VFP脚本开发动态Web系统
  16. 直播丨易鲸捷HTAP融合型分布式数据库EsgynDB SQL编译器详解
  17. 金蝶云系统服务器,金蝶云星空-文件服务器配置指南
  18. 《Using OpenRefine》翻译~14
  19. 工程师笔记 | 嵌入式工程师常用软件
  20. 计算机excel在三维饼图改字,Excel如何一键生成饼图 Excel如何修改饼图

热门文章

  1. mnist数据集图片提取出来
  2. 理解linux time命令的输出
  3. VC++ MSDN中的 _beginthreadex与_endthreadex 的使用例子
  4. win7系统 普通管理员被删除,超级管理员被禁用。普通用户下。怎么激活administrator
  5. 遗传算法各Matlab工具箱简介
  6. 人工智能AI实战100讲(一)-机器人语义建图(上)
  7. kmeans鸢尾花分类python代码_python实现鸢尾花三种聚类算法(K-means,AGNES,DBScan)
  8. java程序运行结果题_2016年关于Java编程与程序运行结果笔试题
  9. java字符串学习_java之字符串学习记录
  10. 程序员应该如何提问?