Обертывание msctls_hotkey32 в .NET Windows Forms - PullRequest
0 голосов
/ 18 июля 2010

Я пытаюсь заставить работать элемент управления горячей клавиши в C # на основе класса Control и класса win32 msctls_hotkey32. То, что у меня работает, хотя и не идеально:

    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 Ответ

1 голос
/ 18 июля 2010

Вы всегда можете наследовать напрямую от 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;
      }
    }
  }
}
...