快捷搜索:  as  2018  FtCWSyGV  С˵  test  xxx  Ψһ  w3viyKQx

葡京娱乐场的官网:WPF自定义窗口最大化时同时显示任务栏



当我们要自定义WPF窗口样式时,平日是采纳设计窗口的属性 WindowStyle="None" ,然后为窗口自定义放大年夜,缩小,关闭按钮的样式。

然而这样的话,当经由过程代码设置窗口(代码如下)放大年夜时,窗口会把义务栏给遮档住。

private void Max_Click(object sender, RoutedEventArgs e)

{if (this.WindowState != WindowState.Maximized)

{this.WindowState = WindowState.Maximized;

}

else{

this.WindowState = WindowState.Normal;

}}

这样的问题想必也同样包围着你。下面可以经由过程采纳win32编程的要领把义务栏显示出来。Idea源于收集上的资料,假如你在其他地方找到类似的,那祝贺你!

首先你的窗口代码文件引用两个命名空间:

using WinInterop = System.Windows.Interop;

using System.Runtime.InteropServices;

然后在窗口构造函数加入

this.SourceInitialized += new EventHandler(win_SourceInitialized);

win_SourceInitialized 函数及相关代码如下:

#region 最大年夜化显示义务栏

void win_SourceInitialized(object sender, EventArgs e)

{System.IntPtr handle = (new WinInterop.WindowInteropHelper(this)).Handle;

WinInterop.HwndSource.FromHwnd(handle).AddHook(new WinInterop.HwndSourceHook(WindowProc));}

private static System.IntPtr WindowProc(

System.IntPtr hwnd,int msg,

System.IntPtr wParam,System.IntPtr lParam,

ref bool handled){

switch (msg){

case 0x0024:WmGetMinMaxInfo(hwnd, lParam);

handled = true;break;

}

return (System.IntPtr)0;}

private static void WmGetMinMaxInfo(System.IntPtr hwnd, System.IntPtr lParam)

{

MINMAXINFO mmi = (MINMAXINFO)Marshal.PtrToStructure(lParam, typeof(MINMAXINFO));

// Adjust the maximized size and position to fit the work area of the correct monitorint MONITOR_DEFAULTTONEAREST = 0x00000002;

System.IntPtr monitor = MonitorFromWindow(hwnd, MONITOR_DEFAULTTONEAREST);

if (monitor != System.IntPtr.Zero){

MONITORINFO monitorInfo = new MONITORINFO();

GetMonitorInfo(monitor, monitorInfo);RECT rcWorkArea = monitorInfo.rcWork;

RECT rcMonitorArea = monitorInfo.rcMonitor;mmi.ptMaxPosition.x = Math.Abs(rcWorkArea.left - rcMonitorArea.left);

mmi.ptMaxPosition.y = Math.Abs(rcWorkArea.top - rcMonitorArea.top);mmi.ptMaxSize.x = Math.Abs(rcWorkArea.right - rcWorkArea.left);

mmi.ptMaxSize.y = Math.Abs(rcWorkArea.bottom - rcWorkArea.top);}

Marshal.StructureToPtr(mmi, lParam, true);

}

///

/// POINT aka POINTAPI///

[StructLayout(LayoutKind.Sequential)]public struct POINT

{///

/// x coordinate of point.///

public int x;///

/// y coordinate of point.///

public int y;

////// Construct a point of coordinates (x,y).

///public POINT(int x, int y)

{this.x = x;

this.y = y;}

}

[StructLayout(LayoutKind.Sequential)]public struct MINMAXINFO

{public POINT ptReserved;

public POINT ptMaxSize;public POINT ptMaxPosition;

public POINT ptMinTrackSize;public POINT ptMaxTrackSize;

};

//////

[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Auto)]public class MONITORINFO

{///

///public int cbSize = Marshal.SizeOf(typeof(MONITORINFO));

///

///public RECT rcMonitor = new RECT();

///

///public RECT rcWork = new RECT();

///

///public int dwFlags = 0;

}

///Win32

[StructLayout(LayoutKind.Sequential, Pack = 0)]public struct RECT

{///Win32

public int left;///Win32

publi葡京娱乐场的官网c int top;///Win32

public int right;///Win32

public int bottom;

///Win32public static readonly RECT Empty = new RECT();

///Win32

public int Width{

get { return Math.Abs(right - left); }// Abs needed for BIDI OS}

///Win32public int Height

{get { return bottom - top; }

}

///Win32public RECT(int left, int top, int ri葡京娱乐场的官网ght, int bottom)

{this.left = left;

this.top = top;this.right = right;

this.bottom = bottom;}

///Win32public RECT(RECT rcSrc)

{this.left = rcSrc.left;

this.top = rcSrc.top;this.right = rcSrc.right;

this.bottom = rcSrc.bottom;}

///Win32

public bool IsEmpty{

get{

// BUGBUG : On Bidi OS (hebrew arabic) left > rightreturn left >= right || top >= bottom;

}}

///Return a user friendly representation of this structpublic override string ToString()

{if (this == RECT.Empty) { return "RECT {Empty}"; }

return "RECT { left : " + left + " / top : " + top + " / 葡京娱乐场的官网right : " + right + " / bottom : " + bottom + " }";}

///Determine if 2 RECT are equal (deep compare)

public override bool Equals(object obj){

if (!(obj is Rect)) { return false; }return (this == (RECT)obj);

}

/// Return the HashCode for this struct (not garanteed to be unique)public override int GetHashCode()

{return left.GetHashCode() + top.GetHashCode() + right.GetHashCode() + bottom.GetHashCode();

}

///Determine if 2 RECT are equal (deep compare)

public static bool operator ==(RECT rect1, RECT rect2){

return (rect1.left == rect2.left && rect1.top == rect2.top && rect1.right == rect2.right && rect1.bottom == r葡京娱乐场的官网ect2.bottom);}

///Determine if 2 RECT are different(deep compare)

public static bool operator !=(RECT rect1, RECT rect2){

return !(rect1 == rect2);}

}

[DllImport("us葡京娱乐场的官网er32")]internal static extern bool GetMonitorInfo(IntPtr hMonitor, MONITORINFO lpmi);

///

//////

[DllImport("User32")]internal static extern IntPtr MonitorFromWindow(IntPtr handle, int flags);

#endregion

着末F5,你会看到你所期望效果。

您可能还会对下面的文章感兴趣: