tangxu
2024-10-22 7a0d1efa4784d176a32f182ecae671711e98ca92
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
#region Imports
 
using System;
using System.Security;
using System.Windows.Forms;
 
#endregion
 
namespace DPumpHydr.WinFrmUI.RLT.Native
{
    #region SubClassNative
 
    [SuppressUnmanagedCodeSecurity]
    internal class SubClass : NativeWindow
    {
        public delegate int SubClassWndProcEventHandler(ref Message m);
        public event SubClassWndProcEventHandler SubClassedWndProc;
 
        public SubClass(IntPtr Handle, bool _SubClass)
        {
            base.AssignHandle(Handle);
            SubClassed = _SubClass;
        }
 
        public bool SubClassed { get; set; } = false;
 
        protected override void WndProc(ref Message m)
        {
            if (SubClassed)
            {
                if (OnSubClassedWndProc(ref m) != 0)
                {
                    return;
                }
            }
            base.WndProc(ref m);
        }
 
        public void CallDefaultWndProc(ref Message m)
        {
            base.WndProc(ref m);
        }
 
        #region HiWord Message Cracker
 
        public static int HiWord(int Number)
        {
            return (Number >> 16) & 0xffff;
        }
 
        #endregion
 
        #region LoWord Message Cracker
 
        public static int LoWord(int Number)
        {
            return Number & 0xffff;
        }
 
        #endregion
 
        #region MakeLong Message Cracker
 
        public static int MakeLong(int LoWord, int HiWord)
        {
            return (HiWord << 16) | (LoWord & 0xffff);
        }
 
        #endregion
 
        #region MakeLParam Message Cracker
 
        public static IntPtr MakeLParam(int LoWord, int HiWord)
        {
            return (IntPtr)((HiWord << 16) | (LoWord & 0xffff));
        }
 
        #endregion
 
        private int OnSubClassedWndProc(ref Message m)
        {
            if (SubClassedWndProc != null)
            {
                return SubClassedWndProc(ref m);
            }
 
            return 0;
        }
    }
 
    #endregion
}