天天看點

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),

   "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(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);

   }

  }      

 }

}

繼續閱讀