2009-08-22 90 views
1

是否有任何控件可以在沒有標題欄(頂部一個)/無框架的情況下移動窗口。如何製作沒有標題欄的窗口移動

我正在做一個筆記應用程序,因爲你知道所以我希望它是緊湊的。

+0

動怎麼辦?窗口會自動移動(類似於msn'微調')還是響應用戶操作('點擊並拖動')? – 2009-08-22 19:04:45

回答

4

您需要從WM_NCHITTEST在你的WndProc返回HTCAPTION:

public partial class Form1 : Form 
{ 
    public Form1() 
    { 
     InitializeComponent(); 
    } 
    const int WM_NCHITTEST = 0x0084; 
    const int HTCLIENT = 1; 
    const int HTCAPTION = 2; 
    protected override void WndProc(ref Message msg) 
    { 
     base.WndProc(ref msg); 
     if (msg.Msg == WM_NCHITTEST && msg.Result == (IntPtr)HTCLIENT) 
     { 
      msg.Result = (IntPtr)HTCAPTION; 
     } 
    } 
} 

這將使你的窗口的客戶區似乎到Windows是一個標題欄。

+0

是的,這個工作,但只有當你(可以)點擊表格的背景。術語「筆記應用程序」讓我想起了一個窗口填充文本框。 – 2009-08-22 19:26:32

+0

我在哪裏放這個代碼? – 2009-08-22 19:26:42

+0

@Henk Holterman我有「一些」背景:) 你並不真的需要動它,它就會不活動後自行關閉15秒。我只是想給用戶一些自由。 – 2009-08-22 19:28:55

0

在嘗試過這樣的事情之前,我可以告訴你它並不是特別容易。你需要做的是在OnMouseDown/OnMouseMove/OnMouseUp事件上向表單本身(或表單中的某個控件)提供當用戶單擊並拖動時更新控件的位置。據我所知,沒有內置控件可以讓你點擊並拖動標題以外的窗口。

0

如果您打算從頭開始構建應用程序,我建議您使用WPF創建它。

託德米蘭達具有windowsclient.net創建像應用小工具上的一個偉大的演示。

鏈接到演示:http://windowsclient.net/learn/video.aspx?v=5177

3

我寫了一個組件來做到這一點,你可以找到它here

它可以用來移動任何控件,而不僅僅是一個窗口。您可以使用它明確的代碼,或者只是拖放到設計表面上,並設置EnableDragMove屬性窗口或控件上,如下圖所示:

Screenshot

+0

這是一個更完整的答案,謝謝。 – 2009-08-23 12:54:48

+0

我希望我能給你超過1票! – 2012-05-13 20:50:13

相關問題