1
0
mirror of https://github.com/DxWnd/DxWnd.reloaded synced 2024-12-30 09:25:35 +01:00
DxWnd.reloaded/dll/gdiblt.cpp
gho tik c4c0b5877f v2_03_35_src
Former-commit-id: 6cd1f5b22c8dc6e2e54a29d755c7b74f422e1cd2
2017-03-06 11:41:22 -05:00

64 lines
1.8 KiB
C++

#define _CRT_SECURE_NO_WARNINGS
#define INITGUID
//#define FULLHEXDUMP
#include <windows.h>
#include <ddraw.h>
#include "dxwnd.h"
#include "dxhook.h"
#include "ddrawi.h"
#include "dxwcore.hpp"
#include "stdio.h"
#include "hddraw.h"
#include "ddproxy.h"
#include "dxhelper.h"
#include "syslibs.h"
extern GetDC_Type pGetDC;
extern ReleaseDC_Type pReleaseDC;
extern Unlock1_Type pUnlock1;
void BlitToWindow(HWND w, LPDIRECTDRAWSURFACE s)
{
HDC shdc, thdc;
RECT client;
HRESULT res;
BOOL ret;
if(!s) return; // for surface color fill
res=(*pGetDC)(s, &shdc);
if(res) {
OutTrace("ddraw GetDC error lpdds=%x res=%x(%s)\n", s, res, ExplainDDError(res));
return;
}
thdc=(*pGDIGetDC)(w);
if(!thdc) {
OutTrace("GDI GetDC error=%d\n", GetLastError());
return;
}
client = dxw.MapClientRect(NULL);
if(dxw.dwFlags5 & CENTERTOWIN){
int x, y;
x = (client.left + client.right - dxw.GetScreenWidth()) >> 1; // right-shift 1 bit means divide by 2!
y = (client.top + client.bottom - dxw.GetScreenHeight()) >> 1;
ret=(*pGDIBitBlt)(thdc, x, y, dxw.GetScreenWidth(), dxw.GetScreenHeight(), shdc, 0, 0, SRCCOPY);
if(!ret) OutTrace("BitBlt error=%d\n", GetLastError());
}
else{
if(dxw.dwFlags5 & BILINEARFILTER) {
ret=SetStretchBltMode(thdc, HALFTONE);
if((!ret) || (ret==ERROR_INVALID_PARAMETER)) OutTrace("GDI SetStretchBltMode error=%d\n", GetLastError());
}
ret=(*pGDIStretchBlt)(thdc,
client.left, client.top, client.right-client.left, client.bottom-client.top,
shdc, 0, 0, dxw.GetScreenWidth(), dxw.GetScreenHeight(), SRCCOPY);
if(!ret) OutTrace("GDI StretchBlt error=%d\n", GetLastError());
}
dxw.ShowOverlay(thdc);
res=(*pReleaseDC)(s, shdc);
if(res) OutTrace("ddraw ReleaseDC error lpdds=%x res=%x(%s)\n", s, res, ExplainDDError(res));
ret=(*pGDIReleaseDC)(w, thdc);
if(!ret) OutTrace("GDI ReleaseDC error=%d\n", GetLastError());
}