首页 > 其他分享 >WPF中自定义按钮实现最大化最小化动画过度效果

WPF中自定义按钮实现最大化最小化动画过度效果

时间:2024-03-27 10:24:34浏览次数:28  
标签:dwNewLong IntPtr 自定义 int WS 最小化 WPF nIndex public

需要使用WindowsAPI

[DllImport("user32.dll", EntryPoint = "SetWindowLong")]
private static extern int SetWindowLong32(HandleRef hWnd, int nIndex, int dwNewLong);

[DllImport("user32.dll", EntryPoint = "SetWindowLongPtr")]
private static extern IntPtr SetWindowLongPtr64(HandleRef hWnd, int nIndex, IntPtr dwNewLong);

public IntPtr myHWND;
public const int GWL_STYLE = -16;

public static class WS
{
    public static readonly long
    WS_BORDER = 0x00800000L,
    WS_CAPTION = 0x00C00000L,
    WS_CHILD = 0x40000000L,
    WS_CHILDWINDOW = 0x40000000L,
    WS_CLIPCHILDREN = 0x02000000L,
    WS_CLIPSIBLINGS = 0x04000000L,
    WS_DISABLED = 0x08000000L,
    WS_DLGFRAME = 0x00400000L,
    WS_GROUP = 0x00020000L,
    WS_HSCROLL = 0x00100000L,
    WS_ICONIC = 0x20000000L,
    WS_MAXIMIZE = 0x01000000L,
    WS_MAXIMIZEBOX = 0x00010000L,
    WS_MINIMIZE = 0x20000000L,
    WS_MINIMIZEBOX = 0x00020000L,
    WS_OVERLAPPED = 0x00000000L,
    WS_OVERLAPPEDWINDOW = WS_OVERLAPPED | WS_CAPTION | WS_SYSMENU | WS_THICKFRAME | WS_MINIMIZEBOX | WS_MAXIMIZEBOX,
    WS_POPUP = 0x80000000L,
    WS_POPUPWINDOW = WS_POPUP | WS_BORDER | WS_SYSMENU,
    WS_SIZEBOX = 0x00040000L,
    WS_SYSMENU = 0x00080000L,
    WS_TABSTOP = 0x00010000L,
    WS_THICKFRAME = 0x00040000L,
    WS_TILED = 0x00000000L,
    WS_TILEDWINDOW = WS_OVERLAPPED | WS_CAPTION | WS_SYSMENU | WS_THICKFRAME | WS_MINIMIZEBOX | WS_MAXIMIZEBOX,
    WS_VISIBLE = 0x10000000L,
    WS_VSCROLL = 0x00200000L;
}

public IntPtr SetWindowLongPtr(HandleRef hWnd, int nIndex, IntPtr dwNewLong)
{
    if (IntPtr.Size == 8)
    {
        return SetWindowLongPtr64(hWnd, nIndex, dwNewLong);
    }
    else
    {
        return new IntPtr(SetWindowLong32(hWnd, nIndex, dwNewLong.ToInt32()));
    }
}

 

窗口Load事件中执行

myHWND = new WindowInteropHelper(this).Handle;
IntPtr myStyle = new IntPtr(WS.WS_CAPTION | WS.WS_CLIPCHILDREN | WS.WS_MINIMIZEBOX | WS.WS_MAXIMIZEBOX | WS.WS_SYSMENU | WS.WS_SIZEBOX);
SetWindowLongPtr(new HandleRef(null, myHWND), GWL_STYLE, myStyle);

正常调用最大化等方法就可以

this.WindowState = WindowState.Maximized;
//SystemCommands.MaximizeWindow(this);

 

标签:dwNewLong,IntPtr,自定义,int,WS,最小化,WPF,nIndex,public
From: https://www.cnblogs.com/tian2008/p/18098333

相关文章

  • C语言自定义类型结构体详解
    C语言中,有内置类型,也就是C语言本身支持的现成的类型,例如int,char,double,float等,当然,仅有内置类型是不够的,例如,我们想表示一个变量人,但是现有的类型不支持我们表示,因此,我们引入了自定义类型,自定义类型分为://结构体struct//枚举-enum //联合体-union现在,我们介绍......
  • [引]ArkTS 自定义组件
    创建自定义组件-自定义组件-基本语法-学习ArkTS语言-入门-HarmonyOS应用开发HarmonyOSDeveloper > 文档 > 指南 > 入门创建自定义组件 更新时间:2024-01-1511:55分享添加收藏在ArkUI中,UI显示的内容均为组件,由框架直接提供的称为系统组件,由开......
  • WPF —— Menu数据绑定实例
    {Binding}因为我们操作这个集合对象,而不是集中某个对象,所以直接写{Binding}就行      如果绑定是list集合的某个对象属性时候,需要{bindingvpath=属性名}<Menux:Name="m1"ItemsSource="{Binding}"></Menu>树形数据模板:分层数据模板,主要是用于MenuIt......
  • duilib 自定义扩展列表
    目录前言一、扩展列表项1、基本数据结构列表项Item1)、ListContainerElement定义......
  • 关于WPF进度条的使用
    本文讲述如何在软件启动和窗体按钮操作时弹出进度条。运行环境:Win10、VS2022一、新建WPF项目。 二、新建WPF窗体。1、新建窗体,取名DefProcessBar.xaml。 2、设置窗体属性、样式。<Windowx:Class="WpfApp4.DefProcessBar"xmlns="http://schemas.microsoft.c......
  • js 非常好用且优雅的步骤校验、提交校验、自定义校验写法
    很多form表单和其它场景,在提交前或进入下一步前需要校验逻辑,这里总结了一个通用方法: constform={name:'',age:20,time:['2100-01-01','2100-01-01']}constvalidForm=()=>{//校验状态总结let......
  • Kafka Connect 自定义Sink Connector实现在数据同步时增加时间戳字段和假删除功能
    1.情景展示以debezium为例,结合kafka很容易就能实现两个数据库表与表之间的数据同步问题。但是,现在甲方有这样的需求:其一,在源表数据同步至目标表时,目标表增加一个时间戳字段(就是我们通常意义上讲的last_update_time),无论是insert还是update操作,都在此字段插入系统当前时间。用......
  • WPF C# create canvas and draw ellipse in canvas
    usingSystem;usingSystem.Collections.Generic;usingSystem.Linq;usingSystem.Text;usingSystem.Threading.Tasks;usingSystem.Windows;usingSystem.Windows.Controls;usingSystem.Windows.Data;usingSystem.Windows.Documents;usingSystem.Windows.Input;......
  • 界面控件DevExpress WinForms/WPF v23.2 - 电子表格支持表单控件
    DevExpressWinForm拥有180+组件和UI库,能为WindowsForms平台创建具有影响力的业务解决方案。DevExpressWinForm能完美构建流畅、美观且易于使用的应用程序,无论是Office风格的界面,还是分析处理大批量的业务数据,它都能轻松胜任!表单控件表示交互元素(按钮、复选框和下拉列表),并在......
  • C语言:自定义数据类型——结构体
    文章目录结构体类型的声明结构体的声明结构体变量的创建和初始化结构的特殊声明结构体的自引用结构体内存对齐对齐规则修改默认对齐数结构体传参结构体类型的声明结构体的声明structtag{ member-list;//成员}variable-list;//变量名例如描述一个学生str......