DragForm.cs
上传用户:szlfmled
上传日期:2020-11-22
资源大小:978k
文件大小:2k
源码类别:

C#编程

开发平台:

C#

  1. using System;
  2. using System.Windows.Forms;
  3. namespace WeifenLuo.WinFormsUI.Docking
  4. {
  5. // Inspired by Chris Sano's article:
  6. // http://msdn.microsoft.com/smartclient/default.aspx?pull=/library/en-us/dnwinforms/html/colorpicker.asp
  7. // In Sano's article, the DragForm needs to meet the following criteria:
  8. // (1) it was not to show up in the task bar;
  9. //     ShowInTaskBar = false
  10. // (2) it needed to be the top-most window;
  11. //     TopMost = true (not necessary here)
  12. // (3) its icon could not show up in the ALT+TAB window if the user pressed ALT+TAB during a drag-and-drop;
  13. //     FormBorderStyle = FormBorderStyle.None;
  14. //     Create with WS_EX_TOOLWINDOW window style.
  15. //     Compares with the solution in the artile by setting FormBorderStyle as FixedToolWindow,
  16. //     and then clip the window caption and border, this way is much simplier.
  17. // (4) it was not to steal focus from the application when displayed.
  18. //     User Win32 ShowWindow API with SW_SHOWNOACTIVATE
  19. // In addition, this form should only for display and therefore should act as transparent, otherwise
  20. // WindowFromPoint will return this form, instead of the control beneath. Need BOTH of the following to
  21. // achieve this (don't know why, spent hours to try it out :( ):
  22. //  1. Enabled = false;
  23. //  2. WM_NCHITTEST returns HTTRANSPARENT
  24. internal class DragForm : Form
  25. {
  26. public DragForm()
  27. {
  28. FormBorderStyle = FormBorderStyle.None;
  29. ShowInTaskbar = false;
  30. SetStyle(ControlStyles.Selectable, false);
  31. Enabled = false;
  32. }
  33. protected override CreateParams CreateParams
  34. {
  35. get
  36. {
  37. CreateParams createParams = base.CreateParams;
  38. createParams.ExStyle |= (int)Win32.WindowExStyles.WS_EX_TOOLWINDOW;
  39. return createParams;
  40. }
  41. }
  42. protected override void WndProc(ref Message m)
  43. {
  44. if (m.Msg == (int)Win32.Msgs.WM_NCHITTEST)
  45. {
  46. m.Result = (IntPtr)Win32.HitTest.HTTRANSPARENT;
  47. return;
  48. }
  49. base.WndProc (ref m);
  50. }
  51. public virtual void Show(bool bActivate)
  52. {
  53. if (bActivate)
  54. Show();
  55. else
  56. NativeMethods.ShowWindow(Handle, (int)Win32.ShowWindowStyles.SW_SHOWNOACTIVATE);
  57. }
  58. }
  59. }