欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

WPF设置窗体可以使用鼠标拖动大小的方法

程序员文章站 2023-12-15 08:56:40
本文实例讲述了wpf设置窗体可以使用鼠标拖动大小的方法。分享给大家供大家参考。具体实现方法如下: 复制代码 代码如下:private void window_loaded...

本文实例讲述了wpf设置窗体可以使用鼠标拖动大小的方法。分享给大家供大家参考。具体实现方法如下:

复制代码 代码如下:
private void window_loaded(object sender, routedeventargs e)
{
    // 获取窗体句柄
    intptr hwnd = new system.windows.interop.windowinterophelper(this).handle;

    // 获得窗体的 样式
    int oldstyle = nativemethods.getwindowlong(hwnd, nativemethods.gwl_style);

    // 更改窗体的样式为无边框窗体
    nativemethods.setwindowlong(hwnd, nativemethods.gwl_style, oldstyle & ~nativemethods.ws_caption);

    // setwindowlong(hwnd, gwl_exstyle, oldstyle & ~ws_ex_layered);
    // 1 | 2 << 8 | 3 << 16  r=1,g=2,b=3 详见winuse.h文件
    // 设置窗体为透明窗体
    nativemethods.setlayeredwindowattributes(hwnd, 1 | 2 << 8 | 3 << 16, 0, nativemethods.lwa_alpha);

    // 创建圆角窗体  12 这个值可以根据自身项目进行设置
    nativemethods.setwindowrgn(hwnd, nativemethods.createroundrectrgn(0, 0, convert.toint32(this.actualwidth), convert.toint32(this.actualheight), 12, 12), true);
}

nativemethods.cs的代码:

复制代码 代码如下:
using system;
using system.collections.generic;
using system.linq;
using system.text;
 
namespace sesoft
{
    public class nativemethods
    {
        /// <summary>
        /// 带有外边框和标题的windows的样式
        /// </summary>
        public const int ws_caption = 0x00c0000;
 
        /// <summary>
        /// window 扩展样式 分层显示
        /// </summary>
        public const int ws_ex_layered = 0x00080000;
 
        /// <summary>
        /// 带有alpha的样式
        /// </summary>
        public const int lwa_alpha = 0x00000002;
 
        /// <summary>
        /// 颜色设置
        /// </summary>
        public const int lwa_colorkey = 0x00000001;
 
        /// <summary>
        /// window的基本样式
        /// </summary>
        public const int gwl_style = -16;
 
        /// <summary>
        /// window的扩展样式
        /// </summary>
        public const int gwl_exstyle = -20;
 
        /// <summary>
        /// 设置窗体的样式
        /// </summary>
        /// <param name="handle">操作窗体的句柄</param>
        /// <param name="oldstyle">进行设置窗体的样式类型.</param>
        /// <param name="newstyle">新样式</param>
        [system.runtime.interopservices.dllimport("user32.dll")]
        public static extern void setwindowlong(intptr handle, int oldstyle, int newstyle);
 
        /// <summary>
        /// 获取窗体指定的样式.
        /// </summary>
        /// <param name="handle">操作窗体的句柄</param>
        /// <param name="style">要进行返回的样式</param>
        /// <returns>当前window的样式</returns>
        [system.runtime.interopservices.dllimport("user32.dll")]
        public static extern int getwindowlong(intptr handle, int style);
 
        /// <summary>
        /// 设置窗体的工作区域.
        /// </summary>
        /// <param name="handle">操作窗体的句柄.</param>
        /// <param name="handleregion">操作窗体区域的句柄.</param>
        /// <param name="regraw">if set to <c>true</c> [regraw].</param>
        /// <returns>返回值</returns>
        [system.runtime.interopservices.dllimport("user32.dll")]
        public static extern int setwindowrgn(intptr handle, intptr handleregion, bool regraw);
 
        /// <summary>
        /// 创建带有圆角的区域.
        /// </summary>
        /// <param name="x1">左上角坐标的x值.</param>
        /// <param name="y1">左上角坐标的y值.</param>
        /// <param name="x2">右下角坐标的x值.</param>
        /// <param name="y2">右下角坐标的y值.</param>
        /// <param name="width">圆角椭圆的width.</param>
        /// <param name="height">圆角椭圆的height.</param>
        /// <returns>hrgn的句柄</returns>
        [system.runtime.interopservices.dllimport("gdi32.dll")]
        public static extern intptr createroundrectrgn(int x1, int y1, int x2, int y2, int width, int height);
 
        /// <summary>
        /// sets the layered window attributes.
        /// </summary>
        /// <param name="handle">要进行操作的窗口句柄</param>
        /// <param name="colorkey">rgb的值</param>
        /// <param name="alpha">alpha的值,透明度</param>
        /// <param name="flags">附带参数</param>
        /// <returns>true or false</returns>
        [system.runtime.interopservices.dllimport("user32.dll")]
        public static extern bool setlayeredwindowattributes(intptr handle, uint colorkey, byte alpha, int flags);
    }
}

希望本文所述对大家的wpf程序设计有所帮助。

上一篇:

下一篇: