Neroli

Win32ウィンドウメッセージ

最終更新:

kitay

- view
管理者のみ編集可
2011/05/14 13:35 Sat

Win32ウィンドウメッセージ

定義はWinUser.hを参照
  1. using System.Windows.Interop;
  2.  
  3. /// <summary>
  4. /// Window Messages
  5. /// </summary>
  6. public enum WindowsMessage
  7. {
  8. /// <summary>
  9. /// ウィンドウが移動した時
  10. /// </summary>
  11. WM_MOVE = 0x0003,
  12. /// <summary>
  13. /// ウィンドウのサイズが変更された時
  14. /// </summary>
  15. WM_SIZE = 0x0005,
  16. /// <summary>
  17. /// 非クライアント領域でマウスカーソルが移動した時
  18. /// </summary>
  19. WM_NCMOUSEMOVE = 0xa0,
  20. /// <summary>
  21. /// 非クライアント領域でマウスの左ボタンを押す
  22. /// </summary>
  23. WM_NCLBUTTONDOWN = 0xA1,
  24. /// <summary>
  25. /// 非クライアント領域でマウスの左ボタンを離す
  26. /// </summary>
  27. WM_NCLBUTTONUP = 0xA2,
  28. /// <summary>
  29. /// 非クライアント領域でマウスの左ボタンのダブルクリック
  30. /// </summary>
  31. WM_NCLBUTTONDBLCLK = 0xA3,
  32. /// <summary>
  33. /// 非クライアント領域でマウスの右ボタンを押す
  34. /// </summary>
  35. WM_NCRBUTTONDOWN = 0xA4,
  36. /// <summary>
  37. /// 非クライアント領域でマウスの右ボタンを離す
  38. /// </summary>
  39. WM_NCRBUTTONUP = 0xA5,
  40. /// <summary>
  41. /// システムメニューを選択
  42. /// </summary>
  43. WM_SYSCOMMAND = 0x0112,
  44. }
  45.  
  46. /// <summary>
  47. /// WM_NCHITTEST and MOUSEHOOKSTRUCT Mouse Position Codes
  48. /// </summary>
  49. public enum MouseHitTestCodes
  50. {
  51. HTERROR = (-2),
  52. HTTRANSPARENT = (-1),
  53. HTNOWHERE = 0,
  54. HTCLIENT = 1,
  55. HTCAPTION = 2,
  56. HTSYSMENU = 3,
  57. HTGROWBOX = 4,
  58. HTSIZE = HTGROWBOX,
  59. HTMENU = 5,
  60. HTHSCROLL = 6,
  61. HTVSCROLL = 7,
  62. HTMINBUTTON = 8,
  63. HTMAXBUTTON = 9,
  64. HTLEFT = 10,
  65. HTRIGHT = 11,
  66. HTTOP = 12,
  67. HTTOPLEFT = 13,
  68. HTTOPRIGHT = 14,
  69. HTBOTTOM = 15,
  70. HTBOTTOMLEFT = 16,
  71. HTBOTTOMRIGHT = 17,
  72. HTBORDER = 18,
  73. HTREDUCE = HTMINBUTTON,
  74. HTZOOM = HTMAXBUTTON,
  75. HTSIZEFIRST = HTLEFT,
  76. HTSIZELAST = HTBOTTOMRIGHT,
  77. HTOBJECT = 19,
  78. HTCLOSE = 20,
  79. HTHELP = 21,
  80. }
  81. void _Loaded( object sender, RoutedEventArgs e )
  82. {
  83. var helper = new WindowInteropHelper(this);
  84. var hwndSource = HwndSource.FromHwnd( helper.Handle );
  85. var wndProcHandler = new HwndSourceHook( _WndProc );
  86. hwndSource.AddHook( wndProcHandler );
  87. }
  88.  
  89. /// <summary>
  90. /// _WndProc
  91. /// </summary>
  92. /// <param name="hwnd"></param>
  93. /// <param name="msg"></param>
  94. /// <param name="wParam"></param>
  95. /// <param name="lParam"></param>
  96. /// <param name="handled"></param>
  97. /// <returns></returns>
  98. private IntPtr _WndProc(
  99. IntPtr hwnd,
  100. int msg,
  101. IntPtr wParam,
  102. IntPtr lParam,
  103. ref bool handled
  104. )
  105. {
  106. handled = false;
  107.  
  108. switch( (Win32.WindowsMessage)msg )
  109. {
  110. case Win32.WindowsMessage.WM_NCMOUSEMOVE:
  111. break;
  112. case Win32.WindowsMessage.WM_SIZE:
  113. break;
  114. case Win32.WindowsMessage.WM_MOVE:
  115. break;
  116. case Win32.WindowsMessage.WM_NCLBUTTONDOWN:
  117. if( wParam.ToInt32() == (int)Win32.MouseHitTestCodes.HTCAPTION )
  118. {
  119. short x = (short)((lParam.ToInt32() & 0xFFFF));
  120. short y = (short)((lParam.ToInt32() >> 16));
  121. }
  122. break;
  123. case Win32.WindowsMessage.WM_NCLBUTTONDBLCLK:
  124. break;
  125. case Win32.WindowsMessage.WM_NCRBUTTONDOWN:
  126. break;
  127. case Win32.WindowsMessage.WM_NCRBUTTONUP:
  128. break;
  129. }
  130.  
  131. return IntPtr.Zero;
  132. }
  133.  
  134.  


記事メニュー
人気記事ランキング
ウィキ募集バナー