【WindowsAPI之MoveWindow】 C#调整目标窗体的位置、大小

简介: 首先查看一下WindowsAPI给我们的解释  函数功能:该函数改变指定窗口的位置和尺寸。对于顶层窗口,位置和尺寸是相对于屏幕的左上角的:对于子窗口,位置和尺寸是相对于父窗口客户区的左上角坐标的。 函数原型:bool MoveWindow(HWND hWnd,int x,int y,int nWidth,int nHeight,bool BRePaint);   参数: hWnd:窗口句柄。

首先查看一下WindowsAPI给我们的解释

 函数功能:该函数改变指定窗口的位置和尺寸。对于顶层窗口,位置和尺寸是相对于屏幕的左上角的:对于子窗口,位置和尺寸是相对于父窗口客户区的左上角坐标的。

函数原型:bool MoveWindow(HWND hWnd,int x,int y,int nWidth,int nHeight,bool BRePaint);

 

参数:

hWnd:窗口句柄。

x:指定窗口的新位置的左边界。

Y:指定窗口的新位置的顶部边界。

nWidth:指定窗口的新的宽度。

nHaight:指定窗口的新的高度。


所在位置:user32.dll

 

需要命名空间 

 

using System;
using System.Windows.Forms;
using System.Runtime.InteropServices;

 

 

首先是获取目标窗体的句柄(什么是句柄?我不知道,但是百度知道 ^_^)

 

        ///   <summary>
        
///  获取窗体句柄
        
///   </summary>
        
///   <param name="lpClassName"></param>
        
///   <param name="lpWindowName"></param>
        
///   <returns></returns>
        [DllImport( " User32.dll ", EntryPoint =  " FindWindow ")]
         public  extern  static IntPtr FindWindow( string lpClassName,  string lpWindowName);

 

 

然后就是我们的主角登场啦(MoveWindow)

        ///   <summary>
        
///  设置目标窗体大小,位置
        
///   </summary>
        
///   <param name="hWnd"> 目标句柄 </param>
        
///   <param name="x"> 目标窗体新位置X轴坐标 </param>
        
///   <param name="y"> 目标窗体新位置Y轴坐标 </param>
        
///   <param name="nWidth"> 目标窗体新宽度 </param>
        
///   <param name="nHeight"> 目标窗体新高度 </param>
        
///   <param name="BRePaint"> 是否刷新窗体 </param>
        
///   <returns></returns>
        [DllImport( " user32.dll ", CharSet = CharSet.Auto)]
         public  static  extern  int MoveWindow(IntPtr hWnd,  int x,  int y,  int nWidth,  int nHeight,  bool BRePaint);

 

这里说一下,API里面第一个参数写的类型是HWND ,到C#里面就要用IntPtr 类表示,指针呢,据说是用委托实现(我也刚接触,没试过)

 

有了这两段代码,就已经完成一半了

设计窗体是这个样子滴。。


在按钮的Click事件里添加如下代码

            IntPtr intptr = FindWindow( null" 新编WIN32API大全 ");

             int x =  this.GetInt(txtP_x.Text.Trim(),  0);
             int y =  this.GetInt(txtP_y.Text.Trim(),  0);
             int nWidth =  this.GetInt(txtNWidth.Text.Trim(),  0);
             int nHeight =  this.GetInt(txtNHeight.Text.Trim(),  0);

             // 调用API
            MoveWindow(intptr, x, y, nWidth, nHeight,  true);


GetInt方法是简单处理一下非数字的字符串


         ///   <summary>
        
///  将字string转成int类型
        
///   </summary>
        
///   <param name="value"> 要转换的字符串 </param>
        
///   <param name="_default"> 默认值 </param>
        
///   <returns></returns>
         public  int GetInt( string value,  int _default)
        {
             if ( int.TryParse(value,  out _default))
                 return Convert.ToInt32(value);
             else
                 return _default;
        }

 

大功告成!! 运行一下试试吧。哦对了,忘了说了,改一下句柄名称再试哦~  可以改成QQ2012之类的,我试过了,可以的。哈哈

 

 

目录
相关文章
|
1月前
|
Java 数据库 C#
C#winforms实现windows窗体人脸识别
C#winforms实现windows窗体人脸识别
31 0
|
6月前
|
关系型数据库 MySQL C#
C# winform 一个窗体需要调用自定义用户控件的控件名称
给用户控件ucQRCode增加属性: //二维码图片 private PictureBox _pictureBoxFSHLQrCode; public PictureBox PictureBoxFSHLQrCode {   get { return _pictureBoxFSHLQrCode; }   set { this.pictureBoxFSHLQrCode = value; } } 在Form1窗体直接调用即可: ucQRCode uQRCode=new ucQRCode(); ucQRCode.PictureBoxFSHLQrCode.属性= 要复制或传给用户控件上的控件的值
37 0
|
4月前
|
JavaScript Linux C#
【傻瓜级JS-DLL-WINCC-PLC交互】1.C#用windows窗体控件创建.net控件
【傻瓜级JS-DLL-WINCC-PLC交互】1.C#用windows窗体控件创建.net控件
65 0
|
4月前
|
C# Windows
C#安装“Windows 窗体应用(.NET Framework)”
C#安装“Windows 窗体应用(.NET Framework)”
51 0
|
4月前
|
C# 数据安全/隐私保护
C# 窗体之间参数互相传递的两种方法与使用
C# 窗体之间参数互相传递的两种方法与使用
|
10月前
|
C# 数据安全/隐私保护
ApeForms | C# WinForm窗体控件平滑减速运动
在桌面软件开发中,有时会需要控制窗体或控件移动以实现某些界面效果,比如幻灯片换页、侧面的展开栏等。 通常情况下我们会使用Timer以每隔一段时间修改一下坐标位置的方式来实现目标对象的位移效果,但通过这个方式实现的动效存在几个问题: 匀速运动效果生硬; 运动过程中不便灵活改变运动状态(如侧栏展开一半时令其收起); 动效多时需要创建多个Timer对象,不易管理且占用资源; ApeForms中为控件和窗体提供了平滑运动的扩展方法,很好的解决了这些问题。不仅是坐标的平滑运动,还有控件\窗体尺寸的平滑变化、透明度的平滑变化。允许在变化的中途随时更改目标坐标\尺寸\透明度,且使用共享的Timer
11252 1
ApeForms | C# WinForm窗体控件平滑减速运动
|
C# Windows 容器
C#面向对象程序设计课程实验二: 实验名称:Windows 窗体程序
C#面向对象程序设计课程实验二: 实验名称:Windows 窗体程序
C#面向对象程序设计课程实验二: 实验名称:Windows 窗体程序
|
C#
C#中获得窗体的句柄
C#中获得窗体的句柄
223 0
C#编程学习19:mdi窗体中子窗体不能重复打开的三种实现方式
C#编程学习19:mdi窗体中子窗体不能重复打开的三种实现方式
C#编程学习19:mdi窗体中子窗体不能重复打开的三种实现方式
|
数据库 C#
C#编程学习18:使用多文档窗体框架利用DataGridView对Access数据表进行增删改及导出excel操作
C#编程学习18:使用多文档窗体框架利用DataGridView对Access数据表进行增删改及导出excel操作
C#编程学习18:使用多文档窗体框架利用DataGridView对Access数据表进行增删改及导出excel操作