| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081 |
- /*******************************************************************************
- * Copyright(c) 2014 DongkeSoft All rights reserved. / Confidential
- * 类的信息:
- * 1.程序名称:DragForm.cs
- * 2.功能描述:类文件
- * 编辑履历:
- * 作者 日期 版本 修改内容
- * 陈晓野 2014/09/01 1.00 新建
- *******************************************************************************/
- using System;
- using System.Windows.Forms;
- namespace Dongke.IBOSS.PRD.Basics.DockPanel
- {
- // Inspired by Chris Sano's article:
- // http://msdn.microsoft.com/smartclient/default.aspx?pull=/library/en-us/dnwinforms/html/colorpicker.asp
- // In Sano's article, the DragForm needs to meet the following criteria:
- // (1) it was not to show up in the task bar;
- // ShowInTaskBar = false
- // (2) it needed to be the top-most window;
- // TopMost = true (not necessary here)
- // (3) its icon could not show up in the ALT+TAB window if the user pressed ALT+TAB during a drag-and-drop;
- // FormBorderStyle = FormBorderStyle.None;
- // Create with WS_EX_TOOLWINDOW window style.
- // Compares with the solution in the artile by setting FormBorderStyle as FixedToolWindow,
- // and then clip the window caption and border, this way is much simplier.
- // (4) it was not to steal focus from the application when displayed.
- // User Win32 ShowWindow API with SW_SHOWNOACTIVATE
- // In addition, this form should only for display and therefore should act as transparent, otherwise
- // WindowFromPoint will return this form, instead of the control beneath. Need BOTH of the following to
- // achieve this (don't know why, spent hours to try it out :( ):
- // 1. Enabled = false;
- // 2. WM_NCHITTEST returns HTTRANSPARENT
- internal class DragForm : Form
- {
- public DragForm()
- {
- FormBorderStyle = FormBorderStyle.None;
- ShowInTaskbar = false;
- SetStyle(ControlStyles.Selectable, false);
- Enabled = false;
- }
- protected override CreateParams CreateParams
- {
- get
- {
- CreateParams createParams = base.CreateParams;
- createParams.ExStyle |= (int)(Win32.WindowExStyles.WS_EX_NOACTIVATE | Win32.WindowExStyles.WS_EX_TOOLWINDOW);
- return createParams;
- }
- }
- protected override void WndProc(ref Message m)
- {
- if (m.Msg == (int)Win32.Msgs.WM_NCHITTEST)
- {
- m.Result = (IntPtr)Win32.HitTest.HTTRANSPARENT;
- return;
- }
- base.WndProc(ref m);
- }
- //The form can be still activated by explicity calling Activate
- protected override bool ShowWithoutActivation
- {
- get
- {
- return true;
- }
- }
- public virtual void Show(bool bActivate)
- {
- Show();
- if (bActivate)
- Activate();
- }
- }
- }
|