1. 程式人生 > >winform 無邊框視窗 可改變窗體大小

winform 無邊框視窗 可改變窗體大小

最近專案需要做一個無邊框的懸浮窗,在網上搜索相關資料,大多都需要引入別的庫,或者語焉不詳或者程式碼不能執行。本文參考了以下文章實現改變窗體大小,原文程式碼直接使用會出現些狀況,比如說,往外拖動就再也不能往回拖動,等。因此使用本人修改過後的程式碼,記錄到部落格,方便日後查詢。

參考文章

1.無邊框

FormBroderStyle 的值設定為 None,即可去掉邊框。


2.改變窗體大小

這一步需要通過程式碼來實現

匯入相關包

using System;
using System.Drawing;
using System.Runtime.InteropServices;
using System.Windows.Forms;

做一個結構體

 //定義一個列舉,表示拖動方向

public enum MouseDirection {  

Herizontal,//水平方向拖動,只改變窗體的寬度  

Vertical,//垂直方向拖動,只改變窗體的高度  

Declining,//傾斜方向,同時改變窗體的寬度和高度

None//不做標誌,即不拖動窗體改變大小 }

設定全域性變數

        bool isMouseDown = false; //表示滑鼠當前是否處於按下狀態,初始值為否 
        MouseDirection direction = MouseDirection.None;//表示拖動的方向,起始為None,表示不拖動
	Point mouseOff;//滑鼠移動位置變數  

滑鼠按下事件

