在同一个程序里,传统方式是通过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; } } }
下一篇,介绍一个程序窗体如何通过句柄控制另一个程序窗体