问题标签 [setwindowpos]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
0 回答
1303 浏览

c++ - SetWindowPos 不移动或调整窗口大小

当我调用 SWP 尝试移动调整特定窗口的大小时。它不会移动或调整大小。

窗口句柄有效。我尝试使用FindWindow和手动将句柄值设置为要调整大小的窗口来获取句柄。

当我使用GetWindowPlacement时,它说窗口是SW_NORMAL而不是 SW_MAXIMIZE。

窗口样式是

扩展样式为 0x0。

我也尝试在调用之前将窗口设置为SW_NORMALwith 。ShowWindowSetWindowPos

SetWindowPos并且MoveWindow都返回非错误值,表示它们没有失败。

为什么 SetWindowPos 和 MoveWindow 无法移动或调整此窗口的大小?

0 投票
1 回答
677 浏览

winapi - WinAPI CreateWindow WS_POPUP 调整大小闪烁

我正在创建一个没有边框的窗口(CreateWindow 中的 WS_POPUP),并且需要在鼠标悬停时调整它的大小,并在鼠标离开应用程序时更改回来。它工作正常,但是当我使用 SetWindowPos 更改位置时它会闪烁。我需要将 y 减少 30 像素并增加高度,所以窗口的底部保持在相同的位置。

下面是代码:

我尝试了 SetWindowPos、MoveWindow 等的所有组合,但是当鼠标悬停在窗口上时,似乎窗口首先设置了 Y 位置,然后它在几毫秒后增加了高度,这是可见的。

有谁知道这个的解决方案?

0 投票
2 回答
216 浏览

winapi - 将位图图像绘制到窗口中的正确方法

我有一个函数,它获取位图图像的矩形区域,将其重新缩放为不同的尺寸,并在我的对话框应用程序的窗口内的某个偏移处绘制它:

我使用CWnd m_cImageWindow成员变量创建和维护窗口。

我从对话框的OnPaint处理程序执行绘图,如下所示:

我有两个问题:

  1. 每当我更改绘图参数时,我都会看到闪烁。根据我在这里和那里阅读的内容,解决此问题的标准方法是使用临时 DC 进行双缓冲。但据我了解,这正是我已经在做的事情。

  2. 如果某些目标区域位于窗口之外,则会将其绘制在对话框内的其他控件上。我可以通过调用这些控件中的每一个来部分解决这个MoveWindow问题SetWindowPos。但我仍然可以看到他们身后闪烁的图像。我尝试过SetWindowPos以各种不同的方式调用,但徒劳地希望它会规定控件的严格 Z 顺序。

谢谢你。

0 投票
2 回答
1240 浏览

c - GLFW 鼠标事件延迟与窗口拖动

我试图在 GLFW 中拖动一个未装饰的窗口,但遇到了一些事件延迟,即使我正在使用glfwWaitEvents()

我有一个光标位置回调和一个简单的循环:

我的光标回调对增量进行了一些简单的跟踪并更新了窗口位置。

这是我直线拖动时的增量

它应该增加,然后xpos每隔一段时间就会倒退(陈旧的事件?)

也许我的窗口移动没有与光标同步?

结果是当我拖动窗口时,它剧烈摇晃,我几乎无法将它移动到任何地方......


更新:我也尝试将glfwSetWindowPos逻辑移到主循环中,但没有成功——我仍然感到同样的颤抖和口吃。


更新:当我注释掉窗口时(当然)glfwSetWindowPos()不再移动,但事件流现在是一致的。

这让我认为窗口的移动,当快速完成时会导致抽搐运动(即向前 2 步,向后 1 步)。

0 投票
1 回答
199 浏览

c# - c# 以编程方式移动 Citrix 窗口

使用下一个答案,我试图以编程方式重新定位 citrix 窗口,但窗口不会移动。

我假设保存 Citrix 窗口的进程名称是Process.GetProcesses()我启动 Citrix 后添加的下一个进程之一:Receiver、wfica32、pnamain、concentr、wfcrun32。

任何帮助为什么窗口不移动?

0 投票
1 回答
65 浏览

c# - 在不同的屏幕上启动程序

我已经签出:

SetWindowPos 不适用于 Form.Show()

启动应用程序并将其发送到第二台显示器?

但是,这些解决方案似乎都不适合我。我想在不同的显示器上打开一个外部程序。

这是我当前的代码:

0 投票
1 回答
217 浏览

uwp - 尽管提供了所有参数,但 SetWindowPos 没有做任何事情

我已经导入了 SetWindowPos 和 GetForegroundWindow:

我尝试使用它们,虽然 GetForegroundWindow 确实返回了一个有效值,但 SetWindowPos 没有做任何事情:

我需要设置一些功能吗?还是我忘记了许可?

插入到 .NET 项目中的相同代码块似乎产生了想要的结果。有没有办法在 UWP 中实现这一点,还是我必须在 .NET 中做到这一点?

0 投票
0 回答
205 浏览

c++ - 具有不同缩放监视器的 SetWindowPos 将位置设置为错误的位置

我有 2 台具有不同分辨率和缩放比例的显示器:

  1. 2560 * 1440 缩放 x1(主要)

  2. 1920 * 1200 缩放 x1.5(从主 [2][1] 向左对齐到顶部)

我的应用程序正在更改另一个应用程序窗口的位置。我尝试设置位置的窗口尺寸为 300x200。我将窗口位置设置为 (-150|200) 并在下一行检查位置:

我有以下输出:

定位后,窗口的缩放比例为 1(从主窗口),而位于辅助窗口,应该缩放 1.5

它错位了窗口x = [-150 ... 0]

当窗口部分在辅助监视器上并且窗口的中间点已经在主监视器上时,看起来会发生这种情况。

我能做些什么来避免这种行为吗?

0 投票
0 回答
70 浏览

c# - 将笔记本电脑连接到多台显示器时出现显示器编号问题

我开发了一个应用程序,我可以将程序分配给特定的监视器,这样当我停靠我的笔记本电脑时,我的所有打开的窗口都会被推送到我的主监视器上,我可以按下全局热键Alt+d以及所有已被分配给监视器被推送到他们分配的监视器。我还有 3 个其他热键Alt+ 1Alt+2Alt+ 3,它们将焦点窗口移动到相应的监视器。我注意到当我回到我的办公桌并在我的笔记本电脑处于睡眠状态时对接它然后重新登录到 Windows 时,代码中返回的监视器工作区域与显示设置中显示的内容不匹配。

这是 Windows 显示的监视器布局。红色是我的代码显示的内容。

监控分配

如果我取消停靠然后停靠所有匹配项。

这是我将当前聚焦的窗口移动到特定监视器的代码。
Alt+1发送 0,Alt+2发送 1,Alt+3发送 2:

更新
我做了更多的调试,并Screen.AllScreens根据我的计算机在对接时的状态返回不同的数组:

看一下这个。

任何想法为什么会发生这种情况?

0 投票
1 回答
273 浏览

c# - 即使主线程被阻塞也设置窗口位置?

我试图让我的程序通过每 10 毫秒调用一次 SetWindowPos 来移动自己,以跟随光标。问题是,当我的程序的主线程被 Thread.Sleep() 阻塞时,窗口停止移动。

我将对 SetWindowPos 的调用放入辅助 System.Thread,但它仍然被阻止。看来 SetWindowPos 总是由拥有该窗口的线程处理。因此,如果我的主线程很忙,即使请求是从不同的线程发送的,也无法移动窗口。

即使拥有窗口的线程很忙,是否还有其他方法可以移动窗口?谢谢!