  private void Form1_MouseDown(object sender, MouseEventArgs e)
        {
          mouseOff = new Point(-e.X, -e.Y); //記錄滑鼠位置
    //當滑鼠的位置處於邊緣時,允許進行改變大小。
           
            if (e.Location.X >= this.Width - 10 && e.Location.Y > this.Height - 10)
            {
                isMouseDown = true;
            }
            else if (e.Location.X >= this.Width - 5)
            {
                isMouseDown = true;
            }
            else if (e.Location.Y >= this.Height - 5)
            {
                isMouseDown = true;
            }
            else
            {
                this.Cursor = Cursors.Arrow;//改變滑鼠樣式為原樣
                isMouseDown = false;
                SendMessage(this.Handle, WM_SYSCOMMAND, SC_MOVE + HTCAPTION, 0);//滑鼠移動事件
            }
        }

滑鼠鬆開事件
 private void Form1_MouseUp(object sender, MouseEventArgs e)
        {
            Console.WriteLine("鬆開滑鼠");
            isMouseDown = false;
            direction = MouseDirection.None;
            if (isDown)
                isDown = false;
        }

滑鼠移動事件
  private void Form1_MouseMove(object sender, MouseEventArgs e)
        {    
             //滑鼠移動到邊緣,改變滑鼠的圖示
            if (e.Location.X >= this.Width - 5)
            {
                this.Cursor = Cursors.SizeWE;
                direction = MouseDirection.Herizontal;
            }
            else if (e.Location.Y >= this.Height - 5)
            {
                this.Cursor = Cursors.SizeNS;
                direction = MouseDirection.Vertical;
            }
            //否則,以外的窗體區域,滑鼠星座均為單向箭頭(預設)             
            else
            {
                this.Cursor = Cursors.Arrow;

            }
            if (e.Location.X >= (this.Width + this.Left + 10) || (e.Location.Y > this.Height + this.Top + 10))
            {
                isMouseDown = false;
            }

            //設定好方向後,呼叫下面方法,改變窗體大小  
            ResizeWindow();
        }

改變窗體大小

private void ResizeWindow()
        {
            
            if (!isMouseDown)
                return;
            
            if (direction == MouseDirection.Herizontal)
            {
                this.Cursor = Cursors.SizeWE;
                this.Width = MousePosition.X - this.Left + 5;//改變寬度
            }
            else if (direction == MouseDirection.Vertical)
            {
                this.Cursor = Cursors.SizeNS;
                this.Height = MousePosition.Y - this.Top + 5;//改變高度
            }
            //滑鼠不在視窗右和下邊緣,把滑鼠打回原型
            else
            {
                this.Cursor = Cursors.Arrow;
                isMouseDown = false;
            }
        }


以上。



相關推薦

winform 邊框視窗 改變窗體大小

最近專案需要做一個無邊框的懸浮窗,在網上搜索相關資料,大多都需要引入別的庫,或者語焉不詳或者程式碼不能執行。本文參考了以下文章實現改變窗體大小,原文程式碼直接使用會出現些狀況,比如說,往外拖動就再也不能往回拖動,等。因此使用本人修改過後的程式碼,記錄到部落格,方便日後查詢。

Winform邊框視窗拖動及改變視窗大小

Winform無邊框視窗(FormBorderStyle屬性為None)預設是不可以拖動或者改變大小的。 1.      拖動無邊框視窗改變位置 方法1:通過mousedown、mousemove、mouseup、事件來改變視窗Location。 方法2:通過截獲訊息,進行

WPF邊框捕獲訊息改變視窗大小

原文: WPF無邊框捕獲訊息改變視窗大小 文章大部分轉載自http://blog.csdn.net/fwj380891124,如有問題,請聯絡刪除  最近一直在學習 WPF,看著別人做的WPF程式那麼漂亮,眼紅啊~ 很多漂亮的程式都是無邊框的。於是無邊框視窗操作就是最

Pyqt實現邊框視窗拖動及改變視窗大小

做個記錄,繪製邊框陰影可以忽略這裡不是主要 根據網上某位仁兄Qt的實現轉過來的,上完整程式碼 # coding:utf-8 from PyQt4.Qt import * import sys PADDING=4 sys.setrecursionlimit(10000)

Qt邊框視窗實現拖動和改變大小(修改)

先前發的程式碼有問題,主要是當視窗達到最大和最小尺寸的時候視窗改變大小的實際效果不符合邏輯,現在修改以後沒問題了。 下面我主要分享一下我的思考過程: 當我們改變一個視窗的大小時,如果視窗的寬度(高度)已經最小(最大),那麼很顯然只能放大(減小),同時拖動4個

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

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

winform 邊框窗體拖拽實現

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

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

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

WPF 自定義窗體實現拖動邊框改變窗體大小(2種方法)

方式一:呼叫user32.dllAPI 這種方式在網上有很多,這裡只是按步驟重新建立一次。讀者只需要跟著做就行。 第一步:建立一個WPF專案:WpfResizeWithoutBorder,右鍵專案檔案---->新增----->資源字典,並命名為:WindowsResizeBord

Qt實現半透明、邊框自由移動、不規則的窗體

先出示效果圖一張,如果不是讀者需要的,讀者可以看完效果圖之後就關閉本網頁啦。 功能要點 視窗無邊框 可自由拖動 背景透明度自定義 邊框可設定為異形 實現步驟                 第1步:新建一個QWidget的子類,這裡命名為BaseWidge

WPF邊框視窗滑鼠拖動縮放大小

通常,我們會 通過AllowsTransparency=”True”、 WindowStyle=”None” 這兩個屬性將wpf視窗的邊框去掉,由於邊框沒了,我們就不能通過滑鼠指標懸停在某一邊上拖動改變視窗的大小,此時若要能調整視窗大小,官方倒也提供了個屬性:R

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

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

Qt邊框視窗,自由縮放視窗大小

1,簡介 之前介紹過實現無邊框視窗的簡單方法,包含了標題的拖拽、最大最小關閉按鈕,雙擊最大化恢復等功能。 如圖: 但是這個方案有一個缺陷,那就是不能自由縮放視窗尺寸。 如果預設尺寸不是很適合內容,那麼只能選擇最大化。 在網上找了一些方案,不是太理想。 要麼是有細節處

用Qt實現窗體邊框移動、透明不規則顯示(需背景透明的圖片)

用Qt可以做出很炫的介面,更多的功能還有待學習^_^! 1、建構函式中需要做的設定: [cpp] view plaincopyprint? this->setWindowOpacity(1);//設定窗體不透明 this->setWind

WPF中的邊框透明縮放窗體

WPF中的無邊框透明窗體,由於沒有邊並且透明,窗體無法進行縮放操作,今天來講解如何解決這個問題。 先說一下思路,我們先手為該窗體新增4個邊,4個角用於縮放操作,然後再為他們寫事件,完成拖放操作。 xaml程式碼: <Windowx:Class="

禁止改變窗體大小

實現效果:    知識運用:   將窗體的FormBorderStyle屬性設定為FormBorderStyle.FixedDialog列舉值實現 實現程式碼:    private void button1_Click(object sender, EventArgs e)

Qt之邊框視窗建立

為什麼要去邊框? 美觀 個人感覺系統自帶的邊框美觀上稍微欠缺一點,這也是好多軟體去掉邊框的原因吧。 自定義 去掉邊框後,就能自由在任何位置新增一個自己的邊框、標題欄之類的,甚至可以在上面新增一些工具選單。 如何去掉邊框?

Qt 之自定義介面(實現邊框移動)

簡述 UI設計是指對軟體的人機互動、操作邏輯、介面美觀的整體設計。好的UI設計不僅是讓軟體變得有個性、有品位,還要讓軟體的操作變得舒適簡單、自由,充分體現軟體的定位和特點。 愛美之心人皆有之。其實軟體介面就像工業造型一樣,是產品的重要賣點。一個產品擁有美觀的

PyQt5邊框視窗的標題拖動和視窗縮放實現

網上找了半天都找不到好用的PyQt5無邊框視窗的實現 借鑑部分前輩的視窗拖放程式碼 自己搗鼓了一下,實現了一下無邊框視窗,問題可能還有一點,慢慢改吧 先做個筆記 py檔案 #!/usr/bin/env python #-*- coding:utf-

QML實現的邊框視窗的拉伸,拖拽,基本解決閃爍嚴重問題

使用qt製作的無邊框視窗,只需在其flag中加入FramelessWindowHint。然而,無邊框視窗意味著,無法使用原有的邊框拉伸,拖拽功能。在qwidget中,有很多實現的方法,比如重寫    + mouseMoveEvent(QMouseEvent *event)