Получить индекс монитора из его ручки (HMONITOR) - PullRequest
0 голосов
/ 23 января 2019

Я заинтересован в получении индекса монитора (на основе 1, чтобы соответствовать нумерации Windows) с учетом дескриптора монитора.

Случай использования: с учетом прямоугольника окна я хочу знать, к какому монитору он принадлежит,Я могу получить дескриптор монитора, используя MonitorFromRect:

// RECT rect
const HMONITOR hMonitor = MonitorFromRect(rect, MONITOR_DEFAULTTONEAREST);

Как я могу получить индекс монитора из этой ручки?

PS: не уверен, еслидубликат, но я безуспешно оглядывался.

1 Ответ

0 голосов
/ 23 января 2019

Я нашел это сообщение с противоположным вопросом: найти дескриптор с учетом индекса (в данном случае это основано на 0).

На основании этого я работал над этим решением:

struct sEnumInfo {
  int iIndex = 0;
  HMONITOR hMonitor = NULL;
};

BOOL CALLBACK GetMonitorByHandle(HMONITOR hMonitor, HDC hdcMonitor, LPRECT lprcMonitor, LPARAM dwData)
{
  auto info = (sEnumInfo*)dwData;
  if (info->hMonitor == hMonitor) return FALSE;
  ++info->iIndex;
  return TRUE;
}

int GetMonitorIndex(HMONITOR hMonitor)
{
  sEnumInfo info;
  info.hMonitor = hMonitor;

  if (EnumDisplayMonitors(NULL, NULL, GetMonitorByHandle, (LPARAM)&info)) return -1;
  return info.iIndex + 1; // 1-based index
}
...