Show Hotkeys at All Times

前端 未结 1 979
别那么骄傲
别那么骄傲 2020-12-19 15:36

Is is possible to make the underlining hotkey always visible on my controls without having to press the Alt key in a Windows form with Visual Studio - C#?

I only hav

相关标签:
1条回答
  • 2020-12-19 16:05

    Assuming you are using WinForms, you should be able to rely on the underlying Win32 mechanism. And that is the WM_UPDATEUISTATE message. The documentation says:

    An application sends the WM_UPDATEUISTATE message to change the UI state for the specified window and all its child windows.

    So you can send the message to the handle of the top-level window. You need to pass UIS_CLEAR for the low-order word of wParam and UISF_HIDEACCEL for the high-order word of wParam.

    Here is some rather crude sample code. Bear in mind that my C# expertise is very limited.

    public partial class Form1 : Form
    {
        private const uint WM_UPDATEUISTATE = 0x0128;
        private const uint WM_QUERYUISTATE = 0x0129;
        private const uint UIS_CLEAR = 2;
        private const uint UISF_HIDEACCEL = 0x2;
    
        public Form1()
        {
            InitializeComponent();
        }
    
        private void Form1_HandleCreated(object sender, PaintEventArgs e)
        {
            ClearHideAccel();
        }
    
        private void ClearHideAccel()
        {
            UIntPtr wParam = (UIntPtr)((UISF_HIDEACCEL << 16) | UIS_CLEAR);
            NativeMethods.SendMessage(this.Handle, WM_UPDATEUISTATE, wParam, IntPtr.Zero);
        }
    }
    
    internal class NativeMethods
    {
        [DllImport("User32", SetLastError = true)]
        public static extern IntPtr SendMessage(IntPtr hWnd, uint Msg, UIntPtr wParam, IntPtr lParam);
    }
    
    0 讨论(0)
提交回复
热议问题