00001
00002
00003
00004
00005
00006 #include <streams.h>
00007 #include "ddmm.h"
00008
00009 TCHAR *WINAPI StringFromResource(TCHAR *pBuffer, int iResourceID)
00010 {
00011 if (LoadString(g_hInst,iResourceID,pBuffer,STR_MAX_LENGTH) == 0) {
00012 return TEXT("");
00013 }
00014 return pBuffer;
00015 }
00016
00017 #ifdef UNICODE
00018 char *WINAPI StringFromResource(char *pBuffer, int iResourceID)
00019 {
00020 if (LoadStringA(g_hInst,iResourceID,pBuffer,STR_MAX_LENGTH) == 0) {
00021 return "";
00022 }
00023 return pBuffer;
00024 }
00025 #endif
00026
00027 #ifndef UNICODE
00028
00029 WCHAR * WINAPI WideStringFromResource(WCHAR *pBuffer, int iResourceID)
00030 {
00031 *pBuffer = 0;
00032
00033 if (g_amPlatform == VER_PLATFORM_WIN32_NT) {
00034 LoadStringW(g_hInst,iResourceID,pBuffer,STR_MAX_LENGTH);
00035 } else {
00036
00037 CHAR szBuffer[STR_MAX_LENGTH];
00038 DWORD dwStringLength = LoadString(g_hInst,iResourceID,szBuffer,STR_MAX_LENGTH);
00039
00040
00041 if (dwStringLength++) {
00042 MultiByteToWideChar(CP_ACP,0,szBuffer,dwStringLength,pBuffer,STR_MAX_LENGTH);
00043 }
00044 }
00045 return pBuffer;
00046 }
00047
00048 #endif
00049
00050 BOOL WINAPI GetDialogSize(int iResourceID,
00051 DLGPROC pDlgProc,
00052 LPARAM lParam,
00053 SIZE *pResult)
00054 {
00055 RECT rc;
00056 HWND hwnd;
00057
00058
00059
00060 hwnd = CreateDialogParam(g_hInst,
00061 MAKEINTRESOURCE(iResourceID),
00062 GetDesktopWindow(),
00063 pDlgProc,
00064 lParam);
00065 if (hwnd == NULL) {
00066 return FALSE;
00067 }
00068
00069 GetWindowRect(hwnd, &rc);
00070 pResult->cx = rc.right - rc.left;
00071 pResult->cy = rc.bottom - rc.top;
00072
00073 DestroyWindow(hwnd);
00074 return TRUE;
00075 }
00076
00077 STDMETHODIMP CAggDirectDraw::NonDelegatingQueryInterface(REFIID riid, void **ppv)
00078 {
00079 ASSERT(m_pDirectDraw);
00080
00081
00082
00083 if (riid == IID_IDirectDraw) {
00084 return GetInterface((IDirectDraw *)this,ppv);
00085 } else {
00086 return CUnknown::NonDelegatingQueryInterface(riid,ppv);
00087 }
00088 }
00089
00090 STDMETHODIMP CAggDirectDraw::Compact()
00091 {
00092 ASSERT(m_pDirectDraw);
00093 return m_pDirectDraw->Compact();
00094 }
00095
00096 STDMETHODIMP CAggDirectDraw::CreateClipper(DWORD dwFlags,LPDIRECTDRAWCLIPPER *lplpDDClipper,IUnknown *pUnkOuter)
00097 {
00098 ASSERT(m_pDirectDraw);
00099 return m_pDirectDraw->CreateClipper(dwFlags,lplpDDClipper,pUnkOuter);
00100 }
00101
00102 STDMETHODIMP CAggDirectDraw::CreatePalette(DWORD dwFlags,LPPALETTEENTRY lpColorTable,LPDIRECTDRAWPALETTE *lplpDDPalette,IUnknown *pUnkOuter)
00103 {
00104 ASSERT(m_pDirectDraw);
00105 return m_pDirectDraw->CreatePalette(dwFlags,lpColorTable,lplpDDPalette,pUnkOuter);
00106 }
00107
00108 STDMETHODIMP CAggDirectDraw::CreateSurface(LPDDSURFACEDESC lpDDSurfaceDesc,LPDIRECTDRAWSURFACE *lplpDDSurface,IUnknown *pUnkOuter)
00109 {
00110 ASSERT(m_pDirectDraw);
00111 return m_pDirectDraw->CreateSurface(lpDDSurfaceDesc,lplpDDSurface,pUnkOuter);
00112 }
00113
00114 STDMETHODIMP CAggDirectDraw::DuplicateSurface(LPDIRECTDRAWSURFACE lpDDSurface,LPDIRECTDRAWSURFACE *lplpDupDDSurface)
00115 {
00116 ASSERT(m_pDirectDraw);
00117 return m_pDirectDraw->DuplicateSurface(lpDDSurface,lplpDupDDSurface);
00118 }
00119
00120 STDMETHODIMP CAggDirectDraw::EnumDisplayModes(DWORD dwSurfaceDescCount,LPDDSURFACEDESC lplpDDSurfaceDescList,LPVOID lpContext,LPDDENUMMODESCALLBACK lpEnumCallback)
00121 {
00122 ASSERT(m_pDirectDraw);
00123 return m_pDirectDraw->EnumDisplayModes(dwSurfaceDescCount,lplpDDSurfaceDescList,lpContext,lpEnumCallback);
00124 }
00125
00126 STDMETHODIMP CAggDirectDraw::EnumSurfaces(DWORD dwFlags,LPDDSURFACEDESC lpDDSD,LPVOID lpContext,LPDDENUMSURFACESCALLBACK lpEnumCallback)
00127 {
00128 ASSERT(m_pDirectDraw);
00129 return m_pDirectDraw->EnumSurfaces(dwFlags,lpDDSD,lpContext,lpEnumCallback);
00130 }
00131
00132 STDMETHODIMP CAggDirectDraw::FlipToGDISurface()
00133 {
00134 ASSERT(m_pDirectDraw);
00135 return m_pDirectDraw->FlipToGDISurface();
00136 }
00137
00138 STDMETHODIMP CAggDirectDraw::GetCaps(LPDDCAPS lpDDDriverCaps,LPDDCAPS lpDDHELCaps)
00139 {
00140 ASSERT(m_pDirectDraw);
00141 return m_pDirectDraw->GetCaps(lpDDDriverCaps,lpDDHELCaps);
00142 }
00143
00144 STDMETHODIMP CAggDirectDraw::GetDisplayMode(LPDDSURFACEDESC lpDDSurfaceDesc)
00145 {
00146 ASSERT(m_pDirectDraw);
00147 return m_pDirectDraw->GetDisplayMode(lpDDSurfaceDesc);
00148 }
00149
00150 STDMETHODIMP CAggDirectDraw::GetFourCCCodes(LPDWORD lpNumCodes,LPDWORD lpCodes)
00151 {
00152 ASSERT(m_pDirectDraw);
00153 return m_pDirectDraw->GetFourCCCodes(lpNumCodes,lpCodes);
00154 }
00155
00156 STDMETHODIMP CAggDirectDraw::GetGDISurface(LPDIRECTDRAWSURFACE *lplpGDIDDSurface)
00157 {
00158 ASSERT(m_pDirectDraw);
00159 return m_pDirectDraw->GetGDISurface(lplpGDIDDSurface);
00160 }
00161
00162 STDMETHODIMP CAggDirectDraw::GetMonitorFrequency(LPDWORD lpdwFrequency)
00163 {
00164 ASSERT(m_pDirectDraw);
00165 return m_pDirectDraw->GetMonitorFrequency(lpdwFrequency);
00166 }
00167
00168 STDMETHODIMP CAggDirectDraw::GetScanLine(LPDWORD lpdwScanLine)
00169 {
00170 ASSERT(m_pDirectDraw);
00171 return m_pDirectDraw->GetScanLine(lpdwScanLine);
00172 }
00173
00174 STDMETHODIMP CAggDirectDraw::GetVerticalBlankStatus(LPBOOL lpblsInVB)
00175 {
00176 ASSERT(m_pDirectDraw);
00177 return m_pDirectDraw->GetVerticalBlankStatus(lpblsInVB);
00178 }
00179
00180 STDMETHODIMP CAggDirectDraw::Initialize(GUID *lpGUID)
00181 {
00182 ASSERT(m_pDirectDraw);
00183 return m_pDirectDraw->Initialize(lpGUID);
00184 }
00185
00186 STDMETHODIMP CAggDirectDraw::RestoreDisplayMode()
00187 {
00188 ASSERT(m_pDirectDraw);
00189 return m_pDirectDraw->RestoreDisplayMode();
00190 }
00191
00192 STDMETHODIMP CAggDirectDraw::SetCooperativeLevel(HWND hWnd,DWORD dwFlags)
00193 {
00194 ASSERT(m_pDirectDraw);
00195 return m_pDirectDraw->SetCooperativeLevel(hWnd,dwFlags);
00196 }
00197
00198 STDMETHODIMP CAggDirectDraw::SetDisplayMode(DWORD dwWidth,DWORD dwHeight,DWORD dwBpp)
00199 {
00200 ASSERT(m_pDirectDraw);
00201 return m_pDirectDraw->SetDisplayMode(dwWidth,dwHeight,dwBpp);
00202 }
00203
00204 STDMETHODIMP CAggDirectDraw::WaitForVerticalBlank(DWORD dwFlags,HANDLE hEvent)
00205 {
00206 ASSERT(m_pDirectDraw);
00207 return m_pDirectDraw->WaitForVerticalBlank(dwFlags,hEvent);
00208 }
00209
00210 STDMETHODIMP CAggDrawSurface::NonDelegatingQueryInterface(REFIID riid, void **ppv)
00211 {
00212 ASSERT(m_pDirectDrawSurface);
00213
00214
00215
00216 if (riid == IID_IDirectDrawSurface) {
00217 return GetInterface((IDirectDrawSurface *)this,ppv);
00218 } else {
00219 return CUnknown::NonDelegatingQueryInterface(riid,ppv);
00220 }
00221 }
00222
00223 STDMETHODIMP CAggDrawSurface::AddAttachedSurface(LPDIRECTDRAWSURFACE lpDDSAttachedSurface)
00224 {
00225 ASSERT(m_pDirectDrawSurface);
00226 return m_pDirectDrawSurface->AddAttachedSurface(lpDDSAttachedSurface);
00227 }
00228
00229 STDMETHODIMP CAggDrawSurface::AddOverlayDirtyRect(LPRECT lpRect)
00230 {
00231 ASSERT(m_pDirectDrawSurface);
00232 return m_pDirectDrawSurface->AddOverlayDirtyRect(lpRect);
00233 }
00234
00235 STDMETHODIMP CAggDrawSurface::Blt(LPRECT lpDestRect,LPDIRECTDRAWSURFACE lpDDSrcSurface,LPRECT lpSrcRect,DWORD dwFlags,LPDDBLTFX lpDDBltFx)
00236 {
00237 ASSERT(m_pDirectDrawSurface);
00238 return m_pDirectDrawSurface->Blt(lpDestRect,lpDDSrcSurface,lpSrcRect,dwFlags,lpDDBltFx);
00239 }
00240
00241 STDMETHODIMP CAggDrawSurface::BltBatch(LPDDBLTBATCH lpDDBltBatch,DWORD dwCount,DWORD dwFlags)
00242 {
00243 ASSERT(m_pDirectDrawSurface);
00244 return m_pDirectDrawSurface->BltBatch(lpDDBltBatch,dwCount,dwFlags);
00245 }
00246
00247 STDMETHODIMP CAggDrawSurface::BltFast(DWORD dwX,DWORD dwY,LPDIRECTDRAWSURFACE lpDDSrcSurface,LPRECT lpSrcRect,DWORD dwTrans)
00248 {
00249 ASSERT(m_pDirectDrawSurface);
00250 return m_pDirectDrawSurface->BltFast(dwX,dwY,lpDDSrcSurface,lpSrcRect,dwTrans);
00251 }
00252
00253 STDMETHODIMP CAggDrawSurface::DeleteAttachedSurface(DWORD dwFlags,LPDIRECTDRAWSURFACE lpDDSAttachedSurface)
00254 {
00255 ASSERT(m_pDirectDrawSurface);
00256 return m_pDirectDrawSurface->DeleteAttachedSurface(dwFlags,lpDDSAttachedSurface);
00257 }
00258
00259 STDMETHODIMP CAggDrawSurface::EnumAttachedSurfaces(LPVOID lpContext,LPDDENUMSURFACESCALLBACK lpEnumSurfacesCallback)
00260 {
00261 ASSERT(m_pDirectDrawSurface);
00262 return m_pDirectDrawSurface->EnumAttachedSurfaces(lpContext,lpEnumSurfacesCallback);
00263 }
00264
00265 STDMETHODIMP CAggDrawSurface::EnumOverlayZOrders(DWORD dwFlags,LPVOID lpContext,LPDDENUMSURFACESCALLBACK lpfnCallback)
00266 {
00267 ASSERT(m_pDirectDrawSurface);
00268 return m_pDirectDrawSurface->EnumOverlayZOrders(dwFlags,lpContext,lpfnCallback);
00269 }
00270
00271 STDMETHODIMP CAggDrawSurface::Flip(LPDIRECTDRAWSURFACE lpDDSurfaceTargetOverride,DWORD dwFlags)
00272 {
00273 ASSERT(m_pDirectDrawSurface);
00274 return m_pDirectDrawSurface->Flip(lpDDSurfaceTargetOverride,dwFlags);
00275 }
00276
00277 STDMETHODIMP CAggDrawSurface::GetAttachedSurface(LPDDSCAPS lpDDSCaps,LPDIRECTDRAWSURFACE *lplpDDAttachedSurface)
00278 {
00279 ASSERT(m_pDirectDrawSurface);
00280 return m_pDirectDrawSurface->GetAttachedSurface(lpDDSCaps,lplpDDAttachedSurface);
00281 }
00282
00283 STDMETHODIMP CAggDrawSurface::GetBltStatus(DWORD dwFlags)
00284 {
00285 ASSERT(m_pDirectDrawSurface);
00286 return m_pDirectDrawSurface->GetBltStatus(dwFlags);
00287 }
00288
00289 STDMETHODIMP CAggDrawSurface::GetCaps(LPDDSCAPS lpDDSCaps)
00290 {
00291 ASSERT(m_pDirectDrawSurface);
00292 return m_pDirectDrawSurface->GetCaps(lpDDSCaps);
00293 }
00294
00295 STDMETHODIMP CAggDrawSurface::GetClipper(LPDIRECTDRAWCLIPPER *lplpDDClipper)
00296 {
00297 ASSERT(m_pDirectDrawSurface);
00298 return m_pDirectDrawSurface->GetClipper(lplpDDClipper);
00299 }
00300
00301 STDMETHODIMP CAggDrawSurface::GetColorKey(DWORD dwFlags,LPDDCOLORKEY lpDDColorKey)
00302 {
00303 ASSERT(m_pDirectDrawSurface);
00304 return m_pDirectDrawSurface->GetColorKey(dwFlags,lpDDColorKey);
00305 }
00306
00307 STDMETHODIMP CAggDrawSurface::GetDC(HDC *lphDC)
00308 {
00309 ASSERT(m_pDirectDrawSurface);
00310 return m_pDirectDrawSurface->GetDC(lphDC);
00311 }
00312
00313 STDMETHODIMP CAggDrawSurface::GetFlipStatus(DWORD dwFlags)
00314 {
00315 ASSERT(m_pDirectDrawSurface);
00316 return m_pDirectDrawSurface->GetFlipStatus(dwFlags);
00317 }
00318
00319 STDMETHODIMP CAggDrawSurface::GetOverlayPosition(LPLONG lpdwX,LPLONG lpdwY)
00320 {
00321 ASSERT(m_pDirectDrawSurface);
00322 return m_pDirectDrawSurface->GetOverlayPosition(lpdwX,lpdwY);
00323 }
00324
00325 STDMETHODIMP CAggDrawSurface::GetPalette(LPDIRECTDRAWPALETTE *lplpDDPalette)
00326 {
00327 ASSERT(m_pDirectDrawSurface);
00328 return m_pDirectDrawSurface->GetPalette(lplpDDPalette);
00329 }
00330
00331 STDMETHODIMP CAggDrawSurface::GetPixelFormat(LPDDPIXELFORMAT lpDDPixelFormat)
00332 {
00333 ASSERT(m_pDirectDrawSurface);
00334 return m_pDirectDrawSurface->GetPixelFormat(lpDDPixelFormat);
00335 }
00336
00337 STDMETHODIMP CAggDrawSurface::GetSurfaceDesc(LPDDSURFACEDESC lpDDSurfaceDesc)
00338 {
00339 ASSERT(m_pDirectDrawSurface);
00340
00341
00342
00343 HRESULT hr = m_pDirectDrawSurface->GetSurfaceDesc(lpDDSurfaceDesc);
00344 if (FAILED(hr)) {
00345 return hr;
00346 }
00347
00348
00349 lpDDSurfaceDesc->lpSurface = m_pDirectDrawSurface;
00350 return hr;
00351 }
00352
00353 STDMETHODIMP CAggDrawSurface::Initialize(LPDIRECTDRAW lpDD,LPDDSURFACEDESC lpDDSurfaceDesc)
00354 {
00355 ASSERT(m_pDirectDrawSurface);
00356 return m_pDirectDrawSurface->Initialize(lpDD,lpDDSurfaceDesc);
00357 }
00358
00359 STDMETHODIMP CAggDrawSurface::IsLost()
00360 {
00361 ASSERT(m_pDirectDrawSurface);
00362 return m_pDirectDrawSurface->IsLost();
00363 }
00364
00365 STDMETHODIMP CAggDrawSurface::Lock(LPRECT lpDestRect,LPDDSURFACEDESC lpDDSurfaceDesc,DWORD dwFlags,HANDLE hEvent)
00366 {
00367 ASSERT(m_pDirectDrawSurface);
00368 return m_pDirectDrawSurface->Lock(lpDestRect,lpDDSurfaceDesc,dwFlags,hEvent);
00369 }
00370
00371 STDMETHODIMP CAggDrawSurface::ReleaseDC(HDC hDC)
00372 {
00373 ASSERT(m_pDirectDrawSurface);
00374 return m_pDirectDrawSurface->ReleaseDC(hDC);
00375 }
00376
00377 STDMETHODIMP CAggDrawSurface::Restore()
00378 {
00379 ASSERT(m_pDirectDrawSurface);
00380 return m_pDirectDrawSurface->Restore();
00381 }
00382
00383 STDMETHODIMP CAggDrawSurface::SetClipper(LPDIRECTDRAWCLIPPER lpDDClipper)
00384 {
00385 ASSERT(m_pDirectDrawSurface);
00386 return m_pDirectDrawSurface->SetClipper(lpDDClipper);
00387 }
00388
00389 STDMETHODIMP CAggDrawSurface::SetColorKey(DWORD dwFlags,LPDDCOLORKEY lpDDColorKey)
00390 {
00391 ASSERT(m_pDirectDrawSurface);
00392 return m_pDirectDrawSurface->SetColorKey(dwFlags,lpDDColorKey);
00393 }
00394
00395 STDMETHODIMP CAggDrawSurface::SetOverlayPosition(LONG dwX,LONG dwY)
00396 {
00397 ASSERT(m_pDirectDrawSurface);
00398 return m_pDirectDrawSurface->SetOverlayPosition(dwX,dwY);
00399 }
00400
00401 STDMETHODIMP CAggDrawSurface::SetPalette(LPDIRECTDRAWPALETTE lpDDPalette)
00402 {
00403 ASSERT(m_pDirectDrawSurface);
00404 return m_pDirectDrawSurface->SetPalette(lpDDPalette);
00405 }
00406
00407 STDMETHODIMP CAggDrawSurface::Unlock(LPVOID lpSurfaceData)
00408 {
00409 ASSERT(m_pDirectDrawSurface);
00410 return m_pDirectDrawSurface->Unlock(lpSurfaceData);
00411 }
00412
00413 STDMETHODIMP CAggDrawSurface::UpdateOverlay(LPRECT lpSrcRect,LPDIRECTDRAWSURFACE lpDDDestSurface,LPRECT lpDestRect,DWORD dwFlags,LPDDOVERLAYFX lpDDOverlayFX)
00414 {
00415 ASSERT(m_pDirectDrawSurface);
00416 return m_pDirectDrawSurface->UpdateOverlay(lpSrcRect,lpDDDestSurface,lpDestRect,dwFlags,lpDDOverlayFX);
00417 }
00418
00419 STDMETHODIMP CAggDrawSurface::UpdateOverlayDisplay(DWORD dwFlags)
00420 {
00421 ASSERT(m_pDirectDrawSurface);
00422 return m_pDirectDrawSurface->UpdateOverlayDisplay(dwFlags);
00423 }
00424
00425 STDMETHODIMP CAggDrawSurface::UpdateOverlayZOrder(DWORD dwFlags,LPDIRECTDRAWSURFACE lpDDSReference)
00426 {
00427 ASSERT(m_pDirectDrawSurface);
00428 return m_pDirectDrawSurface->UpdateOverlayZOrder(dwFlags,lpDDSReference);
00429 }
00430
00431 CLoadDirectDraw::CLoadDirectDraw() :
00432 m_pDirectDraw(NULL),
00433 m_hDirectDraw(NULL)
00434 {
00435 }
00436
00437 CLoadDirectDraw::~CLoadDirectDraw()
00438 {
00439 ReleaseDirectDraw();
00440
00441 if (m_hDirectDraw) {
00442 NOTE("Unloading library");
00443 FreeLibrary(m_hDirectDraw);
00444 }
00445 }
00446
00447 HRESULT CLoadDirectDraw::LoadDirectDraw(LPSTR szDevice)
00448 {
00449 PDRAWCREATE pDrawCreate;
00450 PDRAWENUM pDrawEnum;
00451 LPDIRECTDRAWENUMERATEEXA pDrawEnumEx;
00452 HRESULT hr = NOERROR;
00453
00454 NOTE("Entering DoLoadDirectDraw");
00455
00456
00457
00458 if (m_pDirectDraw) {
00459 NOTE("Already loaded");
00460 ASSERT(m_hDirectDraw);
00461 return NOERROR;
00462 }
00463
00464
00465
00466 if(!m_hDirectDraw)
00467 {
00468 UINT ErrorMode = SetErrorMode(SEM_NOOPENFILEERRORBOX);
00469 m_hDirectDraw = LoadLibrary(TEXT("DDRAW.DLL"));
00470 SetErrorMode(ErrorMode);
00471
00472 if (m_hDirectDraw == NULL) {
00473 DbgLog((LOG_ERROR,1,TEXT("Can't load DDRAW.DLL")));
00474 NOTE("No library");
00475 return E_NOINTERFACE;
00476 }
00477 }
00478
00479
00480
00481 pDrawCreate = (PDRAWCREATE)GetProcAddress(m_hDirectDraw,"DirectDrawCreate");
00482
00483 pDrawEnum = (PDRAWENUM)GetProcAddress(m_hDirectDraw,"DirectDrawEnumerateA");
00484 pDrawEnumEx = (LPDIRECTDRAWENUMERATEEXA)GetProcAddress(m_hDirectDraw,
00485 "DirectDrawEnumerateExA");
00486
00487
00488 if (pDrawCreate == NULL || pDrawEnum == NULL) {
00489 DbgLog((LOG_ERROR,1,TEXT("Can't get functions: Create=%x Enum=%x"),
00490 pDrawCreate, pDrawEnum));
00491 NOTE("No entry point");
00492 ReleaseDirectDraw();
00493 return E_NOINTERFACE;
00494 }
00495
00496 DbgLog((LOG_TRACE,3,TEXT("Creating DDraw for device %s"),
00497 szDevice ? szDevice : "<NULL>"));
00498
00499
00500
00501 if (pDrawEnumEx)
00502 m_pDirectDraw = DirectDrawCreateFromDeviceEx(szDevice, pDrawCreate,
00503 pDrawEnumEx);
00504 else
00505 m_pDirectDraw = DirectDrawCreateFromDevice(szDevice, pDrawCreate,
00506 pDrawEnum);
00507
00508 if (m_pDirectDraw == NULL) {
00509 DbgLog((LOG_ERROR,1,TEXT("Can't create DDraw")));
00510 NOTE("No instance");
00511 ReleaseDirectDraw();
00512 return E_NOINTERFACE;
00513 }
00514 return NOERROR;
00515 }
00516
00517 void CLoadDirectDraw::ReleaseDirectDraw()
00518 {
00519 NOTE("Releasing DirectDraw driver");
00520
00521
00522
00523 if (m_pDirectDraw) {
00524 NOTE("Releasing instance");
00525 m_pDirectDraw->Release();
00526 m_pDirectDraw = NULL;
00527 }
00528
00529 }
00530
00531 HRESULT CLoadDirectDraw::IsDirectDrawLoaded()
00532 {
00533 NOTE("Entering IsDirectDrawLoaded");
00534
00535 if (m_pDirectDraw == NULL) {
00536 NOTE("DirectDraw not loaded");
00537 return S_FALSE;
00538 }
00539 return NOERROR;
00540 }
00541
00542 LPDIRECTDRAW CLoadDirectDraw::GetDirectDraw()
00543 {
00544 NOTE("Entering GetDirectDraw");
00545
00546 if (m_pDirectDraw == NULL) {
00547 NOTE("No DirectDraw");
00548 return NULL;
00549 }
00550
00551 NOTE("Returning DirectDraw");
00552 m_pDirectDraw->AddRef();
00553 return m_pDirectDraw;
00554 }
00555
00556 BOOL CLoadDirectDraw::IsDirectDrawVersion1()
00557 {
00558
00559 if (m_pDirectDraw == NULL)
00560 return FALSE;
00561
00562 IDirectDraw2 *p = NULL;
00563 HRESULT hr = m_pDirectDraw->QueryInterface(IID_IDirectDraw2, (void **)&p);
00564 if (p)
00565 p->Release();
00566 if (hr == NOERROR) {
00567 DbgLog((LOG_TRACE,3,TEXT("Direct Draw Version 2 or greater")));
00568 return FALSE;
00569 } else {
00570 DbgLog((LOG_TRACE,3,TEXT("Direct Draw Version 1")));
00571 return TRUE;
00572 }
00573 }