wpf 自定义 无边框 窗体 resize 实现

参数定义

 1         class NativeMethods
 2         {
 3             public const int WM_NCHITTEST = 0x84;
 4             public const int HTCAPTION = 2;
 5             public const int HTLEFT = 10;
 6             public const int HTRIGHT = 11;
 7             public const int HTTOP = 12;
 8             public const int HTTOPLEFT = 13;
 9             public const int HTTOPRIGHT = 14;
10             public const int HTBOTTOM = 15;
11             public const int HTBOTTOMLEFT = 16;
12             public const int HTBOTTOMRIGHT = 17;
13         }

加hook

1 IntPtr windowHandle = new WindowInteropHelper(win).Handle;
2  HwndSource windowSource = HwndSource.FromHwnd(windowHandle);
3 windowSource.RemoveHook(WndProc);   
 1  private static IntPtr WndProc(IntPtr hwnd, int msg, IntPtr wParam, IntPtr lParam, ref bool handled)
 2         {
 3             int GripSize = 16;
 4             int BorderSize = 7;
 5             Window win = (Window)System.Windows.Interop.HwndSource.FromHwnd(hwnd).RootVisual;
 6             if (msg == NativeMethods.WM_NCHITTEST)
 7             {
 8                 int x = lParam.ToInt32() << 16 >> 16, y = lParam.ToInt32() >> 16;
 9                 Point pos = win.PointFromScreen(new Point(x, y));
10
11                 //bottom
12                 if (pos.X > GripSize &&
13                     pos.X < win.ActualWidth - GripSize &&
14                     pos.Y >= win.ActualHeight - BorderSize)
15                 {
16                     handled = true;
17                     return (IntPtr)NativeMethods.HTBOTTOM;
18                 }
19
20                 //Right
21                 if (pos.Y > GripSize &&
22                     pos.X > win.ActualWidth - BorderSize &&
23                     pos.Y < win.ActualHeight - GripSize)
24                 {
25                     handled = true;
26                     return (IntPtr)NativeMethods.HTRIGHT;
27                 }
28
29                 // Top, Left, Right, Corners, Etc.
30                 //HTBOTTOMRIGHT
31                 if (pos.X > win.ActualWidth - GripSize &&
32                    pos.Y >= win.ActualHeight - GripSize)
33                 {
34                     handled = true;
35                     return (IntPtr)NativeMethods.HTBOTTOMRIGHT;
36                 }
37             }
38
39             return IntPtr.Zero;
40         }
时间: 2024-10-27 11:30:46

wpf 自定义 无边框 窗体 resize 实现的相关文章

Winform自定义无边框窗体

你还在为Winform原生窗体的丑陋而烦恼么?下面来看一下如何制作一个既漂亮又简单的窗体 先看一下效果图: 首先我们新建一个窗体FormM继承原生Form 看一下主要的代码 public partial class FormM : Form { public FormM() { InitializeComponent(); } /// <summary> /// 是否允许最大化 /// </summary> private bool maxVisible = true; [Desc

使用WPF创建无边框窗体

一.无边框窗口添加窗口阴影 实际上在WPF中添加无边框窗口的窗口阴影十分简单. 首先,设置WindowStyle="None"以及AllowsTransparency="True"使得窗口无边框.并对Window添加DropShadowEffect效果并设定相关参数,在这里我根据设计师的要求设置ShadowDepth="1" BlurRadius="6" Direction="270" Opacity=&q

pyqt5_控件_自定义无边框窗体拖动

from PyQt5.QtWidgets import * from PyQt5.QtCore import * from PyQt5.QtGui import * import sys class Example(QWidget): _startPos = None _endPos = None _isTracking = False def __init__(self): super().__init__() self._initUI() def _initUI(self): self.se

01.WPF中制作无边框窗体

[引用:]http://blog.csdn.net/johnsuna/article/details/1893319 众所周知,在WinForm中,如果要制作一个无边框窗体,可以将窗体的FormBorderStyle属性设置为None来完成.如果要制作成异形窗体,则需要使用图片或者使用GDI+自定义绘制. 那么,在WPF中,我们怎样制作一个无边框窗体呢? 答案是将Window的WindowStyle属性设置为None,即WindowStyle="None" .如果是非矩形的异形窗体,则

WPF 无边框窗体

第一步:去掉那些最大化最小化和关闭 代码如下: WindowStyle="None" 第二步:去掉那边框 代码如下: AllowsTransparency="True" 第三步:拖动窗体 方法:给窗体设置MouseLeftButtonDown事件 代码如下: (1)前台代码: MouseLeftButtonDown="Border_MouseLeftButtonDown_1" (2)后台代码: private void Border_MouseL

Qt无边框窗体-最大化时支持拖拽还原

目录 一.概述 二.效果展示 三.demo制作 1.设计窗体 2.双击放大 四.拖拽 五.相关文章 原文链接:Markdown模板 一.概述 用Qt进行开发界面时,既想要实现友好的用户交互又想界面漂亮,那么自定义界面就必不可少.其中有一个操作就是是我们每一个Qter开发者都要会的,而且是经常进行的. Qt::FramelessWindowHint这个属性想必大家都使用过,有些同学可能对这个属性很了解,也用的是炉火纯青,今天我们也来说说这个属性. 关于这个无边框属性网上也有一些文章,有些谈论的是b

PYQT设计无边框窗体

#UI.py,通过UI设计师制作后直接转换为UI.py脚本 # -*- coding: utf-8 -*-from PyQt4 import QtCore, QtGui try:    _fromUtf8 = QtCore.QString.fromUtf8except AttributeError:    _fromUtf8 = lambda s: s class Ui_Form(object):    def setupUi(self, Form):        Form.setObject

无边框窗体 timer控件

一.无边框窗体1.控制按钮如何制作 MouseEnter-鼠标移入的时候发生的事件 pictureBox1.BackgroundImage = Image.FromFile(Application.StartupPath + "\\..\\..\\images\\btn_close_highlight.png"); MouseLeave-鼠标移出的时候发生的事件 pictureBox1.BackgroundImage = Image.FromFile(Application.Start

无边框窗体和用户控件以及权限

无边框窗体: 就是吧窗体的边框去掉,然后自己做按钮设置功能. 无边框窗体的移动: 将下面代码直接复制粘贴,将窗体的鼠标按下事件的方法改成下面方法的名字就可以直接使用 1 //窗体移动API 2 [DllImport("user32.dll")] 3 public static extern bool ReleaseCapture(); 4 [DllImport("user32.dll")] 5 public static extern bool SendMessag