1. 程式人生 > >winform移動無邊框窗體

winform移動無邊框窗體

在開發Winform窗體程式的時候,有時希望去掉窗體的邊框,然後進行一系列自定義的操作。但是往往在去掉邊框之後會遇到一個問題:如何使用滑鼠拖動該窗體?

  在此推薦一種我經常使用的方法:

[DllImport("user32.dll", EntryPoint = "SendMessageA")]
private static extern int SendMessage(int hwnd, int wMsg, int wParam, int lParam);
[DllImport("user32.dll")]
private static extern int ReleaseCapture();

private const int WM_NCLBUTTONDOWN = 0XA1;   //定義滑鼠左鍵按下
private const int HTCAPTION = 2;

// 重寫為了移動無邊框窗體
protected override void OnMouseDown(MouseEventArgs e)
{
	base.OnMouseDown(e);
	MoveForm();
}

private void MoveForm()
{
	ReleaseCapture();
	SendMessage((int)this.Handle, WM_NCLBUTTONDOWN, HTCAPTION, 0);
}

  在上述程式碼中,SendMessage與ReleaseCapture是兩個Win32的API,WM_NCLBUTTONDOWN與HTCAPTION是兩個常量,前者代表的是在窗體非客戶區滑鼠左鍵按下,後者代表的是滑鼠當前左邊在窗體標題欄上。(想了解更多關於win32常量的含義及數值請加QQ群:207043655)

  實現的原理是在非客戶區滑鼠左鍵按下,就向系統傳送一個滑鼠當前在標題欄的假訊息,於是系統便按標題欄的特性進行處理,也就可以移動窗體了。

  舉一反三:如果我在窗體上放了一個Label控制元件(或者其他控制元件),滑鼠在該控制元件範圍內還能移動窗體嗎?如果不能,那麼要怎麼做才能移動呢?

  如果你對上面的問題有自己的想法,歡迎加QQ群:207043655,與我們一起交流討論,一起學習,一起成長。


相關推薦

winform移動邊框窗體

