Комментарии 23
А причем тут OpenGL? Обычное WinAPI.
Да это так, вступление было.
А если не Windows?
Если Xlib, то я делал так:
Компилить:
#include <stdio.h>
#include <X11/Xlib.h>
#include <X11/extensions/Xinerama.h>
int main()
{
Display* display = XOpenDisplay(NULL);
if (!display) {
fprintf(stderr, "XOpenDisplay() fails\n");
return 1;
}
int xineramaScreenCount;
if (XineramaIsActive(display)) {
XineramaScreenInfo* xineramaScreenInfo =
XineramaQueryScreens(display, &xineramaScreenCount);
printf("Screen count: %d\n", xineramaScreenCount);
for (int i = 0; i < xineramaScreenCount; i++) {
printf("Screen #%d: (%d, %d) x (%d, %d)\n",
i, xineramaScreenInfo[i].x_org, xineramaScreenInfo[i].y_org,
xineramaScreenInfo[i].width, xineramaScreenInfo[i].height);
}
XFree(xineramaScreenInfo);
} else {
xineramaScreenCount = XScreenCount(display);
printf("Screen count: %d\n", xineramaScreenCount);
for (int i = 0; i < xineramaScreenCount; i++) {
Screen* screen = ScreenOfDisplay(display, i);
printf("Screen #%d: (0, 0) x (%d, %d)\n",
i, screen->width, screen->height);
}
}
return 0;
}
Компилить:
gcc -o x x.c -std=c99 -lX11 -lXinerama
if ((dc.StateFlags & DISPLAY_DEVICE_ACTIVE) && !(dc.StateFlags & DISPLAY_DEVICE_MIRRORING_DRIVER))
будет более корректно.
Хм, в своё время написал подобную реализацию за 10 минут включая прочтение MSDN.
Что здесь сложного?
Вот если бы хотя бы кроссплатформенно — то да, было б интересно.
Что здесь сложного?
Вот если бы хотя бы кроссплатформенно — то да, было б интересно.
Не кроссплатформенно… Почему не используете готовые движки?
Для OGRE примерно так выходит.
Для OGRE примерно так выходит.
int minitoCount = root->getDisplayMonitorCount();
StringVector videoModes = renderSystem->getConfigOptions()["Video Mode"].possibleValues;
Было бы интереснее ещё узнать, как определить физическое соотношение сторон монитора, т.к. разрешение не всегда ему соответствует. А то сейчас приходится выковыривать эти данные из EDID монитора в реестре, что не очень-то здорово.
На Qt это пару строк.
я хочу простой и понятной фичи:
move2screen
чтож мне костылями то…
move2screen
чтож мне костылями то…
мои 5 копеек
for I := 0 to Screen.MonitorCount - 1 do
ShowMessage(IntToStr(Screen.Monitors[I].MonitorNum));
Зарегистрируйтесь на Хабре, чтобы оставить комментарий
Как определить все мониторы и их разрешения