WPF设置窗体可以使用鼠标拖动大小的方法
本文实例讲述了wpf设置窗体可以使用鼠标拖动大小的方法。分享给大家供大家参考。具体实现方法如下:
{
// 获取窗体句柄
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.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程序设计有所帮助。
推荐阅读