在.NET Windows窗体中包装msctls_hotkey32

时间:2010-07-18 05:06:53

标签: c# .net winapi custom-controls pinvoke

我正在尝试根据Control类和msctls_hotkey32 win32类在C#中使用热键控件。我有什么作品,虽然它并不完美:

    class Hotkey : TextBox
    {
        protected override CreateParams CreateParams
        {
            get
            {
                CreateParams parms = base.CreateParams;
                parms.ClassName = "msctls_hotkey32";
                return parms;
            }
        }
        // (some other p/invoke stuff for HKM_SETHOTKEY, etc.)
    }

优点是它简单而且有效。缺点是它从TextBox继承了一组不适用于此控件的功能。所以我的问题是 - 如果没有重新发明轮子,有没有更好的方法呢?

感谢。

1 个答案:

答案 0 :(得分:1)

您始终可以直接从System.Windows.Forms.Control继承。然后当然添加您想要支持的特定方法和属性。您需要适当地设置控件样式才能工作,这是一个快速示例。

using System;
using System.Windows.Forms;

namespace WindowsFormsApplication1
{
  class HotKey : Control  
  {
    public HotKey()
    {
      SetStyle(ControlStyles.UserPaint, false);
    }

    protected override CreateParams CreateParams
    {
      get
      {
        CreateParams cp = base.CreateParams;
        cp.ClassName = "msctls_hotkey32";

        return cp;
      }
    }
  }
}