mirror of
https://github.com/DxWnd/DxWnd.reloaded
synced 2024-12-30 09:25:35 +01:00
v2_03_44_src
Former-commit-id: 78999489be6a5745474ed4d697cf755eb76db1a2
This commit is contained in:
parent
d9a1b51681
commit
bf26e50bd9
@ -1,3 +1,3 @@
|
||||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:367c504db6f66d3f5c9e40e1a3e3aeb94f3c5a3df7b7bd9134a649379a40c8fa
|
||||
size 612864
|
||||
oid sha256:4fa45747fcb74b2f182ae1d40d3d2219eef7a9410a72a7db49157aba403d9fe4
|
||||
size 613888
|
||||
|
@ -1,3 +1,3 @@
|
||||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:4b44208fd7eef222ff0861d95418c3aabb46481b83198c1b40d769bc52f6a8b4
|
||||
oid sha256:48137e513053f009fb46ef066a902428491fa3fbc00119db3d5a16cd287ce4fa
|
||||
size 545792
|
||||
|
@ -1,70 +0,0 @@
|
||||
[window]
|
||||
exportpath=D:\DxWnd\v2_03_43_src\build\exports\
|
||||
exepath=D:\Games\Arx Fatalis demo\
|
||||
posx=1946
|
||||
posy=567
|
||||
sizx=320
|
||||
sizy=200
|
||||
[target]
|
||||
title0=Arx Fatalis demo
|
||||
path0=D:\Games\Arx Fatalis demo\ARX.exe
|
||||
launchpath0=
|
||||
module0=Athena
|
||||
opengllib0=
|
||||
notes0=
|
||||
registry0=
|
||||
ver0=0
|
||||
coord0=0
|
||||
flag0=136314918
|
||||
flagg0=1207959552
|
||||
flagh0=65552
|
||||
flagi0=138412036
|
||||
flagj0=4224
|
||||
flagk0=65536
|
||||
tflag0=0
|
||||
initx0=0
|
||||
inity0=0
|
||||
minx0=0
|
||||
miny0=0
|
||||
maxx0=0
|
||||
maxy0=0
|
||||
posx0=150
|
||||
posy0=50
|
||||
sizx0=800
|
||||
sizy0=600
|
||||
maxfps0=0
|
||||
initts0=0
|
||||
winver0=0
|
||||
maxres0=-1
|
||||
swapeffect0=0
|
||||
title1=TieFighter 95
|
||||
path1=D:\Games\TIE95\TIE95.EXE
|
||||
launchpath1=
|
||||
module1=
|
||||
opengllib1=
|
||||
notes1=The game can be played also with no joystick using the DxWnd virtual one.\nIf you have a real joystick, the "Use DLL injection" flag is not necessary.\nUse "Unlock Z order" to avoid losing control of the window.
|
||||
registry1=
|
||||
ver1=1
|
||||
coord1=0
|
||||
flag1=681574514
|
||||
flagg1=1744830464
|
||||
flagh1=20
|
||||
flagi1=138412036
|
||||
flagj1=1073746048
|
||||
flagk1=136642560
|
||||
tflag1=0
|
||||
initx1=0
|
||||
inity1=0
|
||||
minx1=0
|
||||
miny1=0
|
||||
maxx1=800
|
||||
maxy1=600
|
||||
posx1=50
|
||||
posy1=50
|
||||
sizx1=800
|
||||
sizy1=600
|
||||
maxfps1=0
|
||||
initts1=0
|
||||
winver1=0
|
||||
maxres1=-1
|
||||
swapeffect1=0
|
@ -28,5 +28,5 @@ launchpath0=
|
||||
notes0=
|
||||
registry0=
|
||||
flagj0=0
|
||||
flagk0=262144
|
||||
flagk0=0
|
||||
swapeffect0=0
|
||||
|
32
build/exports/Reah.dxw
Normal file
32
build/exports/Reah.dxw
Normal file
@ -0,0 +1,32 @@
|
||||
[target]
|
||||
title0=Reah
|
||||
path0=D:\Games\Reah\Reah.exe
|
||||
launchpath0=F:\Autorun.exe
|
||||
module0=
|
||||
opengllib0=
|
||||
notes0=
|
||||
registry0=
|
||||
ver0=0
|
||||
coord0=0
|
||||
flag0=-1465778141
|
||||
flagg0=1209010176
|
||||
flagh0=20
|
||||
flagi0=138412036
|
||||
flagj0=1073746048
|
||||
flagk0=98304
|
||||
tflag0=0
|
||||
initx0=0
|
||||
inity0=0
|
||||
minx0=0
|
||||
miny0=0
|
||||
maxx0=0
|
||||
maxy0=0
|
||||
posx0=50
|
||||
posy0=50
|
||||
sizx0=800
|
||||
sizy0=600
|
||||
maxfps0=0
|
||||
initts0=0
|
||||
winver0=0
|
||||
maxres0=-1
|
||||
swapeffect0=0
|
32
build/exports/Super Real Mahjong P7.dxw
Normal file
32
build/exports/Super Real Mahjong P7.dxw
Normal file
@ -0,0 +1,32 @@
|
||||
[target]
|
||||
title0=Super Real Mahjong P7
|
||||
path0=D:\Games\Super Real Mahjong P7\P7\p7.exe
|
||||
launchpath0=D:\Games\Super Real Mahjong P7\P7\p7.exe -f
|
||||
module0=
|
||||
opengllib0=
|
||||
notes0=
|
||||
registry0=
|
||||
ver0=0
|
||||
coord0=0
|
||||
flag0=681574434
|
||||
flagg0=1207959552
|
||||
flagh0=20
|
||||
flagi0=138412036
|
||||
flagj0=5248
|
||||
flagk0=67436544
|
||||
tflag0=0
|
||||
initx0=0
|
||||
inity0=0
|
||||
minx0=0
|
||||
miny0=0
|
||||
maxx0=0
|
||||
maxy0=0
|
||||
posx0=50
|
||||
posy0=50
|
||||
sizx0=800
|
||||
sizy0=600
|
||||
maxfps0=0
|
||||
initts0=0
|
||||
winver0=0
|
||||
maxres0=-1
|
||||
swapeffect0=0
|
@ -951,4 +951,13 @@ fix: deleted emulation of ZBUFFER attach. Needed for "Arx Fatalis"
|
||||
fix: added emulation of PixelFormat in getPixelFormat hooker. Needed for "Arx Fatalis"
|
||||
add: added virtual joystick feature. Required to play "Tie Fighter 95" with no real joystick
|
||||
v2.03.43.fix1
|
||||
fix: recovered virtual joystick buttons
|
||||
fix: recovered virtual joystick buttons
|
||||
|
||||
v2.03.44
|
||||
fix: GetSystemPaletteUse error message
|
||||
fix: transparent virtual joystick icons
|
||||
fix: RealizePalette hooker crash in "Super Real Mahjong P7"
|
||||
fix: complete recoding of GDI BitBlt, StretchBlt and PatBlt hookers: it fixes "Reah" problems
|
||||
fix: changes in USER32 BeginPaint hooker to support DC sharing with ddraw
|
||||
fix: increased configuration panels heigth do avoid clipping when desktop font size is set to 125%
|
||||
|
||||
|
@ -1421,7 +1421,7 @@ char *ExplainGetDCExFlags(DWORD c)
|
||||
|
||||
char *ExplainPaletteUse(UINT uUsage)
|
||||
{
|
||||
char *eb = SYSPAL_ERROR;
|
||||
char *eb = "SYSPAL_ERROR";
|
||||
switch(uUsage){
|
||||
case SYSPAL_STATIC: eb="SYSPAL_STATIC"; break;
|
||||
case SYSPAL_NOSTATIC: eb="SYSPAL_NOSTATIC"; break;
|
||||
|
@ -27,7 +27,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
#include "TlHelp32.h"
|
||||
|
||||
#define VERSION "2.03.43.fix1"
|
||||
#define VERSION "2.03.44"
|
||||
|
||||
#define DDTHREADLOCK 1
|
||||
//#define LOCKTHREADS
|
||||
|
Binary file not shown.
BIN
dll/fire1.bmp
BIN
dll/fire1.bmp
Binary file not shown.
Before Width: | Height: | Size: 3.8 KiB After Width: | Height: | Size: 3.8 KiB |
BIN
dll/fire2.bmp
BIN
dll/fire2.bmp
Binary file not shown.
Before Width: | Height: | Size: 3.8 KiB After Width: | Height: | Size: 3.8 KiB |
BIN
dll/fire3.bmp
BIN
dll/fire3.bmp
Binary file not shown.
Before Width: | Height: | Size: 3.8 KiB After Width: | Height: | Size: 3.8 KiB |
151
dll/gdi32.cpp
151
dll/gdi32.cpp
@ -9,6 +9,10 @@
|
||||
|
||||
#include "stdio.h"
|
||||
|
||||
#define GDIMODE_STRETCHED 0
|
||||
#define GDIMODE_EMULATED 1
|
||||
extern int GDIEmulationMode;
|
||||
|
||||
static void Stopper(char *s, int line)
|
||||
{
|
||||
char sMsg[81];
|
||||
@ -616,7 +620,7 @@ UINT WINAPI extRealizePalette(HDC hdc)
|
||||
HRESULT res;
|
||||
extern LPDIRECTDRAWPALETTE lpDDP;
|
||||
extern SetEntries_Type pSetEntries;
|
||||
res=(*pSetEntries)(lpDDP, 0, 0, 256, PalEntries);
|
||||
if(lpDDP && pSetEntries) res=(*pSetEntries)(lpDDP, 0, 0, 256, PalEntries);
|
||||
}
|
||||
else
|
||||
ret=(*pGDIRealizePalette)(hdc);
|
||||
@ -758,6 +762,7 @@ HDC WINAPI extGDICreateCompatibleDC(HDC hdc)
|
||||
BOOL WINAPI extGDIBitBlt(HDC hdcDest, int nXDest, int nYDest, int nWidth, int nHeight, HDC hdcSrc, int nXSrc, int nYSrc, DWORD dwRop)
|
||||
{
|
||||
BOOL res;
|
||||
BOOL IsToScreen;
|
||||
|
||||
OutTraceDW("GDI.BitBlt: HDC=%x nXDest=%d nYDest=%d nWidth=%d nHeight=%d hdcSrc=%x nXSrc=%d nYSrc=%d dwRop=%x(%s)\n",
|
||||
hdcDest, nXDest, nYDest, nWidth, nHeight, hdcSrc, nXSrc, nYSrc, dwRop, ExplainROP(dwRop));
|
||||
@ -771,44 +776,40 @@ BOOL WINAPI extGDIBitBlt(HDC hdcDest, int nXDest, int nYDest, int nWidth, int nH
|
||||
|
||||
if(dxw.dwFlags3 & GDIEMULATEDC){
|
||||
if (hdcDest==dxw.RealHDC) hdcDest=dxw.VirtualHDC;
|
||||
//return (*pGDIBitBlt)(hdcDest, nXDest, nYDest, nWidth, nHeight, hdcSrc, nXSrc, nYSrc, dwRop);
|
||||
OutTraceB("GDI.BitBlt: DEBUG emulated hdc dest=%x->%x\n", dxw.RealHDC, hdcDest);
|
||||
}
|
||||
|
||||
SetStretchBltMode(hdcDest, HALFTONE);
|
||||
if (OBJ_DC == GetObjectType(hdcDest)){
|
||||
//if(dxw.IsRealDesktop(WindowFromDC(hdcDest))) hdcDest=GetDC(dxw.GethWnd()); // ??????
|
||||
if (dxw.HandleFPS()) return TRUE;
|
||||
if (dxw.dwFlags3 & NOGDIBLT) return TRUE;
|
||||
if(dxw.IsFullScreen()){
|
||||
int nWDest, nHDest;
|
||||
nWDest= nWidth;
|
||||
nHDest= nHeight;
|
||||
dxw.MapClient(&nXDest, &nYDest, &nWDest, &nHDest);
|
||||
res=(*pGDIStretchBlt)(hdcDest, nXDest, nYDest, nWDest, nHDest, hdcSrc, nXSrc, nYSrc, nWidth, nHeight, dwRop);
|
||||
dxw.ShowOverlay(hdcDest);
|
||||
OutTrace("Debug: DC dest=(%d,%d) size=(%d,%d)\n", nXDest, nYDest, nWDest, nHDest);
|
||||
}
|
||||
else if(WindowFromDC(hdcDest)==NULL){
|
||||
// V2.02.31: See StretchBlt.
|
||||
if(hdcDest == NULL){
|
||||
// happens in Reah, hdc is NULL despite the fact that BeginPaint returns a valid DC. Too bad, we recover here ...
|
||||
hdcDest = (*pGDIGetDC)(dxw.GethWnd());
|
||||
OutTraceB("GDI.BitBlt: DEBUG hdc dest=NULL->%x\n", hdcDest);
|
||||
}
|
||||
|
||||
IsToScreen=(OBJ_DC == GetObjectType(hdcDest));
|
||||
if (IsToScreen && (dxw.dwFlags3 & NOGDIBLT)) return TRUE;
|
||||
if(dxw.IsFullScreen()) {
|
||||
switch(GDIEmulationMode){
|
||||
case GDIMODE_STRETCHED: {
|
||||
int nWDest, nHDest;
|
||||
nWDest= nWidth;
|
||||
nHDest= nHeight;
|
||||
dxw.MapWindow(&nXDest, &nYDest, &nWDest, &nHDest);
|
||||
dxw.MapClient(&nXDest, &nYDest, &nWDest, &nHDest);
|
||||
res=(*pGDIStretchBlt)(hdcDest, nXDest, nYDest, nWDest, nHDest, hdcSrc, nXSrc, nYSrc, nWidth, nHeight, dwRop);
|
||||
dxw.ShowOverlay(hdcDest);
|
||||
OutTrace("Debug: NULL dest=(%d,%d) size=(%d,%d)\n", nXDest, nYDest, nWDest, nHDest);
|
||||
}
|
||||
else{
|
||||
OutTraceB("GDI.BitBlt: DEBUG DC dest=(%d,%d) size=(%d,%d)\n", nXDest, nYDest, nWDest, nHDest);
|
||||
}
|
||||
break;
|
||||
case GDIMODE_EMULATED:
|
||||
default:
|
||||
res=(*pGDIBitBlt)(hdcDest, nXDest, nYDest, nWidth, nHeight, hdcSrc, nXSrc, nYSrc, dwRop);
|
||||
OutTrace("Debug: PROXY dest=(%d,%d) size=(%d,%d)\n", nXDest, nYDest, nWidth, nHeight);
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
else {
|
||||
res=(*pGDIBitBlt)(hdcDest, nXDest, nYDest, nWidth, nHeight, hdcSrc, nXSrc, nYSrc, dwRop);
|
||||
}
|
||||
|
||||
if(res && IsToScreen) dxw.ShowOverlay(hdcDest);
|
||||
if(!res) OutTraceE("GDI.BitBlt: ERROR err=%d at %d\n", GetLastError(), __LINE__);
|
||||
|
||||
return res;
|
||||
}
|
||||
|
||||
@ -823,29 +824,42 @@ BOOL WINAPI extGDIPatBlt(HDC hdcDest, int nXDest, int nYDest, int nWidth, int nH
|
||||
OutTraceB("GDI.PatBlt: DEBUG FullScreen=%x target hdctype=%x(%s) hwnd=%x\n",
|
||||
dxw.IsFullScreen(), GetObjectType(hdcDest), ExplainDCType(GetObjectType(hdcDest)), WindowFromDC(hdcDest));
|
||||
|
||||
IsToScreen=FALSE;
|
||||
res=0;
|
||||
if (OBJ_DC == GetObjectType(hdcDest)){
|
||||
IsToScreen=TRUE;
|
||||
if (dxw.HandleFPS()) return TRUE;
|
||||
if (dxw.dwFlags3 & NOGDIBLT) return TRUE;
|
||||
if (dxw.IsFullScreen()){
|
||||
dxw.MapClient(&nXDest, &nYDest, &nWidth, &nHeight);
|
||||
dxw.ShowOverlay(hdcDest);
|
||||
res=(*pGDIPatBlt)(hdcDest, nXDest, nYDest, nWidth, nHeight, dwRop);
|
||||
}
|
||||
else if(WindowFromDC(hdcDest)==NULL){
|
||||
// V2.02.31: See StretchBlt.
|
||||
dxw.MapWindow(&nXDest, &nYDest, &nWidth, &nHeight);
|
||||
res=(*pGDIPatBlt)(hdcDest, nXDest, nYDest, nWidth, nHeight, dwRop);
|
||||
if(dxw.dwFlags3 & GDIEMULATEDC){
|
||||
if (hdcDest==dxw.RealHDC) hdcDest=dxw.VirtualHDC;
|
||||
OutTraceB("GDI.PatBlt: DEBUG emulated hdc dest=%x->%x\n", dxw.RealHDC, hdcDest);
|
||||
}
|
||||
|
||||
if(hdcDest == NULL){
|
||||
// happens in Reah, hdc is NULL despite the fact that BeginPaint returns a valid DC. Too bad, we recover here ...
|
||||
hdcDest = (*pGDIGetDC)(dxw.GethWnd());
|
||||
OutTraceB("GDI.PatBlt: DEBUG hdc dest=NULL->%x\n", hdcDest);
|
||||
}
|
||||
|
||||
IsToScreen=(OBJ_DC == GetObjectType(hdcDest));
|
||||
if (IsToScreen && (dxw.dwFlags3 & NOGDIBLT)) return TRUE;
|
||||
if(dxw.IsFullScreen()) {
|
||||
switch(GDIEmulationMode){
|
||||
case GDIMODE_STRETCHED: {
|
||||
int nWDest, nHDest;
|
||||
nWDest= nWidth;
|
||||
nHDest= nHeight;
|
||||
dxw.MapClient(&nXDest, &nYDest, &nWDest, &nHDest);
|
||||
res=(*pGDIPatBlt)(hdcDest, nXDest, nYDest, nWDest, nHDest, dwRop);
|
||||
OutTraceB("GDI.PatBlt: DEBUG DC dest=(%d,%d) size=(%d,%d)\n", nXDest, nYDest, nWDest, nHDest);
|
||||
}
|
||||
break;
|
||||
case GDIMODE_EMULATED:
|
||||
default:
|
||||
res=(*pGDIPatBlt)(hdcDest, nXDest, nYDest, nWidth, nHeight, dwRop);
|
||||
break;
|
||||
}
|
||||
}
|
||||
else {
|
||||
res=(*pGDIPatBlt)(hdcDest, nXDest, nYDest, nWidth, nHeight, dwRop);
|
||||
res=(*pGDIPatBlt)(hdcDest, nXDest, nYDest, nWidth, nHeight, dwRop);
|
||||
}
|
||||
if (IsToScreen) dxw.ShowOverlay(hdcDest);
|
||||
if(!res) OutTraceE("GDI.PatBlt: ERROR err=%d at %d\n", GetLastError(), __LINE__);
|
||||
|
||||
if(res && IsToScreen) dxw.ShowOverlay(hdcDest);
|
||||
if(!res) OutTraceE("GDI.PatBlt: ERROR err=%d at %d\n", GetLastError(), __LINE__);
|
||||
return res;
|
||||
}
|
||||
|
||||
@ -861,24 +875,41 @@ BOOL WINAPI extGDIStretchBlt(HDC hdcDest, int nXDest, int nYDest, int nWidth, in
|
||||
OutTraceB("GDI.StretchBlt: DEBUG FullScreen=%x target hdctype=%x(%s) hwnd=%x\n",
|
||||
dxw.IsFullScreen(), GetObjectType(hdcDest), ExplainDCType(GetObjectType(hdcDest)), WindowFromDC(hdcDest));
|
||||
|
||||
IsToScreen=FALSE;
|
||||
if (OBJ_DC == GetObjectType(hdcDest)){
|
||||
if (dxw.HandleFPS()) return TRUE;
|
||||
if (dxw.dwFlags3 & NOGDIBLT) return TRUE;
|
||||
IsToScreen=TRUE;
|
||||
if(dxw.IsFullScreen()){
|
||||
dxw.MapClient(&nXDest, &nYDest, &nWidth, &nHeight);
|
||||
}
|
||||
else if(WindowFromDC(hdcDest)==NULL){
|
||||
// V2.02.31: In "Silent Hunter II" intro movie, QuickTime 5 renders the video on the PrimarySurface->GetDC device context,
|
||||
// that is a memory device type associated to NULL (desktop) window, through GDI StretchBlt api. So, you shoud compensate
|
||||
// by scaling and offsetting to main window.
|
||||
dxw.MapWindow(&nXDest, &nYDest, &nWidth, &nHeight);
|
||||
}
|
||||
if(dxw.dwFlags3 & GDIEMULATEDC){
|
||||
if (hdcDest==dxw.RealHDC) hdcDest=dxw.VirtualHDC;
|
||||
OutTraceB("GDI.StretchBlt: DEBUG emulated hdc dest=%x->%x\n", dxw.RealHDC, hdcDest);
|
||||
}
|
||||
|
||||
res=(*pGDIStretchBlt)(hdcDest, nXDest, nYDest, nWidth, nHeight, hdcSrc, nXSrc, nYSrc, nWSrc, nHSrc, dwRop);
|
||||
if (IsToScreen) dxw.ShowOverlay(hdcDest);
|
||||
if(hdcDest == NULL){
|
||||
// happens in Reah, hdc is NULL despite the fact that BeginPaint returns a valid DC. Too bad, we recover here ...
|
||||
hdcDest = (*pGDIGetDC)(dxw.GethWnd());
|
||||
OutTraceB("GDI.StretchBlt: DEBUG hdc dest=NULL->%x\n", hdcDest);
|
||||
}
|
||||
|
||||
IsToScreen=(OBJ_DC == GetObjectType(hdcDest));
|
||||
if (IsToScreen && (dxw.dwFlags3 & NOGDIBLT)) return TRUE;
|
||||
if(dxw.IsFullScreen()) {
|
||||
switch(GDIEmulationMode){
|
||||
case GDIMODE_STRETCHED: {
|
||||
int nWDest, nHDest;
|
||||
nWDest= nWidth;
|
||||
nHDest= nHeight;
|
||||
dxw.MapClient(&nXDest, &nYDest, &nWDest, &nHDest);
|
||||
res=(*pGDIStretchBlt)(hdcDest, nXDest, nYDest, nWDest, nHDest, hdcSrc, nXSrc, nYSrc, nWidth, nHeight, dwRop);
|
||||
OutTraceB("GDI.StretchBlt: DEBUG DC dest=(%d,%d) size=(%d,%d)\n", nXDest, nYDest, nWDest, nHDest);
|
||||
}
|
||||
break;
|
||||
case GDIMODE_EMULATED:
|
||||
default:
|
||||
res=(*pGDIStretchBlt)(hdcDest, nXDest, nYDest, nWidth, nHeight, hdcSrc, nXSrc, nYSrc, nWidth, nHeight, dwRop);
|
||||
break;
|
||||
}
|
||||
}
|
||||
else {
|
||||
res=(*pGDIStretchBlt)(hdcDest, nXDest, nYDest, nWidth, nHeight, hdcSrc, nXSrc, nYSrc, nWidth, nHeight, dwRop);
|
||||
}
|
||||
|
||||
if(res && IsToScreen) dxw.ShowOverlay(hdcDest);
|
||||
if(!res) OutTraceE("GDI.StretchBlt: ERROR err=%d at %d\n", GetLastError(), __LINE__);
|
||||
return res;
|
||||
}
|
||||
|
@ -16,6 +16,18 @@ DWORD WINAPI extICDrawBegin(HIC, DWORD, HPALETTE, HWND, HDC, int, int, int, int
|
||||
typedef BOOL (WINAPI *DrawDibDraw_Type)(HDRAWDIB, HDC, int, int, int, int, LPBITMAPINFOHEADER, LPVOID, int, int, int, int, UINT);
|
||||
DrawDibDraw_Type pDrawDibDraw = NULL;
|
||||
BOOL WINAPI extDrawDibDraw(HDRAWDIB, HDC, int, int, int, int, LPBITMAPINFOHEADER, LPVOID, int, int, int, int, UINT);
|
||||
typedef BOOL (WINAPI *DrawDibBegin_Type)(HDRAWDIB, HDC, int, int, LPBITMAPINFOHEADER, int, int, UINT);
|
||||
DrawDibBegin_Type pDrawDibBegin = NULL;
|
||||
BOOL WINAPI extDrawDibBegin(HDRAWDIB, HDC, int, int, LPBITMAPINFOHEADER, int, int, UINT);
|
||||
typedef BOOL (WINAPI *DrawDibStart_Type)(HDRAWDIB, LONG);
|
||||
DrawDibStart_Type pDrawDibStart = NULL;
|
||||
BOOL WINAPI extDrawDibStart(HDRAWDIB, LONG);
|
||||
typedef BOOL (WINAPI *DrawDibStop_Type)(HDRAWDIB);
|
||||
DrawDibStop_Type pDrawDibStop = NULL;
|
||||
BOOL WINAPI extDrawDibStop(HDRAWDIB);
|
||||
typedef BOOL (WINAPI *DrawDibEnd_Type)(HDRAWDIB);
|
||||
DrawDibEnd_Type pDrawDibEnd = NULL;
|
||||
BOOL WINAPI extDrawDibEnd(HDRAWDIB);
|
||||
|
||||
static HookEntry_Type Hooks[]={
|
||||
//{HOOK_HOT_CANDIDATE, "ICSendMessage", (FARPROC)NULL, (FARPROC *)&pICSendMessage, (FARPROC)extICSendMessage},
|
||||
@ -24,6 +36,10 @@ static HookEntry_Type Hooks[]={
|
||||
{HOOK_HOT_CANDIDATE, "ICGetDisplayFormat", (FARPROC)NULL, (FARPROC *)&pICGetDisplayFormat, (FARPROC)extICGetDisplayFormat}, // "Man in Black" - beware: this is NOT STDCALL!!!
|
||||
{HOOK_HOT_CANDIDATE, "ICDrawBegin", (FARPROC)NULL, (FARPROC *)&pICDrawBegin, (FARPROC)extICDrawBegin},
|
||||
{HOOK_HOT_CANDIDATE, "DrawDibDraw", (FARPROC)NULL, (FARPROC *)&pDrawDibDraw, (FARPROC)extDrawDibDraw},
|
||||
{HOOK_HOT_CANDIDATE, "DrawDibBegin", (FARPROC)NULL, (FARPROC *)&pDrawDibBegin, (FARPROC)extDrawDibBegin},
|
||||
{HOOK_HOT_CANDIDATE, "DrawDibStart", (FARPROC)NULL, (FARPROC *)&pDrawDibStart, (FARPROC)extDrawDibStart},
|
||||
{HOOK_HOT_CANDIDATE, "DrawDibStop", (FARPROC)NULL, (FARPROC *)&pDrawDibStop, (FARPROC)extDrawDibStop},
|
||||
{HOOK_HOT_CANDIDATE, "DrawDibEnd", (FARPROC)NULL, (FARPROC *)&pDrawDibEnd, (FARPROC)extDrawDibEnd},
|
||||
{HOOK_IAT_CANDIDATE, 0, NULL, 0, 0} // terminator
|
||||
};
|
||||
|
||||
@ -236,4 +252,43 @@ BOOL WINAPI extDrawDibDraw(HDRAWDIB hdd, HDC hdc, int xDst, int yDst, int dxDst,
|
||||
hdd, hdc, xDst, yDst, dxDst, dyDst, xSrc, ySrc, dxSrc, dySrc, wFlags);
|
||||
ret = (*pDrawDibDraw)(hdd, hdc, xDst, yDst, dxDst, dyDst, lpbi, lpBits, xSrc, ySrc, dxSrc, dySrc, wFlags);
|
||||
return ret;
|
||||
}
|
||||
}
|
||||
BOOL WINAPI extDrawDibBegin(HDRAWDIB hdd, HDC hdc, int dxDest, int dyDest, LPBITMAPINFOHEADER lpbi, int dxSrc, int dySrc, UINT wFlags)
|
||||
{
|
||||
// Reah game transitions
|
||||
BOOL ret;
|
||||
OutTrace("DrawDibBegin: hdd=%x hdc=%x DEST size=(%d,%d) SRC size=(%d,%d) flags=%x\n",
|
||||
hdd, hdc, dxDest, dyDest, dxSrc, dySrc, wFlags);
|
||||
ret = (*pDrawDibBegin)(hdd, hdc, dxDest, dyDest, lpbi, dxSrc, dySrc, wFlags);
|
||||
return ret;
|
||||
}
|
||||
|
||||
BOOL WINAPI extDrawDibStart(HDRAWDIB hdd, LONG rate)
|
||||
{
|
||||
// Reah game transitions
|
||||
BOOL ret;
|
||||
OutTrace("DrawDibStart: hdd=%x rate=%x\n", hdd, rate);
|
||||
ret = (*pDrawDibStart)(hdd, rate);
|
||||
return ret;
|
||||
}
|
||||
|
||||
BOOL WINAPI extDrawDibStop(HDRAWDIB hdd)
|
||||
{
|
||||
// Reah game transitions
|
||||
BOOL ret;
|
||||
OutTrace("DrawDibStop: hdd=%x\n", hdd);
|
||||
ret = (*pDrawDibStop)(hdd);
|
||||
return ret;
|
||||
}
|
||||
|
||||
BOOL WINAPI extDrawDibEnd(HDRAWDIB hdd)
|
||||
{
|
||||
// Reah game transitions
|
||||
BOOL ret;
|
||||
OutTrace("DrawDibEnd: hdd=%x\n", hdd);
|
||||
ret = (*pDrawDibEnd)(hdd);
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
@ -620,7 +620,6 @@ BOOL WINAPI extInvalidateRect(HWND hwnd, RECT *lpRect, BOOL bErase)
|
||||
OutTraceDW("InvalidateRect: hwnd=%x rect=NULL erase=%x\n",
|
||||
hwnd, bErase);
|
||||
|
||||
|
||||
if(dxw.IsFullScreen()) {
|
||||
switch(GDIEmulationMode){
|
||||
case GDIMODE_STRETCHED:
|
||||
@ -2086,20 +2085,26 @@ HDC WINAPI extBeginPaint(HWND hwnd, LPPAINTSTRUCT lpPaint)
|
||||
// if not in fullscreen mode, that's all!
|
||||
if(!dxw.IsFullScreen()) return hdc;
|
||||
|
||||
// on CLIENTREMAPPING, resize the paint area to virtual screen size
|
||||
//if(dxw.dwFlags1 & CLIENTREMAPPING) lpPaint->rcPaint=dxw.GetScreenRect();
|
||||
if(dxw.dwFlags1 & CLIENTREMAPPING) dxw.UnmapClient(&(lpPaint->rcPaint));
|
||||
|
||||
switch(GDIEmulationMode){
|
||||
case GDIMODE_STRETCHED:
|
||||
break;
|
||||
case GDIMODE_EMULATED:
|
||||
HDC EmuHDC;
|
||||
EmuHDC = dxw.AcquireEmulatedDC(hwnd);
|
||||
lpPaint->hdc=EmuHDC;
|
||||
hdc = EmuHDC;
|
||||
break;
|
||||
if(bFlippedDC) {
|
||||
hdc = dxw.AcquireSharedDC(hwnd);
|
||||
}
|
||||
else {
|
||||
switch(GDIEmulationMode){
|
||||
case GDIMODE_STRETCHED:
|
||||
// on CLIENTREMAPPING, resize the paint area to virtual screen size
|
||||
//if(dxw.dwFlags1 & CLIENTREMAPPING) lpPaint->rcPaint=dxw.GetScreenRect();
|
||||
if(dxw.dwFlags1 & CLIENTREMAPPING) dxw.UnmapClient(&(lpPaint->rcPaint));
|
||||
break;
|
||||
case GDIMODE_EMULATED:
|
||||
HDC EmuHDC;
|
||||
EmuHDC = dxw.AcquireEmulatedDC(hwnd);
|
||||
lpPaint->hdc=EmuHDC;
|
||||
hdc = EmuHDC;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
OutTraceDW("GDI.BeginPaint: hdc=%x rcPaint=(%d,%d)-(%d,%d)\n",
|
||||
hdc, lpPaint->rcPaint.left, lpPaint->rcPaint.top, lpPaint->rcPaint.right, lpPaint->rcPaint.bottom);
|
||||
|
@ -339,12 +339,18 @@ MMRESULT WINAPI extjoyGetPosEx(DWORD uJoyID, LPJOYINFOEX pji)
|
||||
dwButtons = 0;
|
||||
if (GetKeyState(VK_LBUTTON) < 0) dwButtons |= JOY_BUTTON1;
|
||||
if (GetKeyState(VK_RBUTTON) < 0) dwButtons |= JOY_BUTTON2;
|
||||
if (GetKeyState(VK_MBUTTON) < 0) dwButtons |= JOY_BUTTON3;
|
||||
POINT pt;
|
||||
if(hwnd=dxw.GethWnd()){
|
||||
RECT client;
|
||||
POINT upleft = {0,0};
|
||||
(*pGetClientRect)(hwnd, &client);
|
||||
(*pClientToScreen)(hwnd, &upleft);
|
||||
if(dwButtons & JOY_BUTTON3){
|
||||
// center joystick ...
|
||||
dwButtons &= ~JOY_BUTTON3;
|
||||
(*pSetCursorPos)(upleft.x + (client.right >> 1), upleft.y + (client.bottom >> 1));
|
||||
}
|
||||
(*pGetCursorPos)(&pt);
|
||||
pt.x -= upleft.x;
|
||||
pt.y -= upleft.y;
|
||||
@ -391,7 +397,6 @@ static void ShowJoystick(LONG x, LONG y, DWORD dwButtons)
|
||||
RECT client;
|
||||
RECT win;
|
||||
POINT PrevViewPort;
|
||||
int StretchMode;
|
||||
|
||||
// don't show when system cursor is visible
|
||||
CURSORINFO ci;
|
||||
@ -422,16 +427,12 @@ static void ShowJoystick(LONG x, LONG y, DWORD dwButtons)
|
||||
|
||||
(*pGetWindowRect)(dxw.GethWnd(), &win);
|
||||
|
||||
//if(!pSetViewportOrgEx) pSetViewportOrgEx=SetViewportOrgEx;
|
||||
(*pSetViewportOrgEx)(hClientDC, 0, 0, &PrevViewPort);
|
||||
StretchMode=GetStretchBltMode(hClientDC);
|
||||
SetStretchBltMode(hClientDC, HALFTONE);
|
||||
int w, h;
|
||||
w=36;
|
||||
h=36;
|
||||
(*pGDIStretchBlt)(hClientDC, x-(w>>1), y-(h>>1), w, h, hdcMem, 0, 0, bm.bmWidth, bm.bmHeight, SRCCOPY);
|
||||
w=bm.bmWidth;
|
||||
h=bm.bmHeight;
|
||||
(*pGDIBitBlt)(hClientDC, x-(w>>1), y-(h>>1), w, h, hdcMem, 0, 0, SRCPAINT);
|
||||
|
||||
SetStretchBltMode(hClientDC, StretchMode);
|
||||
(*pSetViewportOrgEx)(hClientDC, PrevViewPort.x, PrevViewPort.y, NULL);
|
||||
SelectObject(hdcMem, hbmOld);
|
||||
DeleteDC(hdcMem);
|
||||
|
Binary file not shown.
Binary file not shown.
Loading…
x
Reference in New Issue
Block a user