在同一個程序里,傳統方式是通過this來設置當前窗體的最大化、最小化等操作,
那么怎樣通過窗體句柄來設置窗體的最大化、最小化呢?
1、界面布局
通過this設置窗體最大化: name:btnWindowThis
通過handle設置窗體最大化:name:btnWindowHandle
2、設置窗體最大化
1)this方式
直接設置當前窗體的狀態為最大化就可以了,
/// <summary> /// 通過this設置方法 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void btnWindowThis_Click(object sender, EventArgs e) { //通過this.WindowState設置窗體最大化 this.WindowState = FormWindowState.Maximized; }
2)handle方式
首先獲取當前窗體的句柄,通過句柄控制窗體最大化
/// <summary> /// 通過句柄設置方法 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void btnWindowHander_Click(object sender, EventArgs e) { // 獲取查找窗體句柄(通過窗體標題名) IntPtr mainHandle = FindWindow(null, "演示窗體"); if (mainHandle != IntPtr.Zero) { //通過句柄設置當前窗體最大化(0:隱藏窗體,1:默認窗體,2:最小化窗體,3:最大化窗體,....) bool result = ShowWindowAsync(mainHandle, 3); } }
Ps: 獲取窗體句柄,也可以用C++的Spy++工具查看(獲取到的句柄是16進制,而FindWindow()是獲取10進制)
3、完整源碼
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Runtime.InteropServices; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; namespace WindowsForms { public partial class Form2 : Form { public Form2() { InitializeComponent(); } /// <summary> /// 獲取窗體的句柄函數 /// </summary> /// <param name="lpClassName">窗口類名</param> /// <param name="lpWindowName">窗口標題名</param> /// <returns>返回句柄</returns> [DllImport("user32.dll", EntryPoint = "FindWindow", SetLastError = true)] public static extern IntPtr FindWindow(string lpClassName, string lpWindowName); /// <summary> /// 通過句柄,窗體顯示函數 /// </summary> /// <param name="hWnd">窗體句柄</param> /// <param name="cmdShow">顯示方式</param> /// <returns>返工成功與否</returns> [DllImport("user32.dll", EntryPoint = "ShowWindowAsync", SetLastError = true)] public static extern bool ShowWindowAsync(IntPtr hWnd, int cmdShow); /// <summary> /// 通過句柄設置方法 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void btnWindowHander_Click(object sender, EventArgs e) { // 獲取查找窗體句柄(通過窗體標題名) IntPtr mainHandle = FindWindow(null, "演示窗體"); if (mainHandle != IntPtr.Zero) { //通過句柄設置當前窗體最大化(0:隱藏窗體,1:默認窗體,2:最小化窗體,3:最大化窗體,....) bool result = ShowWindowAsync(mainHandle, 3); } } /// <summary> /// 通過this設置方法 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void btnWindowThis_Click(object sender, EventArgs e) { //通過this.WindowState設置窗體最大化 this.WindowState = FormWindowState.Maximized; } } }
下一篇,介紹一個程序窗體如何通過句柄控制另一個程序窗體
