Pour créer son interface DirectDraw associé à son moniteur principal, on fait
LPDIRECTDRAW m_pDDObject;
HRESULT hr = DirectDrawCreate(NULL, &m_pDDObject, NULL) ;
On peut ensuite y appliquer son SetCooperativeLevel puis SetDisplayMode et encore CreateSurface sans problème
D'après la doc, en toute généralité, pour ouvrir son interface sur un device quelconque, on fait
LPDIRECTDRAW m_pDDObject;
GUID guid;
GUID FAR* lpGUID = &guid;
hr = ConvertStringtoCLSID( cszguid, lpGUID);
hr = DirectDrawCreate(lpGUID, &m_pDDObject, NULL) ;
où le cszguid est le GUID sous forme texte de son display, obtenu par exemple par
int iNbMonitors = GetSystemMetrics(SM_CMONITORS);
et si on a deux moniteurs
DISPLAY_DEVICE m_displayDevice[2];
BOOL bOK0 = EnumDisplayDevices(NULL, 0, m_displayDevice[0], EDD_GET_DEVICE_INTERFACE_NAME);
BOOL bOK1 = EnumDisplayDevices(NULL, 0, &m_displayDevice[1], EDD_GET_DEVICE_INTERFACE_NAME);
MON PROBLEME :
Bien que le guid obtenu semble parfaitement légal (tant pour le moniteur '0' par défaut que pour le secondary '1') l'appel
hr = DirectDrawCreate(lpGUID, &m_pDDObject, NULL) ;
me rend toujours un code d'erreur "farfelu" non documenté !
Quelqu'un a-t-il une idée ? J'a été incapable de trouver sur le WEB un exemple ou le GUID du device n'est pas NULL (1.er paramètre du DirectDrawCreate)
(XP SP2, NVidia 1700, 2 moniteurs 1600x1200), DirectX9 + Windows SDK version juin 2008)
Partager