Windows 当一个窗口移动到另一个监视器时是否有通知?
我有一个窗口,在V-Sync关闭的情况下由Windows 当一个窗口移动到另一个监视器时是否有通知?,windows,winapi,window,Windows,Winapi,Window,我有一个窗口,在V-Sync关闭的情况下由IDXGISwapChain1刷新。如果可能,我想手动控制窗口的当前速率,使其尽可能接近当前监视器刷新速率 在两个刷新率不同的监视器连接到PC的情况下,我希望在窗口从一个监视器移动到另一个监视器时收到通知,以便相应地更改当前帧速率 据我所知,WM\u DISPLAYCHANGE和WM\u DPICHANGED可能不包括这种情况。如果我错了,请纠正我 更新: 这是我的代码基于Street的答案 LRESULT OnPositionChanged(UINT
IDXGISwapChain1
刷新。如果可能,我想手动控制窗口的当前速率,使其尽可能接近当前监视器刷新速率
在两个刷新率不同的监视器连接到PC的情况下,我希望在窗口从一个监视器移动到另一个监视器时收到通知,以便相应地更改当前帧速率
据我所知,WM\u DISPLAYCHANGE
和WM\u DPICHANGED
可能不包括这种情况。如果我错了,请纠正我
更新:
这是我的代码基于Street的答案
LRESULT OnPositionChanged(UINT nMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled)
{
// Get the monitor handle for the window.
HMONITOR currentMonitor = MonitorFromWindow(m_hWnd, MONITOR_DEFAULTTONEAREST);
// error handling
// no need to bother if the window stays on the same monitor
if (_currentMonitor != currentMonitor)
{
// Get more information about the monitor
MONITORINFOEX monitorInfo;
monitorInfo.cbSize = sizeof(MONITORINFOEX);
BOOL succeed = GetMonitorInfo(currentMonitor, (LPMONITORINFO)&monitorInfo);
// error handling
// Get the current display settings for that monitor, which includes the refresh rate
DEVMODE devMode;
devMode.dmSize = sizeof(DEVMODE);
succeed = EnumDisplaySettings(monitorInfo.szDevice, ENUM_CURRENT_SETTINGS, &devMode);
// error handling
// use devMode.dmDisplayFrequency to update my present frame rate
// ...
_currentMonitor = currentMonitor;
}
return 0L;
}
LRESULT OnDisplayChanged(UINT nMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled)
{
// WM_DISPLAYCHANGE message is sent to all windows when the display resolution has changed
// When a WM_DISPLAYCHANGE message is sent, any monitor may be removed from the desktop and thus its HMONITOR becomes invalid or has its settings changed.
_currentMonitor = NULL;
return 0L;
}
我想在窗口更改其位置后更改帧速率,因此我切换到
WM\u WINDOWPOSCHANGED
在窗口位置更改后,您可以检查消息
发送到窗口,其大小、位置或在Z顺序中的位置为
由于调用SetWindowPos函数或
另一个窗口管理功能
然后通过调用函数获取当前监视器的刷新赫兹。如果刷新频率更改,请更改应用程序的刷新频率
dmDisplayFrequency:指定频率,单位为赫兹(每个周期)
第二),在特定模式下显示设备的。此值为
也称为显示设备的垂直刷新率。展示
驱动程序使用此成员。例如,它用于
更改显示设置功能。打印机驱动程序不使用此选项
成员
注意:您可以设置一个变量来保存上一显示的刷新频率,然后将该变量与当前显示的频率进行比较。如果不同,则表示Hz发生了变化
如果需要确定窗口打开的监视器,可以使用该功能
下面是一个代码示例: