Direct Draw 7 auf Win 8
-
Hallo,
Ich habe ein Problem bei der Portierung einer alten Direct Draw Anwendung von Win XP Embedded auf Win 8 Embedded 32Bit.Auf Win XP lief alles einwandfrei.
Jetzt kann ich die Auflösung nicht mehr Ändern und kein Fenster im Vollbildmodus mehr erstellen.
Fenstermodus klappt.
Die Methode GetAttachedSurface schlägt fehl mit dem Error DDERR_NOTFOUND. (Z.124)
Der Code sieht wie folgt aus:
DdError DirectDraw::CreateFullScreenDisplay (void) { DdError error = NO_DDERRORS; if (msObjectCounter == 0) SetWindowPos (mHwnd, NULL, 0, 0, 10, 10, SWP_NOZORDER); DisplayEnumInfo enum_info; ZeroMemory (&enum_info, sizeof (enum_info)); enum_info.mDisplayCounter = -2; enum_info.mDisplayNr = mDisplayNr; DirectDrawEnumerateEx (DDEnumCallbackEx, &enum_info, DDENUM_ATTACHEDSECONDARYDEVICES); GUID *p_guid; GUID guid_null; ZeroMemory (&guid_null, sizeof (GUID)); if (enum_info.mDdGUID == guid_null) { if (mDisplayNr < 0) p_guid = NULL; else error = ER_DD_INVALIDDISPLAYNR; } else p_guid = &enum_info.mDdGUID; if (!error) { if (SUCCEEDED (DirectDrawCreateEx (p_guid, (VOID**) &mpDd, IID_IDirectDraw7, NULL))) { if (!mRefreshRate || !mHeight || !mWidth || !mBpp) { DDSURFACEDESC2 ddsd; ddsd.dwSize = sizeof (ddsd); if (SUCCEEDED (mpDd->GetDisplayMode (&ddsd))) { if (!mRefreshRate && (ddsd.dwFlags & DDSD_REFRESHRATE)) mRefreshRate = ddsd.dwRefreshRate; if ((!mHeight || !mWidth) && ((ddsd.dwFlags & DDSD_HEIGHT) && (ddsd.dwFlags & DDSD_WIDTH))) { mHeight = ddsd.dwHeight; mWidth = ddsd.dwWidth; } if (!mBpp && (ddsd.dwFlags & DDSD_PIXELFORMAT)) mBpp = ddsd.ddpfPixelFormat.dwRGBBitCount; } } if (msObjectCounter == 0) { DWORD style; RECT rect; style = GetWindowStyle (mHwnd); style &= ~WS_OVERLAPPEDWINDOW; style |= WS_POPUP; SetWindowLong (mHwnd, GWL_STYLE, style); style = GetWindowStyle (mHwnd); SetRect (&rect, 0, 0, mWidth, mHeight); AdjustWindowRectEx (&rect, style, GetMenu (mHwnd) != NULL, GetWindowExStyle (mHwnd)); SetWindowPos (mHwnd, NULL, 0, 0, rect.right - rect.left, rect.bottom - rect.top, SWP_NOZORDER); SetWindowPos (mHwnd, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOSIZE | SWP_NOMOVE); } // Set cooperative level DWORD level_flags = DDSCL_EXCLUSIVE | DDSCL_FULLSCREEN; if (enum_info.mDisplayNr >= 0) { if (msObjectCounter == 0) { if (FAILED (mpDd->SetCooperativeLevel (mHwnd, DDSCL_SETFOCUSWINDOW))) error = ER_DD_SETCLEVELFAILED; } else level_flags |= DDSCL_SETFOCUSWINDOW | DDSCL_CREATEDEVICEWINDOW; } if (!error) { if (SUCCEEDED (mpDd->SetCooperativeLevel (mHwnd, level_flags))) { // Set the display mode if (SUCCEEDED (mpDd->SetDisplayMode (mWidth, mHeight, mBpp, mRefreshRate, 0))) { // Create primary surface (with backbuffer attached) DDSURFACEDESC2 ddsd; ZeroMemory (&ddsd, sizeof (ddsd)); ddsd.dwSize = sizeof (ddsd); ddsd.dwFlags = DDSD_CAPS | DDSD_BACKBUFFERCOUNT; ddsd.ddsCaps.dwCaps = DDSCAPS_PRIMARYSURFACE | DDSCAPS_FLIP | DDSCAPS_COMPLEX | DDSCAPS_3DDEVICE; if (!mDoubleBackBufferFlag) ddsd.dwBackBufferCount = 1; else ddsd.dwBackBufferCount = 2; if (SUCCEEDED (mpDd->CreateSurface (&ddsd, &mpDdsFrontBuffer, NULL))) { // Get a pointer to the back buffer DDSCAPS2 ddscaps; ZeroMemory (&ddscaps, sizeof (ddscaps)); ddscaps.dwCaps = DDSCAPS_BACKBUFFER; if (SUCCEEDED (mpDdsFrontBuffer->GetAttachedSurface (&ddscaps, &mpDdsBackBuffer))) { if (!mBackClipperFlag || !(error = SetClipperToSurface (mpDdsBackBuffer, false))) { DirectDraw::UpdateBounds (true); if (!CreateDirect3d()) error = ER_DD_CREATED3DFAILED; } } else error = ER_DD_NOBACKBUFFER; } else error = ER_DD_CREATESURFACEFAILED; } else error = ER_DD_SETDISPLAYMODEFAILED; } else error = ER_DD_SETCLEVELFAILED; } } else error = ER_DD_DDCREATEFAILED; } return (error); }
Kann mir irgendjemand helfen?
Gibt es Kompatibilitätsprobleme von Direct Draw mit win 8?
Ich habe das Programm schon als Admin gestartet und auch im Kompatibilitätsmodus für WinXP
-
claine schrieb:
Gibt es Kompatibilitätsprobleme von Direct Draw mit win 8?
wenn du danach kurz gegooglet haettest, wuestest du, dass directdraw auf win8 nicht supported wird. wenn da etwas funzt ist es pures glueck.
-
Ich hab viel gesucht aber nichts gefunden, das sagt, dass es nicht geht.