在開發Winform窗體程式的時候,有時希望去掉窗體的邊框,然後進行一系列自定義的操作。但是往往在去掉邊框之後會遇到一個問題:如何使用滑鼠拖動該窗體?   在此推薦一種我經常使用的方法: [DllImport("user32.dll", EntryPoint = "Sen

C#Winform實現邊框窗體滑鼠拖動

在有時候我們為了實現軟體的美觀,我們需要把窗體的邊框隱藏,但是問題也會隨之而來,在屬性中設定了FormBorderStyle應該為None,邊框便可以隱藏,但是我們在使用軟體時卻無法拖動窗體,

C# WinForm 改變邊框窗體尺寸

c# 透明winform上建立了自定義邊框後,需要拖動自定義邊框達到改變窗體尺寸的效果。使用了很多方法發現有些程式碼只能橫向拉伸,有些程式碼會造成無法拖動。 最後才找到這個切實可行的辦法。 const int Guying_HTLEFT = 10;

C#WinForm邊框窗體移動方法、模仿鼠標單擊標題欄移動窗體位置

發送 mage log sin mes win sender src using C#WinForm無邊框窗體移動方法、模仿鼠標單擊標題欄移動窗體位置 這裏介紹倆種辦法 方法一:直接通過修改窗體位置從而達到移動窗體的效果 方法二:直接偽裝發送單擊任務欄消息,讓應用程序

C# winform 邊框窗體滑鼠點選移動事件

這裡所謂的無邊框窗體是指去除系統自帶的標題欄和最大最小化等那周圍一圈的窗體 即把窗體的FormBorderStyle設定為none後的窗體(效果如下) 這是有邊框的: 去除邊框的: 右邊框窗體想要移動位置,用滑鼠點選標題欄移動即可,那麼沒邊框的該如何移動這個問題,

C# WinForm開發系列之自定義邊框窗體(最大化,最小化,關閉,拉伸和移動的相關知識)

        ////重寫系統WndProc函式,使無邊框窗體可移動         protected override void WndProc(ref Message m)         {             switch (m.Msg)             {              

winform邊框窗體點擊任務欄最小化

mini spa inf clas style cte color con reat protected override CreateParams CreateParams { get {

C# 鼠標點擊移動窗體代碼,可以實現邊框窗體的拖動

點擊 obj cat += tar sender see sed false private static bool IsDrag = false; private int enterX; private int enterY;

winform 邊框窗體拖拽實現

sed style windows part fse use left clas void using System; using System.Collections.Generic; using System.ComponentModel; using Syst

WPF 下邊框窗體改變大小和移動

       最近一直在學習 WPF,看著別人做的WPF程式那麼漂亮,眼紅啊~ 很多漂亮的程式都是無邊框的。於是無邊框視窗操作就是最重要的了。無邊框視窗的操作一直以來相關的資料就很少。WPF 下的就更少了,有的大多是無邊框窗體的移動。在得到群裡高人的指點,再查了一些資料之

Qt實現邊框窗體移動

本文內容,基本參考自網際網路,所以定義為轉載。 我們知道360安全衛士的介面是沒有外邊框的,去除外邊框 setWindowFlags(Qt::FramelessWindowHint);  但是去除邊框之後,無法移動整個窗體,為了實現這個移動效果,需要重新實現三個函式

Qt學習筆記:邊框窗體移動

類似360安全衛士介面, 滑鼠只能夠在綠色的位置進行點選和移動,這就是採用Qt實現的無邊框窗體的移動。 其實實現無邊框窗體的移動主要是靠以下三個函式: void mousePres

Delphi實現邊框窗體移動

將窗體的 BorderStyle 設定為 bsNone,窗體的標題欄就不會顯示,此時,如果想移動窗體,方法如下:procedure TForm1.FormMouseDown(Sender: TObject; Button: TMouseButton; Shift: TSh

C# Form窗體的功能操作,邊框窗體移動邊框窗體的尺寸縮放,儲存和恢復窗體的尺寸和座標資訊

/// <summary> /// 此類用於實現一些可用於Form窗體的功能操作 /// </summary> class FormTool { //using System.Runtime.InteropServices; [

c#禁止雙擊最大化,邊框窗體移動

轉載的,不是特別懂,以後再看 protected override void WndProc(ref Message m) {     switch (m.Msg)     {         case 0x84:             base.WndProc(ref m);          

QT 建立一個 可移動、可拉伸的邊框窗體

    在使用QT建立窗體的時候,為了使視窗美化,通常不使用QT自帶的邊框。會呼叫下面函式去除窗體邊框。setWindowFlags(Qt::FramelessWindowHint)    但是有個問題,當去除了QT自帶邊框後,窗體就變得不能移動了,也不能改變視窗大小了。這確

C#去邊框以及邊框窗體移動

1.去邊框  : 1) 選中要去除邊框的窗體,按F4調出窗體屬性。 2)在屬性框中找到FormBorderStyle選擇none。 去邊框之前效果 去邊框之後效果 2.去掉邊框後實現對視窗程

pyqt5_控件_自定義邊框窗體拖動

spa 窗體拖動 ica 定義 event sta track gets button from PyQt5.QtWidgets import * from PyQt5.QtCore import * from PyQt5.QtGui import * import sy

關於自定義的Qt邊框窗體

       現在桌面軟體的設計風格已經偏向於扁平化了。那麼基於Qt開發的桌面應用也會常常被提出扁平化無邊框的需求。怎麼去掉應用程式旁邊土到渣的邊框呢?本文應該可以幫到你。 QT += core gui greaterThan(QT_MA

WPF中製作邊框窗體

                眾所周知,在WinForm中,如果要製作一個無邊框窗體,可以將窗體的FormBorderStyle屬性設定為None來完成。如果要製作成異形窗體,則需要使用圖片或者使用GDI+自定義繪製。那麼,在WPF中,我們怎樣製作一個無邊框窗體呢?答案是將Window的WindowStyl