代码之家  ›  专栏  ›  技术社区  ›  Reinderien

在.NET Windows窗体中包装msctls\u hotkey32

  •  0
  • Reinderien  · 技术社区  · 16 年前

    我正试图让一个热键控件在C#中工作,它基于control类和msctlsŠu hotkey32 win32类。我所拥有的一切都是可行的,尽管它并不完美:

        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 回复  |  直到 16 年前
        1
  •  1
  •   Chris Taylor    16 年前

    始终可以直接从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;
          }
        }
      }
    }