调用WindowsAPI显示帮助提示

导言

     前一段时间,在编写程序的过程中,需要一个帮助功能按钮。这个按钮众所周知,按下按钮以后,鼠标变成带有问号的鼠标,然后点击画面上的控件,然后就回出现一个提示的文本,该处是什么含意。就好像右击“我的电脑”以后,选择属性,然后在出现的系统属性对话框中的右上角问号按钮一样。其实要实现该功能很简单,我们只需要调用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

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

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

相关文章

python整形魔法_python 魔法方法

1、什么是魔法方法?魔法方法就是可以给你的类增加魔力的特殊方法,如果你的对象实现(重载)了这些方法中的某一个,那么这个方法就会在特殊的情况下被 Python 所调用,你可以定义自己想要的行为,而这一切都是自…

oracle正则匹配全部,sql – 返回Oracle中正则表达式的所有匹配项

您已经提供了数据样本,说明这是一行,但已将其显示为两个不同的行.所以这个例子基于你的话.-- Sample of data from your question extra row for the sake of demonstration-- id column is added to distinguish the rows(I assume you have one)with t1(id, col) as(select …

hashtable,dictionary 从原理上说说有什么异同,哪个性能高一些

hashtable里存的对象全部是object类型 ,所有对象存进去都被转成object类型,读取出来每次都需要转换类型,hashtable对存入的类型没有限制 , 因此在读取转换类型时容易出错, dictionary只能存入定义时指定的类型,而且不像hashtable会把类型转换成object,存取起来比前者方便,效率更…

riak php7,Laravel中服务提供者的register和boot分别是干什么

register方法正如前面所提到的,在register方法中只绑定事物到服务容器,而不要做其他事情,否则,一不小心就能用到一个尚未被加载的服务提供者提供的服务。现在让我们来看看一个基本的服务提供者长什么样:namespace AppP…

天锐绿盾解密_天锐绿盾数据防泄密系统

天锐绿盾数据防泄密系统(简称数据防泄密系统)是一套从源头上保障数据安全和使用安全的软件系统。包含了文件透明加解密、内部文件流转、密级管控、离线管理、文件外发管理、灵活的审批流程、工作模式切换、服务器白名单等功能,并全面覆盖Mac、…

批处理文件入门

后缀是bat的文件就是批处理文件,是一种文本文件。简单的说,它的作用就是自动的连续执行多条命令,批处理文件的内容就是一条一条的命令。那它有什么用呢? 比如,在启动wps软件时,每次都必须执行 C:\>cd wp…

python批量生成图片_利用Python批量生成任意尺寸的图片

实现效果通过源图片,在当前工作目录的/img目录下生成1000张,分别从1*1到1000*1000像素的图片。效果如下:目录结构实现示例# -*- coding: utf-8 -*-import threadingfrom PIL import Imageimage_size range(1, 1001)def start():for size in …

sql server linkserver oracle,SQL Server中使用Linkserver连接Oracle的方法

1.安装Oracle Client连接到Oracle的前提是在SQL Server服务器上安装Oracle Client。Oracle Client下载地址如下:安装完毕后要修改对应的tnsnames文件才能连接对应的数据,该文件所在目录:Oracle安装路径\product\10.2.0\client_1\NETWORK\ADMI…

SQL Server日期格式转换大全

Sql Server 中一个非常强大的日期格式化函数 Select CONVERT(varchar(100), GETDATE(), 0): 05 16 2006 10:57AM Select CONVERT(varchar(100), GETDATE(), 1): 05/16/06 Select CONVERT(varchar(100), GETDATE(), 2): 06.05.16 Select CONVERT(varchar(100), GETDATE(), 3): 1…

oracle传date参数十二小时,Oracle数据库中 to_date()与24小时制表示法及mm分钟的显示...

一、在使用Oracle的to_date函数来做日期转换时,时候也许会直接的采用“yyyy-MM-dd HH:mm:ss”的格式作为格式进行转换,但是在Oracle中会引起错误:“ORA 01810 格式代码出现两次”。to_date(2005-01-01 13:14:20,yyyy-MM-dd HH24:mm:ss)原因是…

矩阵维度必须一致_如何从看得懂到会使用矩阵思维

本来我一开始是想学习如何使用艾森豪威尔矩阵的,但是利用学习观的方法想去网上找有关艾森豪威尔矩阵的例子时,发现网上几乎没有,网上能搜出来的都是对这个矩阵的介绍,看完这些介绍你会发现很简单,都能看懂,…

Windows 7 / Vista 分区问题

这个问题开始也困扰我很久,终得一无需安装软件且一招见招之法,步骤如下: 1.Windows键R,打开运行对话框,键入:diskpart #进入Windows 自带的磁盘管理程序进入DOS窗口:DISKPART> 2.键入&#x…

linux下的文件系统,Linux系统中常见的文件系统有哪些?

Linux系统是现在非常受欢迎的操作系统,在Linux之中,一切都是文件,因为有很多操作都是依靠文件系统才可以完成的,而且文件系统可以满足用户正常的使用,那么Linux中常见的文件系统有哪些?为大家介绍一下。总体来说&…

numpy 归一化_归一化(MinMax)和标准化(Standard)的区别

此文参考https://blog.csdn.net/u010947534/article/details/86632819定义上的区别归一化:将数据的值压缩到0到1之间,公式如下标准化:将数据所防伪均值是0,方差为1的状态,公式如下:归一化、标准化的好处&am…

学习网页栅格系统的几篇好文

1.[蓝色理想]网页的栅格系统设计[1] http://www.blueidea.com/design/doc/2008/6171.asp 2.[蓝色理想]网页的栅格系统设计[2] http://www.blueidea.com/design/doc/2008/6171_2.asp 3.网页栅格系统研究(1):960的秘密 http://www.68design.net…

linux中updatedb命令详解,updatedb命令

updatedb命令用来创建或更新 slocate/locate 命令所必需的数据库文件。updatedb命令的执行过程较长,因为在执行时它会遍历整个系统的目录树,并将所有的文件信息写入 slocate/locate 数据库文件中。 注意:slocate 本身具有一个数据库&#xff…

python多态_Python基础入门18节-第十六节 面向对象如何理解多态

多态是面向对象的一大特性,Python本身也是一门多态性的语言。在Python中要实现多态,还是得借助于上节提到的继承。假设有这么一个场景,在夏季我们可以看到荷花、牡丹花、太阳花,夏天一到这些花全都开放了。这些花我们就将它理解多…

WCF中的方法重载 实现

操作重载注意:WCF是不支持重载的,如果硬是写成重载的话,会抛出异常 InvalidOperationException,但是我们可以模拟! 原C#中的方法重载: interface ICalculator...{ int Add(int arg1,int arg2); double Add(double arg1,double arg2);} 在…

linux重新安装ssh服务器,Linux平台ssh服务器安装方法

玩蛇网推荐图文教程:python 列表关于SSH是什么及SSH的作用这里不做介绍,如果要了解可以自行面度哦。下面我就就开始以Linux平台为例,讲讲Linux平台ssh服务器安装方法。以下方法中都是以root用户权限去操作,大家在真实操作中&#…

linux重启后root密码错误,Linux技巧| 解决Debian Root密码忘记的问题

Debian Root密码忘记开机 grub 菜单下进入单用户模式进行修改密码/修改系统文件。解决过程注:本教程适用于 Debian 7 8 91. 首先。重启一下系统。在开机 grub 内核选择菜单那里,迅速按“e”。2. 将光标移动到“linux”开头的那一行,将原来的“…