• 调用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 );
      }

          

  • 相关阅读:
    【干货分享】流程DEMO-制度发文和干部任免
    如何让流程表单禁用选人控件,但可以通过代码赋值?
    让任正非愤怒的到底是华为财管团队还是流程本身?
    品牌营销:不要Beat,要逼格!
    流程再造:以信息化管理解救“中国制造”
    三星Note 7停产,原来是吃了流程的亏
    BAT“搅局”B2B市场,CIO们准备好了吗?
    胡理辉:风电王国里的流程管控人
    周义:建设流程管理系统 我还在不停努力
    步步高彭雄:弄潮“互联网+零售”从端到端流程开始
  • 原文地址:https://www.cnblogs.com/yangyang8848/p/1542569.html
Copyright © 2020-2023  润新知