当前位置: 移动技术网 > IT编程>开发语言>c# > WPF设置窗体可以使用鼠标拖动大小的方法

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

2019年07月18日  | 移动技术网IT编程  | 我要评论

本文实例讲述了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程序设计有所帮助。

如对本文有疑问, 点击进行留言回复!!

相关文章:

验证码:
移动技术网