1. using System;
  2. using System.Text;
  3. using System.Windows.Forms;
  4. using System.Runtime.InteropServices;
  5. using System.Drawing;
  6. using System.ComponentModel;namespace Vista.Controls
  7. {
  8. public class CommandLink : Button
  9. {
  10. [DllImport("user32.dll", CharSet = CharSet.Unicode)]
  11. unsafe static extern IntPtr SendMessage(HandleRef hWnd, uint Msg, void* wParam, void* lParam);
  12.  
  13. const int BS_CENTER = 0x00000300;
  14. const int BS_COMMANDLINK = 0x0000000E;
  15. const int BS_DEFCOMMANDLINK = 0x0000000F;
  16.  
  17. const uint BCM_SETNOTE = 0x00001609;
  18. const uint BCM_GETNOTE = 0x0000160A;
  19. const uint BCM_GETNOTELENGTH = 0x0000160B;
  20. const uint BCM_SETSHIELD = 0x0000160C;
  21.  
  22. public XButton()
  23. {
  24. //this.FlatStyle = FlatStyle.System;
  25. }
  26.  
  27. protected override Size DefaultSize
  28. {
  29. get
  30. {
  31. return new Size(, );
  32. }
  33. }
  34.  
  35. protected override CreateParams CreateParams
  36. {
  37. get
  38. {
  39. CreateParams cParams = base.CreateParams;
  40. cParams.Style |= BS_COMMANDLINK;
  41. return cParams;
  42. }
  43. }
  44.  
  45. private bool _shield = false;
  46.  
  47. [Category("Command Link"),
  48. Description("Gets or sets the shield icon visibility of the command link."),
  49. DefaultValue(false)]
  50. public unsafe bool Shield
  51. {
  52. get
           {
              return _shield;
           }
  53. set
  54. {
  55. _shield = value;
  56. SendMessage(new HandleRef(this, Handle), BCM_SETSHIELD, null, &value);
  57. }
  58. }
  59.  
  60. [Category("Command Link"),
  61. Description("Gets or sets the note text of the command link."),
  62. DefaultValue("")]
  63. public string Note
  64. {
  65. get
  66. {
  67. return GetNoteText();
  68. }
  69. set
  70. {
  71. SetNoteText(value);
  72. }
  73. }
  74.  
  75. private unsafe void SetNoteText(string value)
  76. {
  77. fixed (char* lpStr = value)
  78. {
  79. SendMessage(new HandleRef(this, Handle), BCM_SETNOTE, null, lpStr);
  80. }
  81. }
  82.  
  83. private unsafe string GetNoteText()
  84. {
  85. int dwLength = (int)SendMessage(new HandleRef(this, Handle), BCM_GETNOTELENGTH, null, null) + ;
  86. char* lpStr = stackalloc char[dwLength];
  87. SendMessage(new HandleRef(this, Handle), BCM_GETNOTE, &dwLength, lpStr);
  88. return new string(lpStr);
  89. }
  90.  
  91. }
  92. }

C# Vista Command Link Control with Windows Forms的更多相关文章

  1. Windows Forms (一)

    导读 1.什么是 Windows Forms 2.需要学Windows Forms 么? 3.如何手写一个简单的Windows Forms 程序 4.对上面程序的说明 5.Form 类与Control ...

  2. Windows Forms编程实战学习:第三章 菜单

    第三章 菜单 1,控件和容器 所有的Windows Forms控件都是从System.Windows.Forms.Control类继承的,相关类的层次结构如下图所示: MarshalByRefObje ...

  3. “FormCRUD.csProj.FormMain.Name”隐藏了继承的成员“System.Windows.Forms.Control.Name”。如果是有意隐藏,请使用关键字 new。

    一旦运行就显示:“FormCRUD.csProj.FormMain.Name”隐藏了继承的成员“System.Windows.Forms.Control.Name”.如果是有意隐藏,请使用关键字 ne ...

  4. System.Windows.Forms.Control : Component, IOleControl, IOleObject, IOleInPlaceObject, IOleInPlaceActiveObject....

    #region 程序集 System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 ...

  5. System.Windows.Forms.ListView : Control

    #region 程序集 System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 ...

  6. System.Windows.Forms.Control.CheckForIllegalCrossThreadCalls = false

    多线程程序中,新创建的线程不能访问UI线程创建的窗口控件,这时如果想要访问窗口的控件,发现无法对其控制. 这时可将窗口构造函数中的CheckForIllegalCrossThreadCalls设置为f ...

  7. create Context Menu in Windows Forms application using C# z

    In this article let us see how to create Context Menu in Windows Forms application using C# Introduc ...

  8. Wizard Framework:一个自己开发的基于Windows Forms的向导开发框架

    最近因项目需要,我自己设计开发了一个基于Windows Forms的向导开发框架,目前我已经将其开源,并发布了一个NuGet安装包.比较囧的一件事是,当我发布了NuGet安装包以后,发现原来已经有一个 ...

  9. Double Buffering Windows Forms

    Double Buffering Windows Forms As much as we would like it not to be the case, graphics can be slow ...

随机推荐

  1. 学习Spring Boot

    Spring boot 是什么 ? 简单说, spring boot 是一个构建项目的工具, 一个脚手架. Spring boot 能干什么? spring boot 做非常少的配置就可以构建生产级别 ...

  2. 用Socket编写的聊天小程序

    Socket是什么? 是套接字,除此之外我也不太清楚,先略过 直接上实例,首先服务端: ; //自定义端口号 private string ServerUser = "Tracy" ...

  3. Android优秀github项目整理

    1.照相选相册,裁剪的 library TakePhotohttps://github.com/crazycodeboy/TakePhoto 2几行代码快速集成二维码扫描功能https://githu ...

  4. 当今商业中使用的三种十分重要的IT应用系统

    本文为读书笔记,其中内容摘自<信息时代的管理信息系统>第八版第二章 当今商业中使用的三种十分重要的IT应用系统: 供应链管理(SCM) 客户关系管理(CRM) 电子协同(e-collabo ...

  5. Java/JSP/JS Debug笔记

    2006年的blog,当时好生涩啊: ------------------------ 谨以此文献给我没有头绪或心劲去debug的日子和很多辛苦debug的同志们. 应部门一个科的需求,给他们写一个夜 ...

  6. MySQL的变量分类总结

    在MySQL中,my.cnf是参数文件(Option Files),类似于ORACLE数据库中的spfile.pfile参数文件,照理说,参数文件my.cnf中的都是系统参数(这种称呼比较符合思维习惯 ...

  7. 使用MongoDB存储集合的一些问题

    这两天在工作中被Mongo集合存储给整得头大,当然也是我的认知太浅,所以下面我来分享下我所遇到的这个问题希望有大佬能给出更好的解决方案, 1.需求: 存储一个从前端接收未知数据类型的集合 例: 由于是 ...

  8. 登录测试用例sql语句注入

    利用SQL注入漏洞登录后台的实现方法 作者: 字体:[增加 减小] 类型:转载 时间:2012-01-12我要评论 工作需要,得好好补习下关于WEB安全方面的相关知识,故撰此文,权当总结,别无它意.读 ...

  9. centOS7固定IP

    接续安装完成centOS虚拟机后,重启完成后,会出现如下的界面: 这里,我们使用root帐号和已配置的root密码进行登陆,登陆完成后,输入如下命令,运行结果如下图: dhclient 通过上述命令, ...

  10. JDK10都发布了,nio你了解多少?

    前言 只有光头才能变强 回顾前面: 给女朋友讲解什么是代理模式 包装模式就是这么简单啦 本来我预想是先来回顾一下传统的IO模式的,将传统的IO模式的相关类理清楚(因为IO的类很多). 但是,发现在整理 ...