SetWindowPos - 改变窗口的位置与状态

11 篇文章 1 订阅
//声明:
SetWindowPos(
  hWnd: HWND;            {窗口句柄}
  hWndInsertAfter: HWND; {窗口的 Z 顺序}
  X, Y: Integer;         {位置}
  cx, cy: Integer;       {大小}
  uFlags: UINT           {选项}
): BOOL;

//hWndInsertAfter 参数可选值:
HWND_TOP       = 0;        {在前面}
HWND_BOTTOM    = 1;        {在后面}
HWND_TOPMOST   = HWND(-1); {在前面, 位于任何顶部窗口的前面}
HWND_NOTOPMOST = HWND(-2); {在前面, 位于其他顶部窗口的后面}

//uFlags 参数可选值:
SWP_NOSIZE         = 1;    {忽略 cx、cy, 保持大小}
SWP_NOMOVE         = 2;    {忽略 X、Y, 不改变位置}
SWP_NOZORDER       = 4;    {忽略 hWndInsertAfter, 保持 Z 顺序}
SWP_NOREDRAW       = 8;    {不重绘}
SWP_NOACTIVATE     = $10;  {不激活}
SWP_FRAMECHANGED   = $20;  {强制发送 WM_NCCALCSIZE 消息, 一般只是在改变大小时才发送此消息}
SWP_SHOWWINDOW     = $40;  {显示窗口}
SWP_HIDEWINDOW     = $80;  {隐藏窗口}
SWP_NOCOPYBITS     = $100; {丢弃客户区}
SWP_NOOWNERZORDER  = $200; {忽略 hWndInsertAfter, 不改变 Z 序列的所有者}
SWP_NOSENDCHANGING = $400; {不发出 WM_WINDOWPOSCHANGING 消息}
SWP_DRAWFRAME      = SWP_FRAMECHANGED; {画边框}
SWP_NOREPOSITION   = SWP_NOOWNERZORDER;{}
SWP_DEFERERASE     = $2000;            {防止产生 WM_SYNCPAINT 消息}
SWP_ASYNCWINDOWPOS = $4000;            {若调用进程不拥有窗口, 系统会向拥有窗口的线程发出需求}


//举例:
procedure TForm1.Button1Click(Sender: TObject);
begin
  SetWindowPos(Handle, HWND_TOPMOST, 0,0, 100,200, SWP_SHOWWINDOW);
end;

 

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 在编程中,我们可以使用一些特定的代码来实现untiypc端窗口化全屏并可编辑分辨率和窗口位置的功能。 首先,我们需要通过untiypc的API来实现窗口化全屏的功能。我们可以使用以下代码段将窗口设置为全屏模式: ```csharp Screen.fullScreenMode = FullScreenMode.FullScreenWindow; ``` 接下来,我们可以使用下面的代码来编辑窗口位置: ```csharp Screen.SetResolution(width, height, fullscreenMode); ``` 其中,`width`和`height`是我们希望设置的窗口分辨率的宽度和高度。`fullscreenMode`是一个表示窗口模式的参数,可以是`FullScreenMode.Windowed`、`FullScreenMode.FullScreenWindow`或`FullScreenMode.ExclusiveFullScreen`。 通过使用这些代码,我们可以在untiypc端实现窗口化全屏并编辑分辨率和窗口位置的功能。 ### 回答2: 可以使用以下代码来实现Untiy3D PC端窗口化全屏,并允许编辑分辨率和窗口位置的功能: ```csharp using UnityEngine; public class WindowController : MonoBehaviour { // 定义变量 public int screenWidth = 1920; public int screenHeight = 1080; public int windowPosX = 0; public int windowPosY = 0; void Start() { // 设置窗口分辨率 Screen.SetResolution(screenWidth, screenHeight, false); // 设置窗口位置 SetWindowPosition(windowPosX, windowPosY); } // 设置窗口位置 private void SetWindowPosition(int posX, int posY) { // 获取Unity主窗口的句柄 System.IntPtr hwnd = GetForegroundWindow(); // 设置窗口位置 SetWindowPos(hwnd, 0, posX, posY, screenWidth, screenHeight, 0); } // 导入Win32 API函数 [System.Runtime.InteropServices.DllImport("user32.dll")] private static extern System.IntPtr GetForegroundWindow(); [System.Runtime.InteropServices.DllImport("user32.dll")] private static extern bool SetWindowPos(System.IntPtr hwnd, int hWndInsertAfter, int x, int y, int cx, int cy, int uFlags); } ``` 你可以根据需要,修改`screenWidth`和`screenHeight`的值来定义窗口的分辨率,修改`windowPosX`和`windowPosY`的值来定义窗口位置。在`Start()`函数中,会根据这些参数来设置Unity窗口的分辨率和位置。 请注意,这段代码使用了Win32 API函数`GetForegroundWindow()`和`SetWindowPos()`来获取和设置窗口信息,所以你需要导入`user32.dll`来使用这些函数。 希望这个代码可以帮助到你! ### 回答3: 在Unity中,可以通过编写代码实现将PC端窗口化全屏、编辑分辨率和设置窗口位置的功能。 要将PC端的窗口化全屏,需要使用Screen类来设置。可以使用Screen类的SetResolution方法来设置窗口的分辨率。通过将目标分辨率传递给该方法,可以将窗口调整为指定的分辨率。例如,可以使用`Screen.SetResolution(width, height, fullscreen)`来将窗口设置为指定宽度、高度的全屏状态。 要编辑分辨率,可以在代码中传递不同的参数给SetResolution方法,以实现不同的分辨率设置。例如,可以通过监听输入事件或根据游戏逻辑的需要,在特定的情况下调用SetResolution来改变窗口的分辨率。 要设置窗口位置,可以使用Screen类的fullScreen属性来控制窗口的全屏状态。如果将其设置为false,窗口将处于非全屏状态,可以通过屏幕坐标来设置窗口位置。可以使用Screen类的width和height属性来获取屏幕的宽度和高度,然后使用窗口的Rect结构体来设置窗口位置,例如`windowRect = new Rect(0, 0, width, height)`,然后使用GUI.Window函数将窗口绘制在指定的位置上。 总的来说,通过使用Screen类的SetResolution方法和fullScreen属性,可以编写代码来实现PC端窗口化全屏、编辑分辨率和设置窗口位置的功能。以上只是一个简单的示例,具体实现还需根据具体需求进行调整。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值