예제 #1
0
void 
vncDesktop::Checkmonitors()
{
  nr_monitors=GetNrMonitors();
  DEVMODE devMode;

  if (nr_monitors>0)
  {
	if(OSversion()==1 || OSversion()==2 || OSversion()==4 )GetPrimaryDevice();
	devMode.dmSize = sizeof(DEVMODE);
	if(OSversion()==1 || OSversion()==2 || OSversion()==4 ) EnumDisplaySettings(mymonitor[0].device, ENUM_CURRENT_SETTINGS, &devMode);
	else EnumDisplaySettings(NULL, ENUM_CURRENT_SETTINGS, &devMode);
	mymonitor[0].offsetx=devMode.dmPosition.x;
	mymonitor[0].offsety=devMode.dmPosition.y;
	mymonitor[0].Width=devMode.dmPelsWidth;
	mymonitor[0].Height=devMode.dmPelsHeight;
	mymonitor[0].Depth=devMode.dmBitsPerPel;
  }
  if (nr_monitors>1)
  {
	GetSecondaryDevice();
	devMode.dmSize = sizeof(DEVMODE);
	EnumDisplaySettings(mymonitor[1].device, ENUM_CURRENT_SETTINGS, &devMode);
	mymonitor[1].offsetx=devMode.dmPosition.x;
	mymonitor[1].offsety=devMode.dmPosition.y;
	mymonitor[1].Width=devMode.dmPelsWidth;
	mymonitor[1].Height=devMode.dmPelsHeight;
	mymonitor[1].Depth=devMode.dmBitsPerPel;
  }

  // JnZn558
  if (nr_monitors>2)
  {
	GetThirdDevice();
	devMode.dmSize = sizeof(DEVMODE);
	EnumDisplaySettings(mymonitor[2].device, ENUM_CURRENT_SETTINGS, &devMode);
	mymonitor[2].offsetx=devMode.dmPosition.x;
	mymonitor[2].offsety=devMode.dmPosition.y;
	mymonitor[2].Width=devMode.dmPelsWidth;
	mymonitor[2].Height=devMode.dmPelsHeight;
	mymonitor[2].Depth=devMode.dmBitsPerPel;
  }
  //
	/* JnZn558
    mymonitor[2].offsetx=GetSystemMetrics(SM_XVIRTUALSCREEN);
    mymonitor[2].offsety=GetSystemMetrics(SM_YVIRTUALSCREEN);
    mymonitor[2].Width=GetSystemMetrics(SM_CXVIRTUALSCREEN);
    mymonitor[2].Height=GetSystemMetrics(SM_CYVIRTUALSCREEN);
	mymonitor[2].Depth=mymonitor[0].Depth;//depth primary monitor is used
	*/
	mymonitor[3].offsetx=GetSystemMetrics(SM_XVIRTUALSCREEN);
    mymonitor[3].offsety=GetSystemMetrics(SM_YVIRTUALSCREEN);
    mymonitor[3].Width=GetSystemMetrics(SM_CXVIRTUALSCREEN);
    mymonitor[3].Height=GetSystemMetrics(SM_CYVIRTUALSCREEN);
	mymonitor[3].Depth=mymonitor[0].Depth;//depth primary monitor is used

}
예제 #2
0
파일: Camera.cpp 프로젝트: brunoweig/mmx
bool Camera::changeDisplayResolution(int width, int height) {
#ifdef _WIN32
	DISPLAY_DEVICE dd = GetPrimaryDevice();
	DEVMODE dm;
	dm.dmSize = sizeof(DEVMODE);

	if ( !EnumDisplaySettings(dd.DeviceName, ENUM_CURRENT_SETTINGS, &dm) ) {
//		printf("EnumDisplaySettings failed:%d\n", GetLastError());
		return false;
	}

	dm.dmPelsWidth = width;
	dm.dmPelsHeight = height;
	dm.dmFields = DM_PELSWIDTH | DM_PELSHEIGHT;

	if ( fullScreen ) {
//		POINT p;

//		p.x = 0;
//		p.y = 0;

//		dm.dmPosition = p;

//		dm.dmDisplayFixedOutput = DM_DISPLAYFIXEDOUTPUT;
//		SDL_putenv("SDL_VIDEO_WINDOW_POS=0,0");
	}


	if ( ChangeDisplaySettings(&dm, CDS_TEST) != DISP_CHANGE_SUCCESSFUL ) {
//		printf("\nIllegal graphics mode: %d\n", GetLastError());
		return false;
	}

	geometry.setWidth(width);
	geometry.setHeight(height);

	return (ChangeDisplaySettings(&dm, 0) == DISP_CHANGE_SUCCESSFUL);
#endif

	return true;
}