Neroli
Win32ウィンドウメッセージ
最終更新:
kitay
-
view
2011/05/14 13:35 Sat
Win32ウィンドウメッセージ
定義はWinUser.hを参照
- using System.Windows.Interop;
-
- /// <summary>
- /// Window Messages
- /// </summary>
- public enum WindowsMessage
- {
- /// <summary>
- /// ウィンドウが移動した時
- /// </summary>
- WM_MOVE = 0x0003,
- /// <summary>
- /// ウィンドウのサイズが変更された時
- /// </summary>
- WM_SIZE = 0x0005,
- /// <summary>
- /// 非クライアント領域でマウスカーソルが移動した時
- /// </summary>
- WM_NCMOUSEMOVE = 0xa0,
- /// <summary>
- /// 非クライアント領域でマウスの左ボタンを押す
- /// </summary>
- WM_NCLBUTTONDOWN = 0xA1,
- /// <summary>
- /// 非クライアント領域でマウスの左ボタンを離す
- /// </summary>
- WM_NCLBUTTONUP = 0xA2,
- /// <summary>
- /// 非クライアント領域でマウスの左ボタンのダブルクリック
- /// </summary>
- WM_NCLBUTTONDBLCLK = 0xA3,
- /// <summary>
- /// 非クライアント領域でマウスの右ボタンを押す
- /// </summary>
- WM_NCRBUTTONDOWN = 0xA4,
- /// <summary>
- /// 非クライアント領域でマウスの右ボタンを離す
- /// </summary>
- WM_NCRBUTTONUP = 0xA5,
- /// <summary>
- /// システムメニューを選択
- /// </summary>
- WM_SYSCOMMAND = 0x0112,
- }
-
- /// <summary>
- /// WM_NCHITTEST and MOUSEHOOKSTRUCT Mouse Position Codes
- /// </summary>
- public enum MouseHitTestCodes
- {
- HTERROR = (-2),
- HTTRANSPARENT = (-1),
- HTNOWHERE = 0,
- HTCLIENT = 1,
- HTCAPTION = 2,
- HTSYSMENU = 3,
- HTGROWBOX = 4,
- HTSIZE = HTGROWBOX,
- HTMENU = 5,
- HTHSCROLL = 6,
- HTVSCROLL = 7,
- HTMINBUTTON = 8,
- HTMAXBUTTON = 9,
- HTLEFT = 10,
- HTRIGHT = 11,
- HTTOP = 12,
- HTTOPLEFT = 13,
- HTTOPRIGHT = 14,
- HTBOTTOM = 15,
- HTBOTTOMLEFT = 16,
- HTBOTTOMRIGHT = 17,
- HTBORDER = 18,
- HTREDUCE = HTMINBUTTON,
- HTZOOM = HTMAXBUTTON,
- HTSIZEFIRST = HTLEFT,
- HTSIZELAST = HTBOTTOMRIGHT,
- HTOBJECT = 19,
- HTCLOSE = 20,
- HTHELP = 21,
- }
- void _Loaded( object sender, RoutedEventArgs e )
- {
- var helper = new WindowInteropHelper(this);
- var hwndSource = HwndSource.FromHwnd( helper.Handle );
- var wndProcHandler = new HwndSourceHook( _WndProc );
- hwndSource.AddHook( wndProcHandler );
- }
-
- /// <summary>
- /// _WndProc
- /// </summary>
- /// <param name="hwnd"></param>
- /// <param name="msg"></param>
- /// <param name="wParam"></param>
- /// <param name="lParam"></param>
- /// <param name="handled"></param>
- /// <returns></returns>
- private IntPtr _WndProc(
- IntPtr hwnd,
- int msg,
- IntPtr wParam,
- IntPtr lParam,
- ref bool handled
- )
- {
- handled = false;
-
- switch( (Win32.WindowsMessage)msg )
- {
- case Win32.WindowsMessage.WM_NCMOUSEMOVE:
- break;
- case Win32.WindowsMessage.WM_SIZE:
- break;
- case Win32.WindowsMessage.WM_MOVE:
- break;
- case Win32.WindowsMessage.WM_NCLBUTTONDOWN:
- if( wParam.ToInt32() == (int)Win32.MouseHitTestCodes.HTCAPTION )
- {
- short x = (short)((lParam.ToInt32() & 0xFFFF));
- short y = (short)((lParam.ToInt32() >> 16));
- }
- break;
- case Win32.WindowsMessage.WM_NCLBUTTONDBLCLK:
- break;
- case Win32.WindowsMessage.WM_NCRBUTTONDOWN:
- break;
- case Win32.WindowsMessage.WM_NCRBUTTONUP:
- break;
- }
-
- return IntPtr.Zero;
- }
-
-