D3D实现双屏显示功能

主要是要注意设置第一屏和第二个屏幕的坐标。

 

void CMainFrame::OnD3dBegin()
{

 int nMonitorCount = CMonitors::GetMonitorCount();

 CMonitor monitor;
 CMonitors monitors;
 CString name,str;
 CRect rect,rt;
 
 if(1 == nMonitorCount) 
 {
  
  CRect rectPrimary;
  CMonitor monitor = CMonitors::GetPrimaryMonitor();
  monitor.GetWorkAreaRect(&rectPrimary);
  /* m_wndD3D.CreateEx(
  0, AfxRegisterWndClass(0,NULL,NULL,NULL),
  "Direct3D窗口", WS_POPUP | WS_CAPTION | WS_VISIBLE,
  CRect(rectPrimary.left,rectPrimary.top,rectPrimary.right,rectPrimary.bottom), this, 0);*/
  
  m_wndD3D.CreateEx(
   0, AfxRegisterWndClass(0,NULL,NULL,NULL),
   "Direct3DOne窗口", WS_POPUP | WS_CAPTION | WS_VISIBLE | WS_SYSMENU ,
   CRect(rectPrimary.left,rectPrimary.top,rectPrimary.right,rectPrimary.bottom), this, 0);
    
  char szFilen[64];
  sprintf( szFilen, "image/yuv_0030.yuv" );
  m_wndD3D.Play(szFilen);
  
 }
 else if(2 == nMonitorCount)
 {
  //  CRect DesktopRect;
  //     CMonitors::GetVirtualDesktopRect( &DesktopRect );
  for ( int i = 0; i < monitors.GetCount(); i++ )
  {
   monitor = monitors.GetMonitor( i );
   monitor.GetWorkAreaRect(&rect);
   monitor.GetMonitorRect(&rt);
   monitor.GetName(name);
   str.Format("显示器名称(%d):%s/n%d,%d,%d,%d=WorkArea/n%d,%d,%d,%d=MonitorRect",
    i,name,
    rect.left,rect.top,rect.right,rect.bottom,
    rt.left,rt.top,rt.right,rt.bottom);
   //::AfxMessageBox(str);
   
/*     //判断是不是主显示器
   if(monitor.IsPrimaryMonitor())
   {
    m_wndD3D.CreateEx(
     0, AfxRegisterWndClass(0,NULL,NULL,NULL),
     "Direct3DOne窗口", WS_POPUP | WS_CAPTION | WS_VISIBLE,
     CRect(rect.left,rect.top,rect.right,rect.bottom), this, 0);
   }
   else
   {
    m_wndD3DDouble.CreateEx(
     0, AfxRegisterWndClass(0,NULL,NULL,NULL),
     "Direct3DTwo窗口", WS_POPUP | WS_CAPTION | WS_VISIBLE,
     CRect(rect.left,rect.top,rect.right,rect.bottom), this, 0);
    
   }*/


   if(0 == i)
   {
    m_wndD3D.CreateEx(
     0, AfxRegisterWndClass(0,NULL,NULL,NULL),
     "Direct3DOne窗口", WS_POPUP | WS_CAPTION | WS_VISIBLE | WS_SYSMENU ,
     CRect(rect.left,rect.top,rect.right,rect.bottom), this, 0);
    
    char szFilen[64];
    sprintf( szFilen, "image/yuv_0030.yuv" );
    m_wndD3D.Play(szFilen);
   }
   
   if(1 == i)
   {
    m_wndD3DDouble.CreateEx(
     0, AfxRegisterWndClass(0,NULL,NULL,NULL),
     "Direct3DTwo窗口", WS_POPUP | WS_CAPTION | WS_VISIBLE | WS_SYSMENU ,
     CRect(rect.left,rect.top,rect.right,rect.bottom), this, 0);
    char szFilen[64];
    sprintf( szFilen, "image/test.yuv" );
    m_wndD3DDouble.Play(szFilen);
    
   }
   
   
  }      
 }

}

你可能感兴趣的:(D3D实现双屏显示功能)