mirror of
https://github.com/DxWnd/DxWnd.reloaded
synced 2024-12-30 09:25:35 +01:00
v2_02_00
Former-commit-id: 4aa4aecda3c03386a0a020debb1cec6d3f877331
This commit is contained in:
parent
caa3532608
commit
72f5bb48ce
@ -1,4 +1,5 @@
|
|||||||
#include <ddraw.h>
|
#include <ddraw.h>
|
||||||
|
//#include "dxwcore.hpp"
|
||||||
|
|
||||||
#define DXW_IDLE 0
|
#define DXW_IDLE 0
|
||||||
#define DXW_ACTIVE 1
|
#define DXW_ACTIVE 1
|
||||||
@ -8,7 +9,7 @@
|
|||||||
|
|
||||||
#define DXWACTIVATESINGLETASK 1 // comment to allow multiple task activations
|
#define DXWACTIVATESINGLETASK 1 // comment to allow multiple task activations
|
||||||
|
|
||||||
// first flags DWORD dwFlags:
|
// first flags DWORD dwFlags1:
|
||||||
#define UNNOTIFY 0x00000001
|
#define UNNOTIFY 0x00000001
|
||||||
#define EMULATESURFACE 0x00000002
|
#define EMULATESURFACE 0x00000002
|
||||||
#define CLIPCURSOR 0x00000004 // Force cursor clipping within window
|
#define CLIPCURSOR 0x00000004 // Force cursor clipping within window
|
||||||
@ -42,7 +43,7 @@
|
|||||||
#define HOOKCHILDWIN 0x40000000 // hook CHILD windows to alter placement coordinates (UNUSED)
|
#define HOOKCHILDWIN 0x40000000 // hook CHILD windows to alter placement coordinates (UNUSED)
|
||||||
#define MESSAGEPROC 0x80000000 // process peek/get messages
|
#define MESSAGEPROC 0x80000000 // process peek/get messages
|
||||||
|
|
||||||
// second flags DWORD dwFlags2:
|
// second flags DWORD dxw.dwFlags2:
|
||||||
#define RECOVERSCREENMODE 0x00000001 // actively set screen mode to initial state after hooking
|
#define RECOVERSCREENMODE 0x00000001 // actively set screen mode to initial state after hooking
|
||||||
#define REFRESHONRESIZE 0x00000002 // forces a refresh (blitting from backbuffer to primary) upon win resize
|
#define REFRESHONRESIZE 0x00000002 // forces a refresh (blitting from backbuffer to primary) upon win resize
|
||||||
#define BACKBUFATTACH 0x00000004 // sets backbuf wxh dim. equal to primary surface so that ZBUFFER is attachable.....
|
#define BACKBUFATTACH 0x00000004 // sets backbuf wxh dim. equal to primary surface so that ZBUFFER is attachable.....
|
||||||
@ -103,16 +104,6 @@ typedef struct
|
|||||||
BOOL isLogging;
|
BOOL isLogging;
|
||||||
} DXWNDSTATUS;
|
} DXWNDSTATUS;
|
||||||
|
|
||||||
typedef struct
|
|
||||||
{
|
|
||||||
// (full)screen width & height
|
|
||||||
DWORD dwWidth, dwHeight;
|
|
||||||
DDPIXELFORMAT PixelFormat;
|
|
||||||
DWORD dwPrimarySurfaceCaps;
|
|
||||||
DWORD dwBackBufferCount;
|
|
||||||
} ScreenDef_Type;
|
|
||||||
|
|
||||||
extern ScreenDef_Type ActualScr, VirtualScr;
|
|
||||||
extern DXWNDSTATUS DxWndStatus;
|
extern DXWNDSTATUS DxWndStatus;
|
||||||
|
|
||||||
int SetTarget(TARGETMAP *);
|
int SetTarget(TARGETMAP *);
|
||||||
@ -132,25 +123,24 @@ LRESULT CALLBACK extWindowProc(HWND, UINT, WPARAM, LPARAM);
|
|||||||
|
|
||||||
// defines below to condition debug message handling
|
// defines below to condition debug message handling
|
||||||
|
|
||||||
#define OutTraceW if(dwTFlags & OUTWINMESSAGES) OutTrace
|
#define OutTraceW if(dxw.dwTFlags & OUTWINMESSAGES) OutTrace
|
||||||
#define OutTraceX if(dwTFlags & OUTPROXYTRACE) OutTrace
|
#define OutTraceX if(dxw.dwTFlags & OUTPROXYTRACE) OutTrace
|
||||||
#define OutTraceD if(dwTFlags & OUTDDRAWTRACE) OutTrace
|
#define OutTraceD if(dxw.dwTFlags & OUTDDRAWTRACE) OutTrace
|
||||||
#define OutTraceC if(dwTFlags & OUTCURSORTRACE) OutTrace
|
#define OutTraceC if(dxw.dwTFlags & OUTCURSORTRACE) OutTrace
|
||||||
#define OutTraceP OutTrace
|
#define OutTraceP OutTrace
|
||||||
#define OutTraceE OutTrace
|
#define OutTraceE OutTrace
|
||||||
|
|
||||||
#define IsTraceW (dwTFlags & OUTWINMESSAGES)
|
#define IsTraceW (dxw.dwTFlags & OUTWINMESSAGES)
|
||||||
#define IsTraceX (dwTFlags & OUTPROXYTRACE)
|
#define IsTraceX (dxw.dwTFlags & OUTPROXYTRACE)
|
||||||
#define IsTraceD (dwTFlags & OUTDDRAWTRACE)
|
#define IsTraceD (dxw.dwTFlags & OUTDDRAWTRACE)
|
||||||
#define IsTraceC (dwTFlags & OUTCURSORTRACE)
|
#define IsTraceC (dxw.dwTFlags & OUTCURSORTRACE)
|
||||||
#define IsTraceP (TRUE)
|
#define IsTraceP (TRUE)
|
||||||
#define IsTraceE (TRUE)
|
#define IsTraceE (TRUE)
|
||||||
#define IsDebug (dwTFlags & OUTDEBUG)
|
#define IsDebug (dxw.dwTFlags & OUTDEBUG)
|
||||||
#define IsAssertEnabled (dwTFlags & ASSERTDIALOG)
|
#define IsAssertEnabled (dxw.dwTFlags & ASSERTDIALOG)
|
||||||
|
#define STEP OutTrace("STEP at %s:%d\n", __MODULE__, __LINE__)
|
||||||
|
|
||||||
extern void WhndStackPush(HWND, WNDPROC);
|
extern void WhndStackPush(HWND, WNDPROC);
|
||||||
extern WNDPROC WhndGetWindowProc(HWND );
|
extern WNDPROC WhndGetWindowProc(HWND );
|
||||||
extern DWORD dwFlags, dwFlags2, dwTFlags;
|
|
||||||
|
|
||||||
#define debugstep OutTrace("STEP at %d\n", __LINE__)
|
|
||||||
|
|
||||||
|
@ -1,3 +1,3 @@
|
|||||||
version https://git-lfs.github.com/spec/v1
|
version https://git-lfs.github.com/spec/v1
|
||||||
oid sha256:45ea0ab9cba93c39da05d08c0c2a8798c647186d5882dfdc679e1ab2bf3b4e25
|
oid sha256:2556cf08b2c38ff21834f13e3202ea976936eefd2b5b2da3ce11fc1d878f633a
|
||||||
size 266240
|
size 259072
|
||||||
|
@ -1,3 +1,3 @@
|
|||||||
version https://git-lfs.github.com/spec/v1
|
version https://git-lfs.github.com/spec/v1
|
||||||
oid sha256:2d61f3984a2545612ddb0ea7cb3dca19bbf5cfe4b12acdd6c61de8b85816692a
|
oid sha256:d0ef26bafd26df050cec17c30948cf719a91fd7eb300bdca5a069410c76f5928
|
||||||
size 483328
|
size 482816
|
||||||
|
@ -1,35 +0,0 @@
|
|||||||
[target]
|
|
||||||
title0=The Grinch
|
|
||||||
path0=D:\Games\The_Grinch\The Grinch\bin\TheGrinch.exe
|
|
||||||
module0=
|
|
||||||
ver0=10
|
|
||||||
flag0=536870914
|
|
||||||
flagg0=16
|
|
||||||
tflag0=0
|
|
||||||
initx0=0
|
|
||||||
inity0=0
|
|
||||||
minx0=0
|
|
||||||
miny0=0
|
|
||||||
maxx0=0
|
|
||||||
maxy0=0
|
|
||||||
posx0=50
|
|
||||||
posy0=50
|
|
||||||
sizx0=800
|
|
||||||
sizy0=600
|
|
||||||
title1=7th Legion
|
|
||||||
path1=D:\Games\7th Legion\legion.exe
|
|
||||||
module1=
|
|
||||||
ver1=0
|
|
||||||
flag1=16418
|
|
||||||
flagg1=2128
|
|
||||||
tflag1=0
|
|
||||||
initx1=0
|
|
||||||
inity1=0
|
|
||||||
minx1=0
|
|
||||||
miny1=0
|
|
||||||
maxx1=0
|
|
||||||
maxy1=0
|
|
||||||
posx1=50
|
|
||||||
posy1=50
|
|
||||||
sizx1=800
|
|
||||||
sizy1=600
|
|
3197
debug/dxwnd.ini
Normal file
3197
debug/dxwnd.ini
Normal file
File diff suppressed because it is too large
Load Diff
@ -2,6 +2,7 @@
|
|||||||
#include <ddraw.h>
|
#include <ddraw.h>
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include "dxwnd.h"
|
#include "dxwnd.h"
|
||||||
|
#include "dxwcore.hpp"
|
||||||
#include "hddraw.h"
|
#include "hddraw.h"
|
||||||
|
|
||||||
typedef HRESULT (WINAPI *Lock_Type)(LPDIRECTDRAWSURFACE, LPRECT, LPDIRECTDRAWSURFACE, DWORD, HANDLE);
|
typedef HRESULT (WINAPI *Lock_Type)(LPDIRECTDRAWSURFACE, LPRECT, LPDIRECTDRAWSURFACE, DWORD, HANDLE);
|
||||||
@ -13,8 +14,6 @@ extern Unlock4_Type pUnlockMethod(LPDIRECTDRAWSURFACE);
|
|||||||
|
|
||||||
extern DWORD PaletteEntries[256];
|
extern DWORD PaletteEntries[256];
|
||||||
extern DWORD *Palette16BPP;
|
extern DWORD *Palette16BPP;
|
||||||
extern DWORD dwDDVersion;
|
|
||||||
extern DWORD dwFlags;
|
|
||||||
extern char *ExplainDDError(DWORD);
|
extern char *ExplainDDError(DWORD);
|
||||||
extern int Set_dwSize_From_Surface(LPDIRECTDRAWSURFACE);
|
extern int Set_dwSize_From_Surface(LPDIRECTDRAWSURFACE);
|
||||||
|
|
||||||
@ -156,7 +155,7 @@ static HRESULT WINAPI EmuBlt_16_to_32(LPDIRECTDRAWSURFACE lpddsdst, LPRECT lpdes
|
|||||||
if (!Palette16BPP) { // first time through .....
|
if (!Palette16BPP) { // first time through .....
|
||||||
unsigned int pi;
|
unsigned int pi;
|
||||||
Palette16BPP = (DWORD *)malloc(0x10000 * sizeof(DWORD));
|
Palette16BPP = (DWORD *)malloc(0x10000 * sizeof(DWORD));
|
||||||
if (dwFlags & USERGB565){
|
if (dxw.dwFlags1 & USERGB565){
|
||||||
for (pi=0; pi<0x10000; pi++) {
|
for (pi=0; pi<0x10000; pi++) {
|
||||||
Palette16BPP[pi]=(pi & 0x1F)<<3 | (pi & 0x7E0)<<5 | (pi & 0xF800)<<8; // RGB565
|
Palette16BPP[pi]=(pi & 0x1F)<<3 | (pi & 0x7E0)<<5 | (pi & 0xF800)<<8; // RGB565
|
||||||
}
|
}
|
||||||
@ -285,7 +284,7 @@ static HRESULT WINAPI EmuBlt_32_to_32(LPDIRECTDRAWSURFACE lpddsdst, LPRECT lpdes
|
|||||||
|
|
||||||
memset(&ddsd_dst,0,sizeof(DDSURFACEDESC2));
|
memset(&ddsd_dst,0,sizeof(DDSURFACEDESC2));
|
||||||
ddsd_dst.dwSize = Set_dwSize_From_Surface(lpddsdst);
|
ddsd_dst.dwSize = Set_dwSize_From_Surface(lpddsdst);
|
||||||
ddsd_dst.dwFlags = DDSD_LPSURFACE | DDSD_PITCH;
|
ddsd_dst.dxw.dwFlags1 = DDSD_LPSURFACE | DDSD_PITCH;
|
||||||
if(res=(*pLock)(lpddsdst, 0, (LPDIRECTDRAWSURFACE)&ddsd_dst, DDLOCK_SURFACEMEMORYPTR|DDLOCK_WRITEONLY|DDLOCK_WAIT, 0)){
|
if(res=(*pLock)(lpddsdst, 0, (LPDIRECTDRAWSURFACE)&ddsd_dst, DDLOCK_SURFACEMEMORYPTR|DDLOCK_WRITEONLY|DDLOCK_WAIT, 0)){
|
||||||
OutTraceE("EmuBlt32_32: Lock ERROR res=%x(%s) at %d\n", res, ExplainDDError(res), __LINE__);
|
OutTraceE("EmuBlt32_32: Lock ERROR res=%x(%s) at %d\n", res, ExplainDDError(res), __LINE__);
|
||||||
return res;
|
return res;
|
||||||
@ -293,7 +292,7 @@ static HRESULT WINAPI EmuBlt_32_to_32(LPDIRECTDRAWSURFACE lpddsdst, LPRECT lpdes
|
|||||||
|
|
||||||
memset(&ddsd_src,0,sizeof(DDSURFACEDESC2));
|
memset(&ddsd_src,0,sizeof(DDSURFACEDESC2));
|
||||||
ddsd_src.dwSize = Set_dwSize_From_Surface(lpddssrc);
|
ddsd_src.dwSize = Set_dwSize_From_Surface(lpddssrc);
|
||||||
ddsd_src.dwFlags = DDSD_LPSURFACE | DDSD_PITCH;
|
ddsd_src.dxw.dwFlags1 = DDSD_LPSURFACE | DDSD_PITCH;
|
||||||
if (lpsurface) { // already locked, just get info ....
|
if (lpsurface) { // already locked, just get info ....
|
||||||
if(res=lpddssrc->GetSurfaceDesc((LPDDSURFACEDESC)&ddsd_src)) {
|
if(res=lpddssrc->GetSurfaceDesc((LPDDSURFACEDESC)&ddsd_src)) {
|
||||||
OutTraceE("EmuBlt32_32: GetSurfaceDesc ERROR res=%x(%s) at %d\n", res, ExplainDDError(res), __LINE__);
|
OutTraceE("EmuBlt32_32: GetSurfaceDesc ERROR res=%x(%s) at %d\n", res, ExplainDDError(res), __LINE__);
|
||||||
@ -846,15 +845,15 @@ static HRESULT WINAPI RevBlt_Null(LPDIRECTDRAWSURFACE lpddsdst, LPRECT lpdestrec
|
|||||||
void SetBltTransformations()
|
void SetBltTransformations()
|
||||||
{
|
{
|
||||||
OutTraceD("SetBltTransformations: color transformation %d->%d\n",
|
OutTraceD("SetBltTransformations: color transformation %d->%d\n",
|
||||||
VirtualScr.PixelFormat.dwRGBBitCount, ActualScr.PixelFormat.dwRGBBitCount);
|
dxw.VirtualPixelFormat.dwRGBBitCount, dxw.ActualPixelFormat.dwRGBBitCount);
|
||||||
|
|
||||||
/* default (bad) setting */
|
/* default (bad) setting */
|
||||||
pRevBlt=RevBlt_Null;
|
pRevBlt=RevBlt_Null;
|
||||||
pEmuBlt=EmuBlt_Null;
|
pEmuBlt=EmuBlt_Null;
|
||||||
|
|
||||||
switch (ActualScr.PixelFormat.dwRGBBitCount){
|
switch (dxw.ActualPixelFormat.dwRGBBitCount){
|
||||||
case 32:
|
case 32:
|
||||||
switch(VirtualScr.PixelFormat.dwRGBBitCount){
|
switch(dxw.VirtualPixelFormat.dwRGBBitCount){
|
||||||
case 8:
|
case 8:
|
||||||
pRevBlt=RevBlt_32_to_8;
|
pRevBlt=RevBlt_32_to_8;
|
||||||
pEmuBlt=EmuBlt_8_to_32;
|
pEmuBlt=EmuBlt_8_to_32;
|
||||||
@ -875,12 +874,12 @@ void SetBltTransformations()
|
|||||||
OutTraceD("set color transformation 32->32\n");
|
OutTraceD("set color transformation 32->32\n");
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
OutTraceD("unsupported color transformation %d->32\n", VirtualScr.PixelFormat.dwRGBBitCount);
|
OutTraceD("unsupported color transformation %d->32\n", dxw.VirtualPixelFormat.dwRGBBitCount);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case 16:
|
case 16:
|
||||||
switch(VirtualScr.PixelFormat.dwRGBBitCount){
|
switch(dxw.VirtualPixelFormat.dwRGBBitCount){
|
||||||
case 8:
|
case 8:
|
||||||
pRevBlt=RevBlt_16_to_8;
|
pRevBlt=RevBlt_16_to_8;
|
||||||
pEmuBlt=EmuBlt_8_to_16;
|
pEmuBlt=EmuBlt_8_to_16;
|
||||||
@ -900,14 +899,14 @@ void SetBltTransformations()
|
|||||||
pEmuBlt=EmuBlt_32_to_16;
|
pEmuBlt=EmuBlt_32_to_16;
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
OutTraceD("unsupported color transformation %d->16\n", VirtualScr.PixelFormat.dwRGBBitCount);
|
OutTraceD("unsupported color transformation %d->16\n", dxw.VirtualPixelFormat.dwRGBBitCount);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
OutTraceD("unsupported color transformation %d->%d\n",
|
OutTraceD("unsupported color transformation %d->%d\n",
|
||||||
VirtualScr.PixelFormat.dwRGBBitCount,
|
dxw.VirtualPixelFormat.dwRGBBitCount,
|
||||||
ActualScr.PixelFormat.dwRGBBitCount);
|
dxw.ActualPixelFormat.dwRGBBitCount);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
return;
|
return;
|
||||||
|
322
dll/dxhook.cpp
322
dll/dxhook.cpp
@ -6,16 +6,17 @@
|
|||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include <stdarg.h>
|
#include <stdarg.h>
|
||||||
#include "dxwnd.h"
|
#include "dxwnd.h"
|
||||||
|
#include "dxwcore.hpp"
|
||||||
#include "dxhook.h"
|
#include "dxhook.h"
|
||||||
#include "glhook.h"
|
#include "glhook.h"
|
||||||
#include "syslibs.h"
|
#include "syslibs.h"
|
||||||
#include "dxhelper.h"
|
#include "dxhelper.h"
|
||||||
|
|
||||||
|
dxwCore dxw;
|
||||||
|
|
||||||
extern BOOL MakeWindowTransparent(HWND, unsigned char);
|
extern BOOL MakeWindowTransparent(HWND, unsigned char);
|
||||||
|
|
||||||
extern void dx_ScreenRefresh();
|
|
||||||
extern void InitScreenParameters();
|
extern void InitScreenParameters();
|
||||||
//extern char *ExplainStyle(DWORD);
|
|
||||||
|
|
||||||
int WINAPI extGetDeviceCaps(HDC, int);
|
int WINAPI extGetDeviceCaps(HDC, int);
|
||||||
BOOL WINAPI extGetCursorPos(LPPOINT);
|
BOOL WINAPI extGetCursorPos(LPPOINT);
|
||||||
@ -108,16 +109,6 @@ extern BOOL WINAPI extSetDeviceGammaRamp(HDC, LPVOID);
|
|||||||
extern BOOL WINAPI extGetDeviceGammaRamp(HDC, LPVOID);
|
extern BOOL WINAPI extGetDeviceGammaRamp(HDC, LPVOID);
|
||||||
extern LRESULT WINAPI extSendMessage(HWND, UINT, WPARAM, LPARAM);
|
extern LRESULT WINAPI extSendMessage(HWND, UINT, WPARAM, LPARAM);
|
||||||
|
|
||||||
|
|
||||||
DWORD dwFlags;
|
|
||||||
DWORD dwFlags2;
|
|
||||||
DWORD dwTFlags;
|
|
||||||
DWORD dwVersion=0;
|
|
||||||
BOOL bActive = 1;
|
|
||||||
BOOL Filler = 99;
|
|
||||||
HWND hWnd = 0;
|
|
||||||
HWND hParentWnd = 0;
|
|
||||||
HWND hChildWnd = 0;
|
|
||||||
extern HANDLE hTraceMutex;
|
extern HANDLE hTraceMutex;
|
||||||
char *gsModules;
|
char *gsModules;
|
||||||
|
|
||||||
@ -234,9 +225,9 @@ static void OutTraceHeader(FILE *fp)
|
|||||||
fprintf(fp, "*** DxWnd %s log BEGIN: %02d-%02d-%04d %02d:%02d:%02d ***\n",
|
fprintf(fp, "*** DxWnd %s log BEGIN: %02d-%02d-%04d %02d:%02d:%02d ***\n",
|
||||||
Version, Time.wDay, Time.wMonth, Time.wYear, Time.wHour, Time.wMinute, Time.wSecond);
|
Version, Time.wDay, Time.wMonth, Time.wYear, Time.wHour, Time.wMinute, Time.wSecond);
|
||||||
fprintf(fp, "*** Flags= ");
|
fprintf(fp, "*** Flags= ");
|
||||||
for(i=0, dword=dwFlags; i<32; i++, dword>>=1) if(dword & 0x1) fprintf(fp, "%s ", FlagNames[i]);
|
for(i=0, dword=dxw.dwFlags1; i<32; i++, dword>>=1) if(dword & 0x1) fprintf(fp, "%s ", FlagNames[i]);
|
||||||
for(i=0, dword=dwFlags2; i<32; i++, dword>>=1) if(dword & 0x1) fprintf(fp, "%s ", Flag2Names[i]);
|
for(i=0, dword=dxw.dwFlags2; i<32; i++, dword>>=1) if(dword & 0x1) fprintf(fp, "%s ", Flag2Names[i]);
|
||||||
for(i=0, dword=dwTFlags; i<32; i++, dword>>=1) if(dword & 0x1) fprintf(fp, "%s ", TFlagNames[i]);
|
for(i=0, dword=dxw.dwTFlags; i<32; i++, dword>>=1) if(dword & 0x1) fprintf(fp, "%s ", TFlagNames[i]);
|
||||||
fprintf(fp, "***\n");
|
fprintf(fp, "***\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -247,7 +238,7 @@ void OutTrace(const char *format, ...)
|
|||||||
static FILE *fp=NULL; // GHO: thread safe???
|
static FILE *fp=NULL; // GHO: thread safe???
|
||||||
|
|
||||||
// check global log flag
|
// check global log flag
|
||||||
if(!(dwTFlags & OUTTRACE)) return;
|
if(!(dxw.dwTFlags & OUTTRACE)) return;
|
||||||
|
|
||||||
WaitForSingleObject(hTraceMutex, INFINITE);
|
WaitForSingleObject(hTraceMutex, INFINITE);
|
||||||
if (fp == NULL){
|
if (fp == NULL){
|
||||||
@ -260,7 +251,7 @@ void OutTrace(const char *format, ...)
|
|||||||
fp = fopen(path, "a+");
|
fp = fopen(path, "a+");
|
||||||
}
|
}
|
||||||
if (fp==NULL){ // last chance: do not log...
|
if (fp==NULL){ // last chance: do not log...
|
||||||
dwTFlags &= ~OUTTRACE; // turn flag OFF
|
dxw.dwTFlags &= ~OUTTRACE; // turn flag OFF
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
@ -277,15 +268,15 @@ void OutTrace(const char *format, ...)
|
|||||||
static void dx_ToggleLogging()
|
static void dx_ToggleLogging()
|
||||||
{
|
{
|
||||||
// toggle LOGGING
|
// toggle LOGGING
|
||||||
if(dwTFlags & OUTTRACE){
|
if(dxw.dwTFlags & OUTTRACE){
|
||||||
OutTraceD("Toggle logging OFF\n");
|
OutTraceD("Toggle logging OFF\n");
|
||||||
dwTFlags &= ~OUTTRACE;
|
dxw.dwTFlags &= ~OUTTRACE;
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
dwTFlags |= OUTTRACE;
|
dxw.dwTFlags |= OUTTRACE;
|
||||||
OutTraceD("Toggle logging ON\n");
|
OutTraceD("Toggle logging ON\n");
|
||||||
}
|
}
|
||||||
DxWndStatus.isLogging=(dwTFlags & OUTTRACE);
|
DxWndStatus.isLogging=(dxw.dwTFlags & OUTTRACE);
|
||||||
SetHookStatus(&DxWndStatus);
|
SetHookStatus(&DxWndStatus);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -555,109 +546,6 @@ void SetHook(void *target, void *hookproc, void **hookedproc, char *hookname)
|
|||||||
*hookedproc = tmp;
|
*hookedproc = tmp;
|
||||||
}
|
}
|
||||||
|
|
||||||
// v2.1.93: FixCursorPos completely revised to introduce a clipping tolerance in
|
|
||||||
// clipping regions as well as in normal operations
|
|
||||||
|
|
||||||
#define CLIP_TOLERANCE 4
|
|
||||||
|
|
||||||
static POINT FixCursorPos(HWND hwnd, POINT prev)
|
|
||||||
{
|
|
||||||
POINT curr;
|
|
||||||
RECT rect;
|
|
||||||
extern LPRECT lpClipRegion;
|
|
||||||
|
|
||||||
curr=prev;
|
|
||||||
|
|
||||||
// scale mouse coordinates
|
|
||||||
// remember: rect from GetClientRect always start at 0,0!
|
|
||||||
if(dwFlags & MODIFYMOUSE){
|
|
||||||
if (!(*pGetClientRect)(hwnd, &rect)) {
|
|
||||||
OutTraceD("GetClientRect ERROR %d at %d\n", GetLastError(),__LINE__);
|
|
||||||
curr.x = curr.y = 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (rect.right) curr.x = (curr.x * VirtualScr.dwWidth) / rect.right;
|
|
||||||
if (rect.bottom) curr.y = (curr.y * VirtualScr.dwHeight) / rect.bottom;
|
|
||||||
}
|
|
||||||
|
|
||||||
if((dwFlags & ENABLECLIPPING) && lpClipRegion){
|
|
||||||
// v2.1.93:
|
|
||||||
// in clipping mode, avoid the cursor position to lay outside the valid rect
|
|
||||||
// note 1: the rect follow the convention and valid coord lay between left to righ-1,
|
|
||||||
// top to bottom-1
|
|
||||||
// note 2: CLIP_TOLERANCE is meant to handle possible integer divide tolerance errors
|
|
||||||
// that may prevent reaching the clip rect borders. The smaller you shrink the window,
|
|
||||||
// the bigger tolerance is required
|
|
||||||
if (curr.x < lpClipRegion->left+CLIP_TOLERANCE) curr.x=lpClipRegion->left;
|
|
||||||
if (curr.y < lpClipRegion->top+CLIP_TOLERANCE) curr.y=lpClipRegion->top;
|
|
||||||
if (curr.x >= lpClipRegion->right-CLIP_TOLERANCE) curr.x=lpClipRegion->right-1;
|
|
||||||
if (curr.y >= lpClipRegion->bottom-CLIP_TOLERANCE) curr.y=lpClipRegion->bottom-1;
|
|
||||||
}
|
|
||||||
else{
|
|
||||||
if (curr.x < CLIP_TOLERANCE) curr.x=0;
|
|
||||||
if (curr.y < CLIP_TOLERANCE) curr.y=0;
|
|
||||||
if (curr.x >= (LONG)VirtualScr.dwWidth-CLIP_TOLERANCE) curr.x=VirtualScr.dwWidth-1;
|
|
||||||
if (curr.y >= (LONG)VirtualScr.dwHeight-CLIP_TOLERANCE) curr.y=VirtualScr.dwHeight-1;
|
|
||||||
}
|
|
||||||
|
|
||||||
return curr;
|
|
||||||
}
|
|
||||||
|
|
||||||
static void FixNCHITCursorPos(LPPOINT lppoint)
|
|
||||||
{
|
|
||||||
RECT rect;
|
|
||||||
POINT point;
|
|
||||||
|
|
||||||
point=*lppoint;
|
|
||||||
(*pGetClientRect)(hWnd, &rect);
|
|
||||||
(*pScreenToClient)(hWnd, &point);
|
|
||||||
|
|
||||||
if (point.x < 0) return;
|
|
||||||
if (point.y < 0) return;
|
|
||||||
if (point.x > rect.right) return;
|
|
||||||
if (point.y > rect.bottom) return;
|
|
||||||
|
|
||||||
*lppoint=point;
|
|
||||||
lppoint->x = (lppoint->x * VirtualScr.dwWidth) / rect.right;
|
|
||||||
lppoint->y = (lppoint->y * VirtualScr.dwHeight) / rect.bottom;
|
|
||||||
if(lppoint->x < CLIP_TOLERANCE) lppoint->x=0;
|
|
||||||
if(lppoint->y < CLIP_TOLERANCE) lppoint->y=0;
|
|
||||||
if(lppoint->x > (LONG)VirtualScr.dwWidth-CLIP_TOLERANCE) lppoint->x=VirtualScr.dwWidth-1;
|
|
||||||
if(lppoint->y > (LONG)VirtualScr.dwHeight-CLIP_TOLERANCE) lppoint->y=VirtualScr.dwHeight-1;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
void DxWndSetClipCursor()
|
|
||||||
{
|
|
||||||
RECT Rect;
|
|
||||||
POINT UpLeftCorner;
|
|
||||||
|
|
||||||
OutTraceD("DxWndSetClipCursor:\n");
|
|
||||||
if (hWnd==NULL) {
|
|
||||||
OutTraceD("DxWndSetClipCursor: ASSERT hWnd==NULL\n");
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
(*pGetClientRect)(hWnd, &Rect);
|
|
||||||
UpLeftCorner.x=UpLeftCorner.y=0;
|
|
||||||
(*pClientToScreen)(hWnd, &UpLeftCorner);
|
|
||||||
Rect.left+=UpLeftCorner.x;
|
|
||||||
Rect.right+=UpLeftCorner.x;
|
|
||||||
Rect.top+=UpLeftCorner.y;
|
|
||||||
Rect.bottom+=UpLeftCorner.y;
|
|
||||||
(*pClipCursor)(NULL);
|
|
||||||
if(!(*pClipCursor)(&Rect)){
|
|
||||||
OutTraceE("ClipCursor: ERROR err=%d at %d\n", GetLastError(), __LINE__);
|
|
||||||
}
|
|
||||||
OutTraceD("DxWndSetClipCursor: rect=(%d,%d)-(%d,%d)\n",
|
|
||||||
Rect.left, Rect.top, Rect.right, Rect.bottom);
|
|
||||||
}
|
|
||||||
|
|
||||||
void DxWndEraseClipCursor()
|
|
||||||
{
|
|
||||||
OutTraceD("DxWndEraseClipCursor:\n");
|
|
||||||
(*pClipCursor)(NULL);
|
|
||||||
}
|
|
||||||
|
|
||||||
// v.2.1.80: unified positioning logic into CalculateWindowPos routine
|
// v.2.1.80: unified positioning logic into CalculateWindowPos routine
|
||||||
// now taking in account for window menus (see "Alien Cabal")
|
// now taking in account for window menus (see "Alien Cabal")
|
||||||
|
|
||||||
@ -718,11 +606,10 @@ void AdjustWindowFrame(HWND hwnd, DWORD width, DWORD height)
|
|||||||
|
|
||||||
OutTraceD("AdjustWindowFrame hwnd=%x, wxh=%dx%d\n", hwnd, width, height);
|
OutTraceD("AdjustWindowFrame hwnd=%x, wxh=%dx%d\n", hwnd, width, height);
|
||||||
|
|
||||||
if (width) VirtualScr.dwWidth = width;
|
dxw.SetScreenSize(width, height);
|
||||||
if (height) VirtualScr.dwHeight = height;
|
|
||||||
if (hwnd==NULL) return;
|
if (hwnd==NULL) return;
|
||||||
|
|
||||||
(*pSetWindowLong)(hwnd, GWL_STYLE, (dwFlags2 & MODALSTYLE) ? 0 : WS_OVERLAPPEDWINDOW);
|
(*pSetWindowLong)(hwnd, GWL_STYLE, (dxw.dwFlags2 & MODALSTYLE) ? 0 : WS_OVERLAPPEDWINDOW);
|
||||||
(*pSetWindowLong)(hwnd, GWL_EXSTYLE, 0);
|
(*pSetWindowLong)(hwnd, GWL_EXSTYLE, 0);
|
||||||
(*pShowWindow)(hwnd, SW_SHOWNORMAL);
|
(*pShowWindow)(hwnd, SW_SHOWNORMAL);
|
||||||
OutTraceD("AdjustWindowFrame hwnd=%x, set style=WS_OVERLAPPEDWINDOW extstyle=0\n", hwnd);
|
OutTraceD("AdjustWindowFrame hwnd=%x, set style=WS_OVERLAPPEDWINDOW extstyle=0\n", hwnd);
|
||||||
@ -749,10 +636,10 @@ void AdjustWindowFrame(HWND hwnd, DWORD width, DWORD height)
|
|||||||
|
|
||||||
// fixing cursor view and clipping region
|
// fixing cursor view and clipping region
|
||||||
|
|
||||||
if (dwFlags & HIDEHWCURSOR) while (ShowCursor(0) >= 0);
|
if (dxw.dwFlags1 & HIDEHWCURSOR) while (ShowCursor(0) >= 0);
|
||||||
if (dwFlags & CLIPCURSOR) {
|
if (dxw.dwFlags1 & CLIPCURSOR) {
|
||||||
OutTraceD("AdjustWindowFrame: setting clip region\n");
|
OutTraceD("AdjustWindowFrame: setting clip region\n");
|
||||||
DxWndSetClipCursor();
|
dxw.SetClipCursor();
|
||||||
}
|
}
|
||||||
|
|
||||||
(*pInvalidateRect)(hwnd, NULL, TRUE);
|
(*pInvalidateRect)(hwnd, NULL, TRUE);
|
||||||
@ -792,36 +679,9 @@ LRESULT CALLBACK extChildWindowProc(HWND hwnd, UINT message, WPARAM wparam, LPAR
|
|||||||
static int i=0;
|
static int i=0;
|
||||||
static WINDOWPOS *wp;
|
static WINDOWPOS *wp;
|
||||||
WNDPROC pWindowProc;
|
WNDPROC pWindowProc;
|
||||||
extern BOOL isFullScreen;
|
|
||||||
|
|
||||||
OutTraceW("DEBUG: ChildWinMsg [0x%x]%s(%x,%x)\n", message, ExplainWinMessage(message), wparam, lparam);
|
OutTraceW("DEBUG: ChildWinMsg [0x%x]%s(%x,%x)\n", message, ExplainWinMessage(message), wparam, lparam);
|
||||||
switch(message){
|
switch(message){
|
||||||
#if 0
|
|
||||||
// deleted after interception of MoveWindow API with WS_CHILD special case.
|
|
||||||
// don't make the same compensation twice!!!
|
|
||||||
case WM_WINDOWPOSCHANGING:
|
|
||||||
{
|
|
||||||
// WINDOWPOS coordinates update for Age of Empires I & II edit controls.
|
|
||||||
WINDOWPOS *wp;
|
|
||||||
RECT rect;
|
|
||||||
wp = (LPWINDOWPOS)lparam;
|
|
||||||
OutTraceD("ChildWindowProc: WM_WINDOWPOSCHANGING pos=(%d,%d) size=(%d,%d)\n",
|
|
||||||
wp->x, wp->y, wp->cx, wp->cy);
|
|
||||||
if(isFullScreen){
|
|
||||||
// scale coordinates
|
|
||||||
if (!(*pGetClientRect)(hWnd, &rect)) { // note! hWnd, the main form. Fixed again v70
|
|
||||||
OutTraceE("GetClientRect ERROR %d at %d\n", GetLastError(),__LINE__);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
wp->x = (wp->x * rect.right) / VirtualScr.dwWidth;
|
|
||||||
wp->cx = (wp->cx * rect.right) / VirtualScr.dwWidth;
|
|
||||||
wp->y = (wp->y * rect.bottom) / VirtualScr.dwHeight;
|
|
||||||
wp->cy = (wp->cy * rect.bottom) / VirtualScr.dwHeight;
|
|
||||||
OutTraceD("ChildWindowProc: fixed pos=(%d,%d) size=(%d,%d)\n", wp->x, wp->y, wp->cx, wp->cy);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
#endif
|
|
||||||
|
|
||||||
// Cybermercs: it seems that all game menus are conveniently handled by the WindowProc routine,
|
// Cybermercs: it seems that all game menus are conveniently handled by the WindowProc routine,
|
||||||
// while the action screen get messages processed by the ChildWindowProc, that needs some different
|
// while the action screen get messages processed by the ChildWindowProc, that needs some different
|
||||||
@ -839,13 +699,13 @@ LRESULT CALLBACK extChildWindowProc(HWND hwnd, UINT message, WPARAM wparam, LPAR
|
|||||||
case WM_MBUTTONDOWN:
|
case WM_MBUTTONDOWN:
|
||||||
case WM_MBUTTONUP:
|
case WM_MBUTTONUP:
|
||||||
case WM_MBUTTONDBLCLK:
|
case WM_MBUTTONDBLCLK:
|
||||||
if(dwFlags & MODIFYMOUSE){ // mouse processing
|
if(dxw.dwFlags1 & MODIFYMOUSE){ // mouse processing
|
||||||
POINT prev, curr;
|
POINT prev, curr;
|
||||||
// scale mouse coordinates
|
// scale mouse coordinates
|
||||||
prev.x = LOWORD(lparam);
|
prev.x = LOWORD(lparam);
|
||||||
prev.y = HIWORD(lparam);
|
prev.y = HIWORD(lparam);
|
||||||
//OutTraceC("ChildWindowProc: hwnd=%x pos XY prev=(%d,%d)\n", hwnd, prev.x, prev.y);
|
//OutTraceC("ChildWindowProc: hwnd=%x pos XY prev=(%d,%d)\n", hwnd, prev.x, prev.y);
|
||||||
curr=FixCursorPos(hWnd, prev); // Warn! the correction must refer to the main window hWnd, not the current hwnd one !!!
|
curr=dxw.FixCursorPos(prev); // Warn! the correction must refer to the main window hWnd, not the current hwnd one !!!
|
||||||
lparam = MAKELPARAM(curr.x, curr.y);
|
lparam = MAKELPARAM(curr.x, curr.y);
|
||||||
OutTraceC("ChildWindowProc: hwnd=%x pos XY=(%d,%d)->(%d,%d)\n", hwnd, prev.x, prev.y, curr.x, curr.y);
|
OutTraceC("ChildWindowProc: hwnd=%x pos XY=(%d,%d)->(%d,%d)\n", hwnd, prev.x, prev.y, curr.x, curr.y);
|
||||||
}
|
}
|
||||||
@ -862,10 +722,10 @@ LRESULT CALLBACK extChildWindowProc(HWND hwnd, UINT message, WPARAM wparam, LPAR
|
|||||||
static void dx_TogglePositionLock(HWND hwnd)
|
static void dx_TogglePositionLock(HWND hwnd)
|
||||||
{
|
{
|
||||||
// toggle position locking
|
// toggle position locking
|
||||||
if(dwFlags & LOCKWINPOS){
|
if(dxw.dwFlags1 & LOCKWINPOS){
|
||||||
// unlock
|
// unlock
|
||||||
OutTraceD("Toggle position lock OFF\n");
|
OutTraceD("Toggle position lock OFF\n");
|
||||||
dwFlags &= ~LOCKWINPOS;
|
dxw.dwFlags1 &= ~LOCKWINPOS;
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
// lock and update window position!!!
|
// lock and update window position!!!
|
||||||
@ -874,7 +734,7 @@ static void dx_TogglePositionLock(HWND hwnd)
|
|||||||
POINT p={0,0};
|
POINT p={0,0};
|
||||||
(*pGetClientRect)(hwnd,&rect);
|
(*pGetClientRect)(hwnd,&rect);
|
||||||
(*pClientToScreen)(hwnd,&p);
|
(*pClientToScreen)(hwnd,&p);
|
||||||
dwFlags |= LOCKWINPOS;
|
dxw.dwFlags1 |= LOCKWINPOS;
|
||||||
OutTraceD("Toggle position lock ON\n");
|
OutTraceD("Toggle position lock ON\n");
|
||||||
iPosX=(short)p.x;
|
iPosX=(short)p.x;
|
||||||
iPosY=(short)p.y;
|
iPosY=(short)p.y;
|
||||||
@ -885,12 +745,12 @@ static void dx_TogglePositionLock(HWND hwnd)
|
|||||||
|
|
||||||
void dx_ToggleDC()
|
void dx_ToggleDC()
|
||||||
{
|
{
|
||||||
if(dwFlags & HANDLEDC){
|
if(dxw.dwFlags1 & HANDLEDC){
|
||||||
dwFlags &= ~HANDLEDC;
|
dxw.dwFlags1 &= ~HANDLEDC;
|
||||||
OutTrace("ToggleDC: HANDLEDC mode OFF\n");
|
OutTrace("ToggleDC: HANDLEDC mode OFF\n");
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
dwFlags |= HANDLEDC;
|
dxw.dwFlags1 |= HANDLEDC;
|
||||||
OutTrace("ToggleDC: HANDLEDC mode ON\n");
|
OutTrace("ToggleDC: HANDLEDC mode ON\n");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -913,7 +773,7 @@ LRESULT CALLBACK extWindowProc(HWND hwnd, UINT message, WPARAM wparam, LPARAM lp
|
|||||||
OutTraceW("WindowProc: WinMsg=[0x%x]%s(%x,%x)\n", message, ExplainWinMessage(message), wparam, lparam);
|
OutTraceW("WindowProc: WinMsg=[0x%x]%s(%x,%x)\n", message, ExplainWinMessage(message), wparam, lparam);
|
||||||
switch(message){
|
switch(message){
|
||||||
case WM_NCHITTEST:
|
case WM_NCHITTEST:
|
||||||
if((dwFlags2 & FIXNCHITTEST) && (dwFlags & MODIFYMOUSE)){ // mouse processing
|
if((dxw.dwFlags2 & FIXNCHITTEST) && (dxw.dwFlags1 & MODIFYMOUSE)){ // mouse processing
|
||||||
POINT cursor;
|
POINT cursor;
|
||||||
LRESULT ret;
|
LRESULT ret;
|
||||||
ret=(*pDefWindowProc)(hwnd, message, wparam, lparam);
|
ret=(*pDefWindowProc)(hwnd, message, wparam, lparam);
|
||||||
@ -921,7 +781,7 @@ LRESULT CALLBACK extWindowProc(HWND hwnd, UINT message, WPARAM wparam, LPARAM lp
|
|||||||
if (ret==HTCLIENT) {
|
if (ret==HTCLIENT) {
|
||||||
cursor.x=LOWORD(lparam);
|
cursor.x=LOWORD(lparam);
|
||||||
cursor.y=HIWORD(lparam);
|
cursor.y=HIWORD(lparam);
|
||||||
FixNCHITCursorPos(&cursor);
|
dxw.FixNCHITCursorPos(&cursor);
|
||||||
lparam = MAKELPARAM(cursor.x, cursor.y);
|
lparam = MAKELPARAM(cursor.x, cursor.y);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
@ -933,8 +793,7 @@ LRESULT CALLBACK extWindowProc(HWND hwnd, UINT message, WPARAM wparam, LPARAM lp
|
|||||||
return 1; // 1 == OK, erased
|
return 1; // 1 == OK, erased
|
||||||
break;
|
break;
|
||||||
case WM_DISPLAYCHANGE:
|
case WM_DISPLAYCHANGE:
|
||||||
extern int isFullScreen;
|
if ((dxw.dwFlags1 & LOCKWINPOS) && dxw.IsFullScreen()){
|
||||||
if ((dwFlags & LOCKWINPOS) && isFullScreen){
|
|
||||||
OutTraceD("WindowProc: prevent WM_DISPLAYCHANGE depth=%d size=(%d,%d)\n",
|
OutTraceD("WindowProc: prevent WM_DISPLAYCHANGE depth=%d size=(%d,%d)\n",
|
||||||
wparam, HIWORD(lparam), LOWORD(lparam));
|
wparam, HIWORD(lparam), LOWORD(lparam));
|
||||||
return 0;
|
return 0;
|
||||||
@ -948,20 +807,20 @@ LRESULT CALLBACK extWindowProc(HWND hwnd, UINT message, WPARAM wparam, LPARAM lp
|
|||||||
break;
|
break;
|
||||||
case WM_ENTERSIZEMOVE:
|
case WM_ENTERSIZEMOVE:
|
||||||
while(ShowCursor(1) < 0);
|
while(ShowCursor(1) < 0);
|
||||||
if(dwFlags & CLIPCURSOR) DxWndEraseClipCursor();
|
if(dxw.dwFlags1 & CLIPCURSOR) dxw.EraseClipCursor();
|
||||||
if(dwFlags & ENABLECLIPPING) (*pClipCursor)(NULL);
|
if(dxw.dwFlags1 & ENABLECLIPPING) (*pClipCursor)(NULL);
|
||||||
break;
|
break;
|
||||||
case WM_EXITSIZEMOVE:
|
case WM_EXITSIZEMOVE:
|
||||||
if (dwFlags & HIDEHWCURSOR) while(ShowCursor(0) >= 0);
|
if (dxw.dwFlags1 & HIDEHWCURSOR) while(ShowCursor(0) >= 0);
|
||||||
if(dwFlags & ENABLECLIPPING) extClipCursor(lpClipRegion);
|
if(dxw.dwFlags1 & ENABLECLIPPING) extClipCursor(lpClipRegion);
|
||||||
if(dwFlags2 & REFRESHONRESIZE) dx_ScreenRefresh();
|
if(dxw.dwFlags2 & REFRESHONRESIZE) dxw.ScreenRefresh();
|
||||||
break;
|
break;
|
||||||
case WM_ACTIVATE:
|
case WM_ACTIVATE:
|
||||||
bActive = (LOWORD(wparam) == WA_ACTIVE || LOWORD(wparam) == WA_CLICKACTIVE) ? 1 : 0;
|
dxw.bActive = (LOWORD(wparam) == WA_ACTIVE || LOWORD(wparam) == WA_CLICKACTIVE) ? 1 : 0;
|
||||||
case WM_NCACTIVATE:
|
case WM_NCACTIVATE:
|
||||||
if(message == WM_NCACTIVATE) bActive = wparam;
|
if(message == WM_NCACTIVATE) dxw.bActive = wparam;
|
||||||
(*pSetWindowPos)(hwnd, HWND_NOTOPMOST, 0, 0, 0, 0, SWP_NOMOVE | SWP_NOSIZE);
|
(*pSetWindowPos)(hwnd, HWND_NOTOPMOST, 0, 0, 0, 0, SWP_NOMOVE | SWP_NOSIZE);
|
||||||
if(dwFlags & UNNOTIFY){
|
if(dxw.dwFlags1 & UNNOTIFY){
|
||||||
DefWindowProc(hwnd, message, wparam, lparam);
|
DefWindowProc(hwnd, message, wparam, lparam);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
@ -976,7 +835,7 @@ LRESULT CALLBACK extWindowProc(HWND hwnd, UINT message, WPARAM wparam, LPARAM lp
|
|||||||
case WM_MOUSEMOVE:
|
case WM_MOUSEMOVE:
|
||||||
prev.x = LOWORD(lparam);
|
prev.x = LOWORD(lparam);
|
||||||
prev.y = HIWORD(lparam);
|
prev.y = HIWORD(lparam);
|
||||||
if (dwFlags & HIDEHWCURSOR) {
|
if (dxw.dwFlags1 & HIDEHWCURSOR) {
|
||||||
(*pGetClientRect)(hwnd, &rect);
|
(*pGetClientRect)(hwnd, &rect);
|
||||||
if(prev.x >= 0 && prev.x < rect.right && prev.y >= 0 && prev.y < rect.bottom)
|
if(prev.x >= 0 && prev.x < rect.right && prev.y >= 0 && prev.y < rect.bottom)
|
||||||
while(ShowCursor(0) >= 0);
|
while(ShowCursor(0) >= 0);
|
||||||
@ -986,9 +845,9 @@ LRESULT CALLBACK extWindowProc(HWND hwnd, UINT message, WPARAM wparam, LPARAM lp
|
|||||||
else {
|
else {
|
||||||
while(ShowCursor(1) < 0);
|
while(ShowCursor(1) < 0);
|
||||||
}
|
}
|
||||||
if(dwFlags & MODIFYMOUSE){ // mouse processing
|
if(dxw.dwFlags1 & MODIFYMOUSE){ // mouse processing
|
||||||
// scale mouse coordinates
|
// scale mouse coordinates
|
||||||
curr=FixCursorPos(hwnd, prev);
|
curr=dxw.FixCursorPos(hwnd, prev);
|
||||||
lparam = MAKELPARAM(curr.x, curr.y);
|
lparam = MAKELPARAM(curr.x, curr.y);
|
||||||
OutTraceC("WindowProc: hwnd=%x pos XY=(%d,%d)->(%d,%d)\n", hwnd, prev.x, prev.y, curr.x, curr.y);
|
OutTraceC("WindowProc: hwnd=%x pos XY=(%d,%d)->(%d,%d)\n", hwnd, prev.x, prev.y, curr.x, curr.y);
|
||||||
}
|
}
|
||||||
@ -1004,26 +863,26 @@ LRESULT CALLBACK extWindowProc(HWND hwnd, UINT message, WPARAM wparam, LPARAM lp
|
|||||||
case WM_MBUTTONDOWN:
|
case WM_MBUTTONDOWN:
|
||||||
case WM_MBUTTONUP:
|
case WM_MBUTTONUP:
|
||||||
case WM_MBUTTONDBLCLK:
|
case WM_MBUTTONDBLCLK:
|
||||||
if((dwFlags & CLIPCURSOR) && ClipCursorToggleState) DxWndSetClipCursor();
|
if((dxw.dwFlags1 & CLIPCURSOR) && ClipCursorToggleState) dxw.SetClipCursor();
|
||||||
if(dwFlags & MODIFYMOUSE){ // mouse processing
|
if(dxw.dwFlags1 & MODIFYMOUSE){ // mouse processing
|
||||||
// scale mouse coordinates
|
// scale mouse coordinates
|
||||||
prev.x = LOWORD(lparam);
|
prev.x = LOWORD(lparam);
|
||||||
prev.y = HIWORD(lparam);
|
prev.y = HIWORD(lparam);
|
||||||
curr=FixCursorPos(hwnd, prev);
|
curr=dxw.FixCursorPos(hwnd, prev);
|
||||||
lparam = MAKELPARAM(curr.x, curr.y);
|
lparam = MAKELPARAM(curr.x, curr.y);
|
||||||
OutTraceC("WindowProc: hwnd=%x pos XY=(%d,%d)->(%d,%d)\n", hwnd, prev.x, prev.y, curr.x, curr.y);
|
OutTraceC("WindowProc: hwnd=%x pos XY=(%d,%d)->(%d,%d)\n", hwnd, prev.x, prev.y, curr.x, curr.y);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case WM_SETFOCUS:
|
case WM_SETFOCUS:
|
||||||
//if (dwFlags & CLIPCURSOR) if (ClipCursorToggleState) DxWndSetClipCursor();
|
//if (dxw.dwFlags1 & CLIPCURSOR) if (ClipCursorToggleState) dxw.SetClipCursor();
|
||||||
if (dwFlags & ENABLECLIPPING) extClipCursor(lpClipRegion);
|
if (dxw.dwFlags1 & ENABLECLIPPING) extClipCursor(lpClipRegion);
|
||||||
break;
|
break;
|
||||||
case WM_KILLFOCUS:
|
case WM_KILLFOCUS:
|
||||||
if (dwFlags & CLIPCURSOR) DxWndEraseClipCursor();
|
if (dxw.dwFlags1 & CLIPCURSOR) dxw.EraseClipCursor();
|
||||||
if (dwFlags & ENABLECLIPPING) (*pClipCursor)(NULL);
|
if (dxw.dwFlags1 & ENABLECLIPPING) (*pClipCursor)(NULL);
|
||||||
break;
|
break;
|
||||||
case WM_CLOSE:
|
case WM_CLOSE:
|
||||||
//if (dwFlags & HANDLECOSEICON) {
|
//if (dxw.dwFlags1 & HANDLECOSEICON) {
|
||||||
{
|
{
|
||||||
OutTraceD("WindowProc: WM_CLOSE - terminating process\n");
|
OutTraceD("WindowProc: WM_CLOSE - terminating process\n");
|
||||||
TerminateProcess(GetCurrentProcess(),0);
|
TerminateProcess(GetCurrentProcess(),0);
|
||||||
@ -1033,13 +892,13 @@ LRESULT CALLBACK extWindowProc(HWND hwnd, UINT message, WPARAM wparam, LPARAM lp
|
|||||||
OutTraceW("event WM_SYSKEYDOWN wparam=%x lparam=%x\n", wparam, lparam);
|
OutTraceW("event WM_SYSKEYDOWN wparam=%x lparam=%x\n", wparam, lparam);
|
||||||
switch (wparam){
|
switch (wparam){
|
||||||
case VK_F12:
|
case VK_F12:
|
||||||
if(dwFlags & CLIPCURSOR){
|
if(dxw.dwFlags1 & CLIPCURSOR){
|
||||||
OutTraceD("WindowProc: WM_SYSKEYDOWN key=%x ToggleState=%x\n",wparam,ClipCursorToggleState);
|
OutTraceD("WindowProc: WM_SYSKEYDOWN key=%x ToggleState=%x\n",wparam,ClipCursorToggleState);
|
||||||
ClipCursorToggleState = !ClipCursorToggleState;
|
ClipCursorToggleState = !ClipCursorToggleState;
|
||||||
ClipCursorToggleState ? DxWndSetClipCursor() : DxWndEraseClipCursor();
|
ClipCursorToggleState ? dxw.SetClipCursor() : dxw.EraseClipCursor();
|
||||||
}
|
}
|
||||||
case VK_F11:
|
case VK_F11:
|
||||||
dx_ScreenRefresh();
|
dxw.ScreenRefresh();
|
||||||
break;
|
break;
|
||||||
case VK_F10:
|
case VK_F10:
|
||||||
dx_ToggleLogging();
|
dx_ToggleLogging();
|
||||||
@ -1051,7 +910,7 @@ LRESULT CALLBACK extWindowProc(HWND hwnd, UINT message, WPARAM wparam, LPARAM lp
|
|||||||
dx_ToggleDC();
|
dx_ToggleDC();
|
||||||
break;
|
break;
|
||||||
case VK_F4:
|
case VK_F4:
|
||||||
if (dwFlags & HANDLEALTF4) {
|
if (dxw.dwFlags1 & HANDLEALTF4) {
|
||||||
OutTraceD("WindowProc: WM_SYSKEYDOWN(ALT-F4) - terminating process\n");
|
OutTraceD("WindowProc: WM_SYSKEYDOWN(ALT-F4) - terminating process\n");
|
||||||
TerminateProcess(GetCurrentProcess(),0);
|
TerminateProcess(GetCurrentProcess(),0);
|
||||||
}
|
}
|
||||||
@ -1062,9 +921,9 @@ LRESULT CALLBACK extWindowProc(HWND hwnd, UINT message, WPARAM wparam, LPARAM lp
|
|||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
if (dwFlags & AUTOREFRESH)
|
if (dxw.dwFlags1 & AUTOREFRESH)
|
||||||
{
|
{
|
||||||
dx_ScreenRefresh();
|
dxw.ScreenRefresh();
|
||||||
}
|
}
|
||||||
|
|
||||||
pWindowProc=WhndGetWindowProc(hwnd);
|
pWindowProc=WhndGetWindowProc(hwnd);
|
||||||
@ -1074,7 +933,7 @@ LRESULT CALLBACK extWindowProc(HWND hwnd, UINT message, WPARAM wparam, LPARAM lp
|
|||||||
// save last NCHITTEST cursor position for use with KEEPASPECTRATIO scaling
|
// save last NCHITTEST cursor position for use with KEEPASPECTRATIO scaling
|
||||||
if(message==WM_NCHITTEST) LastCursorPos=ret;
|
if(message==WM_NCHITTEST) LastCursorPos=ret;
|
||||||
// v2.1.89: if FORCEWINRESIZE add standard processing for the missing WM_NC* messages
|
// v2.1.89: if FORCEWINRESIZE add standard processing for the missing WM_NC* messages
|
||||||
if(dwFlags2 & FORCEWINRESIZE){
|
if(dxw.dwFlags2 & FORCEWINRESIZE){
|
||||||
switch(message){
|
switch(message){
|
||||||
//case WM_NCHITTEST:
|
//case WM_NCHITTEST:
|
||||||
//case WM_NCPAINT:
|
//case WM_NCPAINT:
|
||||||
@ -1189,7 +1048,7 @@ void HookSysLibs(char *module)
|
|||||||
if(tmp) pBeginPaint = (BeginPaint_Type)tmp;
|
if(tmp) pBeginPaint = (BeginPaint_Type)tmp;
|
||||||
tmp = HookAPI("user32.dll", EndPaint, "EndPaint", extEndPaint);
|
tmp = HookAPI("user32.dll", EndPaint, "EndPaint", extEndPaint);
|
||||||
if(tmp) pEndPaint = (EndPaint_Type)tmp;
|
if(tmp) pEndPaint = (EndPaint_Type)tmp;
|
||||||
if(dwFlags & MAPGDITOPRIMARY){
|
if(dxw.dwFlags1 & MAPGDITOPRIMARY){
|
||||||
tmp = HookAPI("GDI32.dll", CreateCompatibleDC, "CreateCompatibleDC", extDDCreateCompatibleDC);
|
tmp = HookAPI("GDI32.dll", CreateCompatibleDC, "CreateCompatibleDC", extDDCreateCompatibleDC);
|
||||||
if(tmp) pCreateCompatibleDC = (CreateCompatibleDC_Type)tmp;
|
if(tmp) pCreateCompatibleDC = (CreateCompatibleDC_Type)tmp;
|
||||||
tmp = HookAPI("GDI32.dll", DeleteDC, "DeleteDC", extDDDeleteDC);
|
tmp = HookAPI("GDI32.dll", DeleteDC, "DeleteDC", extDDDeleteDC);
|
||||||
@ -1234,7 +1093,7 @@ void HookSysLibs(char *module)
|
|||||||
//if(tmp) pInvalidateRgn = (InvalidateRgn_Type)tmp;
|
//if(tmp) pInvalidateRgn = (InvalidateRgn_Type)tmp;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (dwFlags & CLIENTREMAPPING){
|
if (dxw.dwFlags1 & CLIENTREMAPPING){
|
||||||
tmp = HookAPI("user32.dll", ScreenToClient, "ScreenToClient", extScreenToClient);
|
tmp = HookAPI("user32.dll", ScreenToClient, "ScreenToClient", extScreenToClient);
|
||||||
if(tmp) pScreenToClient = (ScreenToClient_Type)tmp;
|
if(tmp) pScreenToClient = (ScreenToClient_Type)tmp;
|
||||||
tmp = HookAPI("user32.dll", ClientToScreen, "ClientToScreen", extClientToScreen);
|
tmp = HookAPI("user32.dll", ClientToScreen, "ClientToScreen", extClientToScreen);
|
||||||
@ -1263,7 +1122,7 @@ void HookSysLibs(char *module)
|
|||||||
if(tmp) pClipCursor = (ClipCursor_Type)tmp;
|
if(tmp) pClipCursor = (ClipCursor_Type)tmp;
|
||||||
tmp = HookAPI("user32.dll", FillRect, "FillRect", extFillRect);
|
tmp = HookAPI("user32.dll", FillRect, "FillRect", extFillRect);
|
||||||
if(tmp) pFillRect = (FillRect_Type)tmp;
|
if(tmp) pFillRect = (FillRect_Type)tmp;
|
||||||
if (dwFlags & MESSAGEPROC) {
|
if (dxw.dwFlags1 & MESSAGEPROC) {
|
||||||
tmp = HookAPI("user32.dll", PeekMessageA, "PeekMessageA", extPeekMessage); // added for GPL
|
tmp = HookAPI("user32.dll", PeekMessageA, "PeekMessageA", extPeekMessage); // added for GPL
|
||||||
if(tmp) pPeekMessage = (PeekMessage_Type)tmp;
|
if(tmp) pPeekMessage = (PeekMessage_Type)tmp;
|
||||||
tmp = HookAPI("user32.dll", GetMessageA, "GetMessageA", extGetMessage); // added for GPL
|
tmp = HookAPI("user32.dll", GetMessageA, "GetMessageA", extGetMessage); // added for GPL
|
||||||
@ -1285,7 +1144,7 @@ void HookSysLibs(char *module)
|
|||||||
if(tmp) pRegisterClassExA = (RegisterClassExA_Type)tmp;
|
if(tmp) pRegisterClassExA = (RegisterClassExA_Type)tmp;
|
||||||
tmp = HookAPI("GDI32.dll", Rectangle, "Rectangle", extRectangle);
|
tmp = HookAPI("GDI32.dll", Rectangle, "Rectangle", extRectangle);
|
||||||
if(tmp) pRectangle = (Rectangle_Type)tmp;
|
if(tmp) pRectangle = (Rectangle_Type)tmp;
|
||||||
if (dwFlags & (PREVENTMAXIMIZE|FIXWINFRAME|LOCKWINPOS|LOCKWINSTYLE)){
|
if (dxw.dwFlags1 & (PREVENTMAXIMIZE|FIXWINFRAME|LOCKWINPOS|LOCKWINSTYLE)){
|
||||||
tmp = HookAPI("user32.dll", ShowWindow, "ShowWindow", extShowWindow);
|
tmp = HookAPI("user32.dll", ShowWindow, "ShowWindow", extShowWindow);
|
||||||
if(tmp) pShowWindow = (ShowWindow_Type)tmp;
|
if(tmp) pShowWindow = (ShowWindow_Type)tmp;
|
||||||
tmp = HookAPI("user32.dll", SetWindowLongA, "SetWindowLongA", extSetWindowLong);
|
tmp = HookAPI("user32.dll", SetWindowLongA, "SetWindowLongA", extSetWindowLong);
|
||||||
@ -1302,7 +1161,7 @@ void HookSysLibs(char *module)
|
|||||||
//tmp = HookAPI("user32.dll", SetWindowPlacement, "SetWindowPlacement", extSetWindowPlacement);
|
//tmp = HookAPI("user32.dll", SetWindowPlacement, "SetWindowPlacement", extSetWindowPlacement);
|
||||||
//if(tmp) pSetWindowPlacement = (SetWindowPlacement_Type)tmp;
|
//if(tmp) pSetWindowPlacement = (SetWindowPlacement_Type)tmp;
|
||||||
}
|
}
|
||||||
if ((dwFlags & EMULATESURFACE) && (dwFlags & HANDLEDC)){
|
if ((dxw.dwFlags1 & EMULATESURFACE) && (dxw.dwFlags1 & HANDLEDC)){
|
||||||
tmp = HookAPI("GDI32.dll", SetTextColor, "SetTextColor", extSetTextColor);
|
tmp = HookAPI("GDI32.dll", SetTextColor, "SetTextColor", extSetTextColor);
|
||||||
if(tmp) pSetTextColor = (SetTextColor_Type)tmp;
|
if(tmp) pSetTextColor = (SetTextColor_Type)tmp;
|
||||||
tmp = HookAPI("GDI32.dll", SetBkColor, "SetBkColor", extSetBkColor);
|
tmp = HookAPI("GDI32.dll", SetBkColor, "SetBkColor", extSetBkColor);
|
||||||
@ -1321,7 +1180,7 @@ void HookSysLibs(char *module)
|
|||||||
tmp = HookAPI("user32.dll", GetDesktopWindow, "GetDesktopWindow", extGetDesktopWindow);
|
tmp = HookAPI("user32.dll", GetDesktopWindow, "GetDesktopWindow", extGetDesktopWindow);
|
||||||
if(tmp) pGetDesktopWindow = (GetDesktopWindow_Type)tmp;
|
if(tmp) pGetDesktopWindow = (GetDesktopWindow_Type)tmp;
|
||||||
|
|
||||||
if(dwFlags & MODIFYMOUSE){
|
if(dxw.dwFlags1 & MODIFYMOUSE){
|
||||||
tmp = HookAPI("user32.dll", GetCursorPos, "GetCursorPos", extGetCursorPos);
|
tmp = HookAPI("user32.dll", GetCursorPos, "GetCursorPos", extGetCursorPos);
|
||||||
if(tmp) pGetCursorPos = (GetCursorPos_Type)tmp;
|
if(tmp) pGetCursorPos = (GetCursorPos_Type)tmp;
|
||||||
//tmp = HookAPI("user32.dll", GetPhysicalCursorPos, "", extGetCursorPos);
|
//tmp = HookAPI("user32.dll", GetPhysicalCursorPos, "", extGetCursorPos);
|
||||||
@ -1331,7 +1190,7 @@ void HookSysLibs(char *module)
|
|||||||
tmp = HookAPI("user32.dll", SendMessageA, "SendMessageA", extSendMessage);
|
tmp = HookAPI("user32.dll", SendMessageA, "SendMessageA", extSendMessage);
|
||||||
if(tmp) pSendMessage = (SendMessage_Type)tmp;
|
if(tmp) pSendMessage = (SendMessage_Type)tmp;
|
||||||
}
|
}
|
||||||
if((dwFlags & (MODIFYMOUSE|SLOWDOWN|KEEPCURSORWITHIN)) || (dwFlags2 & KEEPCURSORFIXED)){
|
if((dxw.dwFlags1 & (MODIFYMOUSE|SLOWDOWN|KEEPCURSORWITHIN)) || (dxw.dwFlags2 & KEEPCURSORFIXED)){
|
||||||
tmp = HookAPI("user32.dll", SetCursorPos, "SetCursorPos", extSetCursorPos);
|
tmp = HookAPI("user32.dll", SetCursorPos, "SetCursorPos", extSetCursorPos);
|
||||||
if(tmp) pSetCursorPos = (SetCursorPos_Type)tmp;
|
if(tmp) pSetCursorPos = (SetCursorPos_Type)tmp;
|
||||||
}
|
}
|
||||||
@ -1370,7 +1229,7 @@ void HookSysLibs(char *module)
|
|||||||
if(tmp) pMoveWindow = (MoveWindow_Type)tmp;
|
if(tmp) pMoveWindow = (MoveWindow_Type)tmp;
|
||||||
}
|
}
|
||||||
|
|
||||||
if(dwFlags2 & DISABLEGAMMARAMP){
|
if(dxw.dwFlags2 & DISABLEGAMMARAMP){
|
||||||
tmp = HookAPI("GDI32.dll", SetDeviceGammaRamp, "SetDeviceGammaRamp", extSetDeviceGammaRamp);
|
tmp = HookAPI("GDI32.dll", SetDeviceGammaRamp, "SetDeviceGammaRamp", extSetDeviceGammaRamp);
|
||||||
if(tmp) pSetDeviceGammaRamp = (SetDeviceGammaRamp_Type)tmp;
|
if(tmp) pSetDeviceGammaRamp = (SetDeviceGammaRamp_Type)tmp;
|
||||||
tmp = HookAPI("GDI32.dll", GetDeviceGammaRamp, "GetDeviceGammaRamp", extGetDeviceGammaRamp);
|
tmp = HookAPI("GDI32.dll", GetDeviceGammaRamp, "GetDeviceGammaRamp", extGetDeviceGammaRamp);
|
||||||
@ -1466,7 +1325,7 @@ void HookExceptionHandler(void)
|
|||||||
void HookModule(char *module, int dxversion)
|
void HookModule(char *module, int dxversion)
|
||||||
{
|
{
|
||||||
HookSysLibs(module);
|
HookSysLibs(module);
|
||||||
if(dwFlags & HOOKDI) HookDirectInput(dxversion);
|
if(dxw.dwFlags1 & HOOKDI) HookDirectInput(dxversion);
|
||||||
HookDirectDraw(dxversion);
|
HookDirectDraw(dxversion);
|
||||||
HookDirect3D(dxversion);
|
HookDirect3D(dxversion);
|
||||||
HookOle32(dxversion); // unfinished business
|
HookOle32(dxversion); // unfinished business
|
||||||
@ -1483,36 +1342,36 @@ int HookInit(TARGETMAP *target, HWND hwnd)
|
|||||||
"DirectX7", "DirectX8", "DirectX9", "None\\OpenGL", "", "", ""
|
"DirectX7", "DirectX8", "DirectX9", "None\\OpenGL", "", "", ""
|
||||||
};
|
};
|
||||||
|
|
||||||
dwFlags = target->flags;
|
dxw.dwFlags1 = target->flags;
|
||||||
dwFlags2 = target->flags2;
|
dxw.dwFlags2 = target->flags2;
|
||||||
dwTFlags = target->tflags;
|
dxw.dwTFlags = target->tflags;
|
||||||
gsModules = target->module;
|
gsModules = target->module;
|
||||||
|
|
||||||
// v2.1.75: is it correct to set hWnd here?
|
// v2.1.75: is it correct to set hWnd here?
|
||||||
hWnd=hwnd;
|
dxw.SethWnd(hwnd);
|
||||||
hParentWnd=GetParent(hwnd);
|
dxw.hParentWnd=GetParent(hwnd);
|
||||||
hChildWnd=hwnd;
|
dxw.hChildWnd=hwnd;
|
||||||
|
|
||||||
// bounds control
|
// bounds control
|
||||||
if(target->dxversion<0) target->dxversion=0;
|
if(target->dxversion<0) target->dxversion=0;
|
||||||
if(target->dxversion>10) target->dxversion=10;
|
if(target->dxversion>10) target->dxversion=10;
|
||||||
OutTraceD("HookInit: path=\"%s\" module=\"%s\" dxversion=%s hWnd=%x hParentWnd=%x\n",
|
OutTraceD("HookInit: path=\"%s\" module=\"%s\" dxversion=%s hWnd=%x dxw.hParentWnd=%x\n",
|
||||||
target->path, target->module, dxversions[target->dxversion], hwnd, hParentWnd);
|
target->path, target->module, dxversions[target->dxversion], hwnd, dxw.hParentWnd);
|
||||||
if (IsDebug){
|
if (IsDebug){
|
||||||
DWORD dwStyle, dwExStyle;
|
DWORD dwStyle, dwExStyle;
|
||||||
dwStyle=GetWindowLong(hWnd, GWL_STYLE);
|
dwStyle=GetWindowLong(dxw.GethWnd(), GWL_STYLE);
|
||||||
dwExStyle=GetWindowLong(hWnd, GWL_EXSTYLE);
|
dwExStyle=GetWindowLong(dxw.GethWnd(), GWL_EXSTYLE);
|
||||||
OutTrace("HookInit: hWnd style=%x(%s) exstyle=%x(%s)\n", dwStyle, ExplainStyle(dwStyle), dwExStyle, ExplainExStyle(dwExStyle));
|
OutTrace("HookInit: hWnd style=%x(%s) exstyle=%x(%s)\n", dwStyle, ExplainStyle(dwStyle), dwExStyle, ExplainExStyle(dwExStyle));
|
||||||
dwStyle=GetWindowLong(hParentWnd, GWL_STYLE);
|
dwStyle=GetWindowLong(dxw.hParentWnd, GWL_STYLE);
|
||||||
dwExStyle=GetWindowLong(hParentWnd, GWL_EXSTYLE);
|
dwExStyle=GetWindowLong(dxw.hParentWnd, GWL_EXSTYLE);
|
||||||
OutTrace("HookInit: hParentWnd style=%x(%s) exstyle=%x(%s)\n", dwStyle, ExplainStyle(dwStyle), dwExStyle, ExplainExStyle(dwExStyle));
|
OutTrace("HookInit: dxw.hParentWnd style=%x(%s) exstyle=%x(%s)\n", dwStyle, ExplainStyle(dwStyle), dwExStyle, ExplainExStyle(dwExStyle));
|
||||||
}
|
}
|
||||||
|
|
||||||
if(dwFlags & HANDLEEXCEPTIONS) HookExceptionHandler();
|
if(dxw.dwFlags1 & HANDLEEXCEPTIONS) HookExceptionHandler();
|
||||||
|
|
||||||
if (dwTFlags & OUTIMPORTTABLE) DumpImportTable(NULL);
|
if (dxw.dwTFlags & OUTIMPORTTABLE) DumpImportTable(NULL);
|
||||||
|
|
||||||
if (dwTFlags & DXPROXED){
|
if (dxw.dwTFlags & DXPROXED){
|
||||||
HookDDProxy(target->dxversion);
|
HookDDProxy(target->dxversion);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
@ -1532,16 +1391,16 @@ int HookInit(TARGETMAP *target, HWND hwnd)
|
|||||||
sModule=strtok(NULL," ");
|
sModule=strtok(NULL," ");
|
||||||
}
|
}
|
||||||
|
|
||||||
if(dwFlags2 & RECOVERSCREENMODE) RecoverScreenMode();
|
if(dxw.dwFlags2 & RECOVERSCREENMODE) RecoverScreenMode();
|
||||||
|
|
||||||
InitScreenParameters();
|
InitScreenParameters();
|
||||||
|
|
||||||
if (IsDebug) OutTraceD("MoveWindow: target pos=(%d,%d) size=(%d,%d)\n", iPosX, iPosY, iSizX, iSizY);
|
if (IsDebug) OutTraceD("MoveWindow: target pos=(%d,%d) size=(%d,%d)\n", iPosX, iPosY, iSizX, iSizY);
|
||||||
if(dwFlags & FIXPARENTWIN){
|
if(dxw.dwFlags1 & FIXPARENTWIN){
|
||||||
CalculateWindowPos(hwnd, iSizX, iSizY, &wp);
|
CalculateWindowPos(hwnd, iSizX, iSizY, &wp);
|
||||||
if (IsDebug) OutTraceD("MoveWindow: hParentWnd=%x pos=(%d,%d) size=(%d,%d)\n", hParentWnd, wp.x, wp.y, wp.cx, wp.cy);
|
if (IsDebug) OutTraceD("MoveWindow: dxw.hParentWnd=%x pos=(%d,%d) size=(%d,%d)\n", dxw.hParentWnd, wp.x, wp.y, wp.cx, wp.cy);
|
||||||
res=(*pMoveWindow)(hParentWnd, wp.x, wp.y, wp.cx, wp.cy, FALSE);
|
res=(*pMoveWindow)(dxw.hParentWnd, wp.x, wp.y, wp.cx, wp.cy, FALSE);
|
||||||
if(!res) OutTraceE("MoveWindow ERROR: hParentWnd=%x err=%d at %d\n", hParentWnd, GetLastError(), __LINE__);
|
if(!res) OutTraceE("MoveWindow ERROR: dxw.hParentWnd=%x err=%d at %d\n", dxw.hParentWnd, GetLastError(), __LINE__);
|
||||||
}
|
}
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
@ -1558,13 +1417,13 @@ HRESULT WINAPI extGDIGetDisplayMode(HDC dev, int mode)
|
|||||||
OutTraceD("GDIGetDisplayMode, mode=%x\n", mode);
|
OutTraceD("GDIGetDisplayMode, mode=%x\n", mode);
|
||||||
|
|
||||||
res=(*pGDIGetDisplayMode)(dev, mode);
|
res=(*pGDIGetDisplayMode)(dev, mode);
|
||||||
if((dwFlags & EMULATESURFACE) && (VirtualScr.PixelFormat.dwRGBBitCount == 8)){
|
if((dxw.dwFlags1 & EMULATESURFACE) && (dxw.VirtualPixelFormat.dwRGBBitCount == 8)){
|
||||||
//lpddsd->ddpfPixelFormat.dwFlags |= DDPF_PALETTEINDEXED8;
|
//lpddsd->ddpfPixelFormat.dwFlags |= DDPF_PALETTEINDEXED8;
|
||||||
//lpddsd->ddpfPixelFormat.dwRGBBitCount = 8;
|
//lpddsd->ddpfPixelFormat.dwRGBBitCount = 8;
|
||||||
//lpddsd->ddsCaps.dwCaps |= DDSCAPS_PALETTE;
|
//lpddsd->ddsCaps.dwCaps |= DDSCAPS_PALETTE;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
if((dwFlags & EMULATESURFACE) && (VirtualScr.PixelFormat.dwRGBBitCount == 16)){
|
if((dxw.dwFlags1 & EMULATESURFACE) && (dxw.VirtualPixelFormat.dwRGBBitCount == 16)){
|
||||||
//lpddsd->ddpfPixelFormat.dwRGBBitCount = 16;
|
//lpddsd->ddpfPixelFormat.dwRGBBitCount = 16;
|
||||||
}
|
}
|
||||||
//OutTraceD("GetDisplayMode: returning WxH=(%dx%d), PixelFormat Flags=%x, RGBBitCount=%d, Caps=%x\n",
|
//OutTraceD("GetDisplayMode: returning WxH=(%dx%d), PixelFormat Flags=%x, RGBBitCount=%d, Caps=%x\n",
|
||||||
@ -1578,13 +1437,12 @@ HRESULT WINAPI extGDIGetDisplayMode(HDC dev, int mode)
|
|||||||
HWND WINAPI extGetDesktopWindow(void)
|
HWND WINAPI extGetDesktopWindow(void)
|
||||||
{
|
{
|
||||||
// V2.1.73: correct ???
|
// V2.1.73: correct ???
|
||||||
extern BOOL isFullScreen;
|
|
||||||
HWND res;
|
HWND res;
|
||||||
|
|
||||||
OutTraceD("GetDesktopWindow: FullScreen=%x\n", isFullScreen);
|
OutTraceD("GetDesktopWindow: FullScreen=%x\n", dxw.IsFullScreen());
|
||||||
if (isFullScreen){
|
if (dxw.IsFullScreen()){
|
||||||
OutTraceD("GetDesktopWindow: returning main window hwnd=%x\n", hWnd);
|
OutTraceD("GetDesktopWindow: returning main window hwnd=%x\n", dxw.GethWnd());
|
||||||
return hWnd;
|
return dxw.GethWnd();
|
||||||
}
|
}
|
||||||
else{
|
else{
|
||||||
res=(*pGetDesktopWindow)();
|
res=(*pGetDesktopWindow)();
|
||||||
|
160
dll/dxwcore.cpp
160
dll/dxwcore.cpp
@ -1,5 +1,5 @@
|
|||||||
#include "dxwnd.h"
|
#include "dxwnd.h"
|
||||||
//#include "dxwcore.hpp"
|
#include "dxwcore.hpp"
|
||||||
#include "syslibs.h"
|
#include "syslibs.h"
|
||||||
|
|
||||||
extern GetCursorPos_Type pGetCursorPos;
|
extern GetCursorPos_Type pGetCursorPos;
|
||||||
@ -7,18 +7,42 @@ extern ClientToScreen_Type pClientToScreen;
|
|||||||
|
|
||||||
dxwCore::dxwCore()
|
dxwCore::dxwCore()
|
||||||
{
|
{
|
||||||
|
// initialization stuff ....
|
||||||
|
FullScreen=FALSE;
|
||||||
|
SethWnd(NULL);
|
||||||
|
SetScreenSize();
|
||||||
|
dwMaxDDVersion=7;
|
||||||
|
hParentWnd = 0;
|
||||||
|
hChildWnd = 0;
|
||||||
|
bActive = TRUE;
|
||||||
|
bDInputAbs = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
dxwCore::~dxwCore()
|
dxwCore::~dxwCore()
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
void dxwCore::SethWnd(HWND hwnd)
|
RECT dxwCore::GetScreenRect()
|
||||||
{
|
{
|
||||||
hWnd=hwnd;
|
static RECT Screen;
|
||||||
|
Screen.left=0;
|
||||||
|
Screen.top=0;
|
||||||
|
Screen.right=dwScreenWidth;
|
||||||
|
Screen.bottom=dwScreenHeight;
|
||||||
|
return Screen;
|
||||||
}
|
}
|
||||||
|
|
||||||
POINT FixCursorPos(POINT prev)
|
// v2.1.93: FixCursorPos completely revised to introduce a clipping tolerance in
|
||||||
|
// clipping regions as well as in normal operations
|
||||||
|
|
||||||
|
#define CLIP_TOLERANCE 4
|
||||||
|
|
||||||
|
POINT dxwCore::FixCursorPos(POINT prev)
|
||||||
|
{
|
||||||
|
return FixCursorPos(hWnd, prev);
|
||||||
|
}
|
||||||
|
|
||||||
|
POINT dxwCore::FixCursorPos(HWND hwnd, POINT prev)
|
||||||
{
|
{
|
||||||
POINT curr;
|
POINT curr;
|
||||||
RECT rect;
|
RECT rect;
|
||||||
@ -28,17 +52,17 @@ POINT FixCursorPos(POINT prev)
|
|||||||
|
|
||||||
// scale mouse coordinates
|
// scale mouse coordinates
|
||||||
// remember: rect from GetClientRect always start at 0,0!
|
// remember: rect from GetClientRect always start at 0,0!
|
||||||
if(dwFlags & MODIFYMOUSE){
|
if(dxw.dwFlags1 & MODIFYMOUSE){
|
||||||
if (!(*pGetClientRect)(hWnd, &rect)) {
|
if (!(*pGetClientRect)(hwnd, &rect)) {
|
||||||
OutTraceD("GetClientRect ERROR %d at %d\n", GetLastError(),__LINE__);
|
OutTraceD("GetClientRect ERROR %d at %d\n", GetLastError(),__LINE__);
|
||||||
curr.x = curr.y = 0;
|
curr.x = curr.y = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (rect.right) curr.x = (curr.x * VirtualScr.dwWidth) / rect.right;
|
if (rect.right) curr.x = (curr.x * dxw.GetScreenWidth()) / rect.right;
|
||||||
if (rect.bottom) curr.y = (curr.y * VirtualScr.dwHeight) / rect.bottom;
|
if (rect.bottom) curr.y = (curr.y * dxw.GetScreenHeight()) / rect.bottom;
|
||||||
}
|
}
|
||||||
|
|
||||||
if((dwFlags & ENABLECLIPPING) && lpClipRegion){
|
if((dxw.dwFlags1 & ENABLECLIPPING) && lpClipRegion){
|
||||||
// v2.1.93:
|
// v2.1.93:
|
||||||
// in clipping mode, avoid the cursor position to lay outside the valid rect
|
// in clipping mode, avoid the cursor position to lay outside the valid rect
|
||||||
// note 1: the rect follow the convention and valid coord lay between left to righ-1,
|
// note 1: the rect follow the convention and valid coord lay between left to righ-1,
|
||||||
@ -54,9 +78,123 @@ POINT FixCursorPos(POINT prev)
|
|||||||
else{
|
else{
|
||||||
if (curr.x < CLIP_TOLERANCE) curr.x=0;
|
if (curr.x < CLIP_TOLERANCE) curr.x=0;
|
||||||
if (curr.y < CLIP_TOLERANCE) curr.y=0;
|
if (curr.y < CLIP_TOLERANCE) curr.y=0;
|
||||||
if (curr.x >= (LONG)VirtualScr.dwWidth-CLIP_TOLERANCE) curr.x=VirtualScr.dwWidth-1;
|
if (curr.x >= (LONG)dxw.GetScreenWidth()-CLIP_TOLERANCE) curr.x=dxw.GetScreenWidth()-1;
|
||||||
if (curr.y >= (LONG)VirtualScr.dwHeight-CLIP_TOLERANCE) curr.y=VirtualScr.dwHeight-1;
|
if (curr.y >= (LONG)dxw.GetScreenHeight()-CLIP_TOLERANCE) curr.y=dxw.GetScreenHeight()-1;
|
||||||
}
|
}
|
||||||
|
|
||||||
return curr;
|
return curr;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void dxwCore::FixNCHITCursorPos(LPPOINT lppoint)
|
||||||
|
{
|
||||||
|
RECT rect;
|
||||||
|
POINT point;
|
||||||
|
|
||||||
|
point=*lppoint;
|
||||||
|
(*pGetClientRect)(dxw.GethWnd(), &rect);
|
||||||
|
(*pScreenToClient)(dxw.GethWnd(), &point);
|
||||||
|
|
||||||
|
if (point.x < 0) return;
|
||||||
|
if (point.y < 0) return;
|
||||||
|
if (point.x > rect.right) return;
|
||||||
|
if (point.y > rect.bottom) return;
|
||||||
|
|
||||||
|
*lppoint=point;
|
||||||
|
lppoint->x = (lppoint->x * dxw.GetScreenWidth()) / rect.right;
|
||||||
|
lppoint->y = (lppoint->y * dxw.GetScreenHeight()) / rect.bottom;
|
||||||
|
if(lppoint->x < CLIP_TOLERANCE) lppoint->x=0;
|
||||||
|
if(lppoint->y < CLIP_TOLERANCE) lppoint->y=0;
|
||||||
|
if(lppoint->x > (LONG)dxw.GetScreenWidth()-CLIP_TOLERANCE) lppoint->x=dxw.GetScreenWidth()-1;
|
||||||
|
if(lppoint->y > (LONG)dxw.GetScreenHeight()-CLIP_TOLERANCE) lppoint->y=dxw.GetScreenHeight()-1;
|
||||||
|
}
|
||||||
|
|
||||||
|
void dxwCore::SetClipCursor()
|
||||||
|
{
|
||||||
|
RECT Rect;
|
||||||
|
POINT UpLeftCorner;
|
||||||
|
|
||||||
|
OutTraceD("Core::SetClipCursor:\n");
|
||||||
|
if (hWnd==NULL) {
|
||||||
|
OutTraceD("Core::SetClipCursor: ASSERT hWnd==NULL\n");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
(*pGetClientRect)(hWnd, &Rect);
|
||||||
|
UpLeftCorner.x=UpLeftCorner.y=0;
|
||||||
|
(*pClientToScreen)(hWnd, &UpLeftCorner);
|
||||||
|
Rect.left+=UpLeftCorner.x;
|
||||||
|
Rect.right+=UpLeftCorner.x;
|
||||||
|
Rect.top+=UpLeftCorner.y;
|
||||||
|
Rect.bottom+=UpLeftCorner.y;
|
||||||
|
(*pClipCursor)(NULL);
|
||||||
|
if(!(*pClipCursor)(&Rect)){
|
||||||
|
OutTraceE("ClipCursor: ERROR err=%d at %d\n", GetLastError(), __LINE__);
|
||||||
|
}
|
||||||
|
OutTraceD("Core::SetClipCursor: rect=(%d,%d)-(%d,%d)\n",
|
||||||
|
Rect.left, Rect.top, Rect.right, Rect.bottom);
|
||||||
|
}
|
||||||
|
|
||||||
|
void dxwCore::EraseClipCursor()
|
||||||
|
{
|
||||||
|
OutTraceD("Core::EraseClipCursor:\n");
|
||||||
|
(*pClipCursor)(NULL);
|
||||||
|
}
|
||||||
|
|
||||||
|
// MapWindow Rect: returns a rectangle in the real coordinate system from the virtual coordinates
|
||||||
|
// of an emulated fullscreen window. NULL or void returns the rectangle of the whole client area.
|
||||||
|
|
||||||
|
RECT dxwCore::MapWindowRect(void)
|
||||||
|
{
|
||||||
|
return MapWindowRect(NULL);
|
||||||
|
}
|
||||||
|
|
||||||
|
RECT dxwCore::MapWindowRect(LPRECT lpRect)
|
||||||
|
{
|
||||||
|
POINT UpLeft={0,0};
|
||||||
|
RECT RetRect;
|
||||||
|
RECT ClientRect;
|
||||||
|
if (!(*pGetClientRect)(hWnd, &ClientRect)){
|
||||||
|
OutTraceE("GetClientRect ERROR: err=%d hwnd=%x at %d\n", GetLastError(), hWnd, __LINE__);
|
||||||
|
}
|
||||||
|
if(lpRect){
|
||||||
|
RetRect.left = lpRect->left * ClientRect.right / dwScreenWidth;
|
||||||
|
RetRect.right = lpRect->right * ClientRect.right / dwScreenWidth;
|
||||||
|
RetRect.top = lpRect->top * ClientRect.bottom / dwScreenHeight;
|
||||||
|
RetRect.bottom = lpRect->bottom * ClientRect.bottom / dwScreenHeight;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
RetRect=ClientRect;
|
||||||
|
}
|
||||||
|
if(!(*pClientToScreen)(hWnd, &UpLeft)){
|
||||||
|
OutTraceE("ClientToScreen ERROR: err=%d hwnd=%x at %d\n", GetLastError(), hWnd, __LINE__);
|
||||||
|
}
|
||||||
|
if(!OffsetRect(&RetRect ,UpLeft.x, UpLeft.y)){
|
||||||
|
OutTraceE("OffsetRect ERROR: err=%d hwnd=%x at %d\n", GetLastError(), hWnd, __LINE__);
|
||||||
|
}
|
||||||
|
return RetRect;
|
||||||
|
}
|
||||||
|
|
||||||
|
void dxwCore::ScreenRefresh(void)
|
||||||
|
{
|
||||||
|
// optimization: don't blit too often!
|
||||||
|
// 20mSec seems a good compromise.
|
||||||
|
#define DXWREFRESHINTERVAL 20
|
||||||
|
|
||||||
|
LPDIRECTDRAWSURFACE lpDDSPrim;
|
||||||
|
extern LPDIRECTDRAWSURFACE GetPrimarySurface();
|
||||||
|
extern HRESULT WINAPI extBlt(LPDIRECTDRAWSURFACE lpdds, LPRECT lpdestrect, LPDIRECTDRAWSURFACE lpddssrc, LPRECT lpsrcrect, DWORD dwflags, LPDDBLTFX lpddbltfx);
|
||||||
|
|
||||||
|
static int t = -1;
|
||||||
|
if (t == -1)
|
||||||
|
t = GetTickCount()-(DXWREFRESHINTERVAL+1); // V.2.1.69: trick - subtract
|
||||||
|
int tn = GetTickCount();
|
||||||
|
|
||||||
|
if (tn-t < DXWREFRESHINTERVAL) return;
|
||||||
|
|
||||||
|
lpDDSPrim=GetPrimarySurface();
|
||||||
|
// if too early ....
|
||||||
|
if (lpDDSPrim)
|
||||||
|
extBlt(lpDDSPrim, NULL, lpDDSPrim, NULL, 0, NULL);
|
||||||
|
|
||||||
|
(*pInvalidateRect)(hWnd, NULL, FALSE);
|
||||||
|
t = tn;
|
||||||
|
}
|
@ -1,7 +1,5 @@
|
|||||||
#include <windows.h>
|
#include <windows.h>
|
||||||
|
|
||||||
#define CLIP_TOLERANCE 4
|
|
||||||
|
|
||||||
class dxwCore
|
class dxwCore
|
||||||
{
|
{
|
||||||
// Construction/destruction
|
// Construction/destruction
|
||||||
@ -10,15 +8,46 @@ public:
|
|||||||
virtual ~dxwCore();
|
virtual ~dxwCore();
|
||||||
|
|
||||||
// Operations
|
// Operations
|
||||||
public:
|
public: // methods
|
||||||
void SethWnd(HWND);
|
void SethWnd(HWND hwnd) {hWnd=hwnd;}
|
||||||
public:
|
HWND GethWnd(void) {return hWnd;}
|
||||||
|
void SetScreenSize(void) {dwScreenWidth=800; dwScreenHeight=600;}
|
||||||
|
void SetScreenSize(int x, int y) {if(x)dwScreenWidth=x; if(y)dwScreenHeight=y;}
|
||||||
|
DWORD GetScreenWidth(void) {return dwScreenWidth;}
|
||||||
|
DWORD GetScreenHeight(void) {return dwScreenHeight;}
|
||||||
|
RECT GetScreenRect(void);
|
||||||
|
void SetFullScreen(BOOL fs) {FullScreen=fs;}
|
||||||
|
BOOL IsFullScreen() {return FullScreen;}
|
||||||
POINT FixCursorPos(POINT);
|
POINT FixCursorPos(POINT);
|
||||||
|
POINT FixCursorPos(HWND, POINT);
|
||||||
|
void FixNCHITCursorPos(LPPOINT);
|
||||||
|
void SetClipCursor(void);
|
||||||
|
void EraseClipCursor(void);
|
||||||
|
RECT MapWindowRect(LPRECT lpRect);
|
||||||
|
RECT MapWindowRect(void);
|
||||||
|
void ScreenRefresh(void);
|
||||||
|
|
||||||
|
public: // simple data variables
|
||||||
|
DDPIXELFORMAT ActualPixelFormat;
|
||||||
|
DDPIXELFORMAT VirtualPixelFormat;
|
||||||
|
DWORD dwPrimarySurfaceCaps;
|
||||||
|
DWORD dwBackBufferCount;
|
||||||
|
DWORD dwDDVersion;
|
||||||
|
DWORD dwMaxDDVersion;
|
||||||
|
DWORD dwFlags1;
|
||||||
|
DWORD dwFlags2;
|
||||||
|
DWORD dwTFlags;
|
||||||
|
HWND hParentWnd;
|
||||||
|
HWND hChildWnd;
|
||||||
|
BOOL bActive;
|
||||||
|
BOOL bDInputAbs;
|
||||||
|
|
||||||
// Implementation
|
// Implementation
|
||||||
protected:
|
protected:
|
||||||
|
DWORD dwScreenWidth;
|
||||||
|
DWORD dwScreenHeight;
|
||||||
|
BOOL FullScreen;
|
||||||
HWND hWnd;
|
HWND hWnd;
|
||||||
int dwScreenWidth;
|
|
||||||
int dwScreenHeight;
|
|
||||||
BOOL IsFullScreen;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
|
extern dxwCore dxw;
|
||||||
|
@ -23,7 +23,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include "dxwnd.h"
|
#include "dxwnd.h"
|
||||||
|
|
||||||
#define VERSION "2.01.100"
|
#define VERSION "2.02.00"
|
||||||
|
|
||||||
LRESULT CALLBACK HookProc(int ncode, WPARAM wparam, LPARAM lparam);
|
LRESULT CALLBACK HookProc(int ncode, WPARAM wparam, LPARAM lparam);
|
||||||
|
|
||||||
|
20
dll/dxwnd.ws2008.sln
Normal file
20
dll/dxwnd.ws2008.sln
Normal file
@ -0,0 +1,20 @@
|
|||||||
|
|
||||||
|
Microsoft Visual Studio Solution File, Format Version 10.00
|
||||||
|
# Visual Studio 2008
|
||||||
|
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "dxwnd", "dxwnd.ws2008.vcproj", "{579E7FE7-2745-4100-A802-23511711FCDE}"
|
||||||
|
EndProject
|
||||||
|
Global
|
||||||
|
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
||||||
|
Debug|Win32 = Debug|Win32
|
||||||
|
Release|Win32 = Release|Win32
|
||||||
|
EndGlobalSection
|
||||||
|
GlobalSection(ProjectConfigurationPlatforms) = postSolution
|
||||||
|
{579E7FE7-2745-4100-A802-23511711FCDE}.Debug|Win32.ActiveCfg = Debug|Win32
|
||||||
|
{579E7FE7-2745-4100-A802-23511711FCDE}.Debug|Win32.Build.0 = Debug|Win32
|
||||||
|
{579E7FE7-2745-4100-A802-23511711FCDE}.Release|Win32.ActiveCfg = Release|Win32
|
||||||
|
{579E7FE7-2745-4100-A802-23511711FCDE}.Release|Win32.Build.0 = Release|Win32
|
||||||
|
EndGlobalSection
|
||||||
|
GlobalSection(SolutionProperties) = preSolution
|
||||||
|
HideSolutionNode = FALSE
|
||||||
|
EndGlobalSection
|
||||||
|
EndGlobal
|
BIN
dll/dxwnd.ws2008.suo
Normal file
BIN
dll/dxwnd.ws2008.suo
Normal file
Binary file not shown.
@ -244,6 +244,10 @@
|
|||||||
/>
|
/>
|
||||||
</FileConfiguration>
|
</FileConfiguration>
|
||||||
</File>
|
</File>
|
||||||
|
<File
|
||||||
|
RelativePath=".\dxwcore.cpp"
|
||||||
|
>
|
||||||
|
</File>
|
||||||
<File
|
<File
|
||||||
RelativePath="dxwnd.cpp"
|
RelativePath="dxwnd.cpp"
|
||||||
>
|
>
|
||||||
@ -357,6 +361,10 @@
|
|||||||
RelativePath="dxhook.h"
|
RelativePath="dxhook.h"
|
||||||
>
|
>
|
||||||
</File>
|
</File>
|
||||||
|
<File
|
||||||
|
RelativePath=".\dxwcore.hpp"
|
||||||
|
>
|
||||||
|
</File>
|
||||||
<File
|
<File
|
||||||
RelativePath="..\Include\dxwnd.h"
|
RelativePath="..\Include\dxwnd.h"
|
||||||
>
|
>
|
||||||
|
@ -1,4 +1,5 @@
|
|||||||
#include "dxwnd.h"
|
#include "dxwnd.h"
|
||||||
|
#include "dxwcore.hpp"
|
||||||
#include "syslibs.h"
|
#include "syslibs.h"
|
||||||
#include "dxhook.h"
|
#include "dxhook.h"
|
||||||
#include "glhook.h"
|
#include "glhook.h"
|
||||||
@ -14,14 +15,14 @@ extern short iPosX, iPosY, iSizX, iSizY;
|
|||||||
void WINAPI extglViewport(GLint x, GLint y, GLsizei width, GLsizei height)
|
void WINAPI extglViewport(GLint x, GLint y, GLsizei width, GLsizei height)
|
||||||
{
|
{
|
||||||
RECT client;
|
RECT client;
|
||||||
(*pGetClientRect)(hWnd, &client);
|
(*pGetClientRect)(dxw.GethWnd(), &client);
|
||||||
OutTraceD("glViewport: declared pos=(%d,%d) size=(%d,%d)\n", x, y, width, height);
|
OutTraceD("glViewport: declared pos=(%d,%d) size=(%d,%d)\n", x, y, width, height);
|
||||||
if(IsDebug) OutTrace("glViewport: DEBUG win=(%d,%d) screen=(%d,%d)\n",
|
if(IsDebug) OutTrace("glViewport: DEBUG win=(%d,%d) screen=(%d,%d)\n",
|
||||||
client.right, client.bottom, VirtualScr.dwWidth, VirtualScr.dwHeight);
|
client.right, client.bottom, dxw.GetScreenWidth(), dxw.GetScreenHeight());
|
||||||
x = (x * (GLint)client.right) / (GLint)VirtualScr.dwWidth;
|
x = (x * (GLint)client.right) / (GLint)dxw.GetScreenWidth();
|
||||||
y = (y * (GLint)client.bottom) / (GLint)VirtualScr.dwHeight;
|
y = (y * (GLint)client.bottom) / (GLint)dxw.GetScreenHeight();
|
||||||
width = (width * (GLint)client.right) / (GLint)VirtualScr.dwWidth;
|
width = (width * (GLint)client.right) / (GLint)dxw.GetScreenWidth();
|
||||||
height = (height * (GLint)client.bottom) / (GLint)VirtualScr.dwHeight;
|
height = (height * (GLint)client.bottom) / (GLint)dxw.GetScreenHeight();
|
||||||
OutTraceD("glViewport: remapped pos=(%d,%d) size=(%d,%d)\n", x, y, width, height);
|
OutTraceD("glViewport: remapped pos=(%d,%d) size=(%d,%d)\n", x, y, width, height);
|
||||||
(*pglViewport)(x, y, width, height);
|
(*pglViewport)(x, y, width, height);
|
||||||
}
|
}
|
||||||
@ -29,12 +30,12 @@ void WINAPI extglViewport(GLint x, GLint y, GLsizei width, GLsizei height
|
|||||||
void WINAPI extglScissor(GLint x, GLint y, GLsizei width, GLsizei height)
|
void WINAPI extglScissor(GLint x, GLint y, GLsizei width, GLsizei height)
|
||||||
{
|
{
|
||||||
RECT client;
|
RECT client;
|
||||||
(*pGetClientRect)(hWnd, &client);
|
(*pGetClientRect)(dxw.GethWnd(), &client);
|
||||||
OutTraceD("glScissor: declared pos=(%d,%d) size=(%d,%d)\n", x, y, width, height);
|
OutTraceD("glScissor: declared pos=(%d,%d) size=(%d,%d)\n", x, y, width, height);
|
||||||
x = (x * (GLint)client.right) / (GLint)VirtualScr.dwWidth;
|
x = (x * (GLint)client.right) / (GLint)dxw.GetScreenWidth();
|
||||||
y = (y * (GLint)client.bottom) / (GLint)VirtualScr.dwHeight;
|
y = (y * (GLint)client.bottom) / (GLint)dxw.GetScreenHeight();
|
||||||
width = (width * (GLint)client.right) / (GLint)VirtualScr.dwWidth;
|
width = (width * (GLint)client.right) / (GLint)dxw.GetScreenWidth();
|
||||||
height = (height * (GLint)client.bottom) / (GLint)VirtualScr.dwHeight;
|
height = (height * (GLint)client.bottom) / (GLint)dxw.GetScreenHeight();
|
||||||
OutTraceD("glScissor: remapped pos=(%d,%d) size=(%d,%d)\n", x, y, width, height);
|
OutTraceD("glScissor: remapped pos=(%d,%d) size=(%d,%d)\n", x, y, width, height);
|
||||||
(*pglScissor)(x, y, width, height);
|
(*pglScissor)(x, y, width, height);
|
||||||
}
|
}
|
||||||
|
34
dll/hd3d.cpp
34
dll/hd3d.cpp
@ -1,6 +1,7 @@
|
|||||||
#include <windows.h>
|
#include <windows.h>
|
||||||
#include <d3d9.h>
|
#include <d3d9.h>
|
||||||
#include "dxwnd.h"
|
#include "dxwnd.h"
|
||||||
|
#include "dxwcore.hpp"
|
||||||
|
|
||||||
typedef void* (WINAPI *Direct3DCreate8_Type)(UINT);
|
typedef void* (WINAPI *Direct3DCreate8_Type)(UINT);
|
||||||
typedef void* (WINAPI *Direct3DCreate9_Type)(UINT);
|
typedef void* (WINAPI *Direct3DCreate9_Type)(UINT);
|
||||||
@ -18,9 +19,6 @@ HRESULT WINAPI extEnumAdapterModes9(void *, UINT, D3DFORMAT, UINT , D3DDISPLAYMO
|
|||||||
HRESULT WINAPI extGetAdapterDisplayMode(void *, UINT, D3DDISPLAYMODE *);
|
HRESULT WINAPI extGetAdapterDisplayMode(void *, UINT, D3DDISPLAYMODE *);
|
||||||
HRESULT WINAPI extGetDisplayMode(void *, D3DDISPLAYMODE *);
|
HRESULT WINAPI extGetDisplayMode(void *, D3DDISPLAYMODE *);
|
||||||
|
|
||||||
extern HWND hWnd;
|
|
||||||
extern DWORD dwFlags;
|
|
||||||
extern BOOL bActive;
|
|
||||||
extern char *ExplainDDError(DWORD);
|
extern char *ExplainDDError(DWORD);
|
||||||
|
|
||||||
Direct3DCreate8_Type pDirect3DCreate8 = 0;
|
Direct3DCreate8_Type pDirect3DCreate8 = 0;
|
||||||
@ -115,7 +113,7 @@ HRESULT WINAPI extGetDisplayMode(void *lpd3d, D3DDISPLAYMODE *pMode)
|
|||||||
res=(*pGetDisplayMode)(lpd3d, pMode);
|
res=(*pGetDisplayMode)(lpd3d, pMode);
|
||||||
OutTraceD("DEBUG: GetDisplayMode: size=(%dx%d) RefreshRate=%d Format=%d\n",
|
OutTraceD("DEBUG: GetDisplayMode: size=(%dx%d) RefreshRate=%d Format=%d\n",
|
||||||
pMode->Width, pMode->Height, pMode->RefreshRate, pMode->Format);
|
pMode->Width, pMode->Height, pMode->RefreshRate, pMode->Format);
|
||||||
if(dwFlags2 & KEEPASPECTRATIO){
|
if(dxw.dwFlags2 & KEEPASPECTRATIO){
|
||||||
pMode->Width=iSizX;
|
pMode->Width=iSizX;
|
||||||
pMode->Height=iSizY;
|
pMode->Height=iSizY;
|
||||||
OutTraceD("DEBUG: GetDisplayMode: fixed size=(%dx%d)\n", pMode->Width, pMode->Height);
|
OutTraceD("DEBUG: GetDisplayMode: fixed size=(%dx%d)\n", pMode->Width, pMode->Height);
|
||||||
@ -148,7 +146,7 @@ HRESULT WINAPI extGetAdapterDisplayMode(void *lpd3d, UINT Adapter, D3DDISPLAYMOD
|
|||||||
res=(*pGetAdapterDisplayMode)(lpd3d, Adapter, pMode);
|
res=(*pGetAdapterDisplayMode)(lpd3d, Adapter, pMode);
|
||||||
OutTraceD("DEBUG: GetAdapterDisplayMode: size=(%dx%d) RefreshRate=%d Format=%d\n",
|
OutTraceD("DEBUG: GetAdapterDisplayMode: size=(%dx%d) RefreshRate=%d Format=%d\n",
|
||||||
pMode->Width, pMode->Height, pMode->RefreshRate, pMode->Format);
|
pMode->Width, pMode->Height, pMode->RefreshRate, pMode->Format);
|
||||||
if(dwFlags2 & KEEPASPECTRATIO){
|
if(dxw.dwFlags2 & KEEPASPECTRATIO){
|
||||||
pMode->Width=iSizX;
|
pMode->Width=iSizX;
|
||||||
pMode->Height=iSizY;
|
pMode->Height=iSizY;
|
||||||
OutTraceD("DEBUG: GetDisplayMode: fixed size=(%dx%d)\n", pMode->Width, pMode->Height);
|
OutTraceD("DEBUG: GetDisplayMode: fixed size=(%dx%d)\n", pMode->Width, pMode->Height);
|
||||||
@ -163,7 +161,6 @@ HRESULT WINAPI extCreateDevice(void *lpd3d, UINT adapter, D3DDEVTYPE devicetype,
|
|||||||
DWORD param[64], *tmp;
|
DWORD param[64], *tmp;
|
||||||
D3DDISPLAYMODE mode;
|
D3DDISPLAYMODE mode;
|
||||||
int Windowed;
|
int Windowed;
|
||||||
extern BOOL isFullScreen;
|
|
||||||
|
|
||||||
if(dwD3DVersion == 9){
|
if(dwD3DVersion == 9){
|
||||||
memcpy(param, ppresentparam, 56);
|
memcpy(param, ppresentparam, 56);
|
||||||
@ -174,16 +171,9 @@ HRESULT WINAPI extCreateDevice(void *lpd3d, UINT adapter, D3DDEVTYPE devicetype,
|
|||||||
OutTraceD("D3D8::CreateDevice\n");
|
OutTraceD("D3D8::CreateDevice\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
hWnd = hfocuswindow;
|
dxw.SethWnd(hfocuswindow);
|
||||||
VirtualScr.dwWidth = param[0];
|
dxw.SetScreenSize(param[0], param[1]);
|
||||||
VirtualScr.dwHeight = param[1];
|
AdjustWindowFrame(dxw.GethWnd(), dxw.GetScreenWidth(), dxw.GetScreenHeight());
|
||||||
// The Fellowship of the Ring: starts with 0,0 size, but this doesn't fully help
|
|
||||||
//if ((VirtualScr.dwWidth==0) && (VirtualScr.dwHeight==0)){
|
|
||||||
// OutTraceD("CreateDevice: setting default size 800x600\n");
|
|
||||||
// VirtualScr.dwWidth=800;
|
|
||||||
// VirtualScr.dwHeight=600;
|
|
||||||
//}
|
|
||||||
AdjustWindowFrame(hWnd, VirtualScr.dwWidth, VirtualScr.dwHeight);
|
|
||||||
|
|
||||||
tmp = param;
|
tmp = param;
|
||||||
OutTraceD(" Adapter = %i\n", adapter);
|
OutTraceD(" Adapter = %i\n", adapter);
|
||||||
@ -213,14 +203,14 @@ HRESULT WINAPI extCreateDevice(void *lpd3d, UINT adapter, D3DDEVTYPE devicetype,
|
|||||||
|
|
||||||
if(dwD3DVersion == 9){
|
if(dwD3DVersion == 9){
|
||||||
param[7] = 0; //hDeviceWindow
|
param[7] = 0; //hDeviceWindow
|
||||||
isFullScreen = ~param[8]?TRUE:FALSE;
|
dxw.SetFullScreen(~param[8]?TRUE:FALSE);
|
||||||
param[8] = 1; //Windowed
|
param[8] = 1; //Windowed
|
||||||
param[12] = 0; //FullScreen_RefreshRateInHz;
|
param[12] = 0; //FullScreen_RefreshRateInHz;
|
||||||
param[13] = D3DPRESENT_INTERVAL_DEFAULT; //PresentationInterval
|
param[13] = D3DPRESENT_INTERVAL_DEFAULT; //PresentationInterval
|
||||||
}
|
}
|
||||||
else{
|
else{
|
||||||
param[6] = 0; //hDeviceWindow
|
param[6] = 0; //hDeviceWindow
|
||||||
isFullScreen = ~param[7]?TRUE:FALSE;
|
dxw.SetFullScreen(~param[7]?TRUE:FALSE);
|
||||||
param[7] = 1; //Windowed
|
param[7] = 1; //Windowed
|
||||||
param[11] = 0; //FullScreen_RefreshRateInHz;
|
param[11] = 0; //FullScreen_RefreshRateInHz;
|
||||||
param[12] = D3DPRESENT_INTERVAL_DEFAULT; //PresentationInterval
|
param[12] = D3DPRESENT_INTERVAL_DEFAULT; //PresentationInterval
|
||||||
@ -246,11 +236,11 @@ HRESULT WINAPI extCreateDevice(void *lpd3d, UINT adapter, D3DDEVTYPE devicetype,
|
|||||||
SetHook((void *)(**(DWORD **)ppd3dd + 64), extReset, (void **)&pReset, "Reset(D9)");
|
SetHook((void *)(**(DWORD **)ppd3dd + 64), extReset, (void **)&pReset, "Reset(D9)");
|
||||||
}
|
}
|
||||||
|
|
||||||
DxWndStatus.IsFullScreen = isFullScreen;
|
DxWndStatus.IsFullScreen = dxw.IsFullScreen();
|
||||||
DxWndStatus.DXVersion=(short)dwD3DVersion;
|
DxWndStatus.DXVersion=(short)dwD3DVersion;
|
||||||
DxWndStatus.Height=(short)VirtualScr.dwHeight;
|
DxWndStatus.Height=(short)dxw.GetScreenHeight();
|
||||||
DxWndStatus.Width=(short)VirtualScr.dwWidth;
|
DxWndStatus.Width=(short)dxw.GetScreenWidth();
|
||||||
DxWndStatus.ColorDepth=(short)VirtualScr.PixelFormat.dwRGBBitCount;
|
DxWndStatus.ColorDepth=(short)dxw.VirtualPixelFormat.dwRGBBitCount;
|
||||||
SetHookStatus(&DxWndStatus);
|
SetHookStatus(&DxWndStatus);
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
|
@ -13,6 +13,7 @@
|
|||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include <stdarg.h>
|
#include <stdarg.h>
|
||||||
#include "dxwnd.h"
|
#include "dxwnd.h"
|
||||||
|
#include "dxwcore.hpp"
|
||||||
#include "dxhook.h"
|
#include "dxhook.h"
|
||||||
#include "syslibs.h"
|
#include "syslibs.h"
|
||||||
#include "dxhelper.h"
|
#include "dxhelper.h"
|
||||||
@ -280,7 +281,7 @@ int HookDDProxy(int dxVersion)
|
|||||||
// LPDIRECTDRAW lpdd;
|
// LPDIRECTDRAW lpdd;
|
||||||
// BOOL res;
|
// BOOL res;
|
||||||
|
|
||||||
dwFlags |= OUTDDRAWTRACE;
|
dxw.dwFlags1 |= OUTDDRAWTRACE;
|
||||||
|
|
||||||
pCreateCompatibleDC=CreateCompatibleDC;
|
pCreateCompatibleDC=CreateCompatibleDC;
|
||||||
pGDIGetDC=GetDC;
|
pGDIGetDC=GetDC;
|
||||||
@ -1747,7 +1748,7 @@ static void HookDDSessionProxy(LPDIRECTDRAW *lplpdd, int dxVersion)
|
|||||||
HRESULT WINAPI extDirectDrawCreateProxy(GUID FAR *lpguid, LPDIRECTDRAW FAR *lplpdd, IUnknown FAR *pu)
|
HRESULT WINAPI extDirectDrawCreateProxy(GUID FAR *lpguid, LPDIRECTDRAW FAR *lplpdd, IUnknown FAR *pu)
|
||||||
{
|
{
|
||||||
HRESULT res;
|
HRESULT res;
|
||||||
int dwDDVersion;
|
int DDVersion;
|
||||||
|
|
||||||
OutTraceP("DirectDrawCreate: PROXED guid=%x(%s)\n",
|
OutTraceP("DirectDrawCreate: PROXED guid=%x(%s)\n",
|
||||||
lpguid, ExplainGUID(lpguid));
|
lpguid, ExplainGUID(lpguid));
|
||||||
@ -1758,19 +1759,19 @@ HRESULT WINAPI extDirectDrawCreateProxy(GUID FAR *lpguid, LPDIRECTDRAW FAR *lplp
|
|||||||
return res;
|
return res;
|
||||||
}
|
}
|
||||||
|
|
||||||
dwDDVersion=1;
|
DDVersion=1;
|
||||||
if (lpguid) switch (*(DWORD *)lpguid){
|
if (lpguid) switch (*(DWORD *)lpguid){
|
||||||
case 0x6C14DB80: dwDDVersion=1; break;
|
case 0x6C14DB80: DDVersion=1; break;
|
||||||
case 0xB3A6F3E0: dwDDVersion=2; break;
|
case 0xB3A6F3E0: DDVersion=2; break;
|
||||||
case 0x9c59509a: dwDDVersion=4; break;
|
case 0x9c59509a: DDVersion=4; break;
|
||||||
case 0x15e65ec0: dwDDVersion=7; break;
|
case 0x15e65ec0: DDVersion=7; break;
|
||||||
}
|
}
|
||||||
|
|
||||||
OutTraceP("DirectDrawCreate: lpdd=%x guid=%x DDVersion=%d\n",
|
OutTraceP("DirectDrawCreate: lpdd=%x guid=%x DDVersion=%d\n",
|
||||||
*lplpdd, (lpguid ? *(DWORD *)lpguid:0), dwDDVersion);
|
*lplpdd, (lpguid ? *(DWORD *)lpguid:0), DDVersion);
|
||||||
|
|
||||||
#ifdef HOOKDDRAW
|
#ifdef HOOKDDRAW
|
||||||
HookDDSessionProxy(lplpdd, dwDDVersion);
|
HookDDSessionProxy(lplpdd, DDVersion);
|
||||||
#endif
|
#endif
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
@ -1778,7 +1779,7 @@ HRESULT WINAPI extDirectDrawCreateProxy(GUID FAR *lpguid, LPDIRECTDRAW FAR *lplp
|
|||||||
HRESULT WINAPI extDirectDrawCreateExProxy(GUID FAR *lpguid, LPDIRECTDRAW FAR *lplpdd, REFIID RefIid, IUnknown FAR *pu)
|
HRESULT WINAPI extDirectDrawCreateExProxy(GUID FAR *lpguid, LPDIRECTDRAW FAR *lplpdd, REFIID RefIid, IUnknown FAR *pu)
|
||||||
{
|
{
|
||||||
HRESULT res;
|
HRESULT res;
|
||||||
int dwDDVersion;
|
int DDVersion;
|
||||||
|
|
||||||
OutTraceP("DirectDrawCreateEx: PROXED guid=%x(%s) refiid=%x\n",
|
OutTraceP("DirectDrawCreateEx: PROXED guid=%x(%s) refiid=%x\n",
|
||||||
lpguid, ExplainGUID(lpguid), RefIid);
|
lpguid, ExplainGUID(lpguid), RefIid);
|
||||||
@ -1789,19 +1790,19 @@ HRESULT WINAPI extDirectDrawCreateExProxy(GUID FAR *lpguid, LPDIRECTDRAW FAR *lp
|
|||||||
return res;
|
return res;
|
||||||
}
|
}
|
||||||
|
|
||||||
dwDDVersion=1;
|
DDVersion=1;
|
||||||
if (lpguid) switch (*(DWORD *)lpguid){
|
if (lpguid) switch (*(DWORD *)lpguid){
|
||||||
case 0x6C14DB80: dwDDVersion=1; break;
|
case 0x6C14DB80: DDVersion=1; break;
|
||||||
case 0xB3A6F3E0: dwDDVersion=2; break;
|
case 0xB3A6F3E0: DDVersion=2; break;
|
||||||
case 0x9c59509a: dwDDVersion=4; break;
|
case 0x9c59509a: DDVersion=4; break;
|
||||||
case 0x15e65ec0: dwDDVersion=7; break;
|
case 0x15e65ec0: DDVersion=7; break;
|
||||||
}
|
}
|
||||||
|
|
||||||
OutTraceP("DirectDrawCreateEx: lpdd=%x guid=%x DDVersion=%d\n",
|
OutTraceP("DirectDrawCreateEx: lpdd=%x guid=%x DDVersion=%d\n",
|
||||||
*lplpdd, (lpguid ? *(DWORD *)lpguid:0), dwDDVersion);
|
*lplpdd, (lpguid ? *(DWORD *)lpguid:0), DDVersion);
|
||||||
|
|
||||||
#ifdef HOOKDDRAW
|
#ifdef HOOKDDRAW
|
||||||
HookDDSessionProxy(lplpdd, dwDDVersion);
|
HookDDSessionProxy(lplpdd, DDVersion);
|
||||||
#endif
|
#endif
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
@ -1854,7 +1855,7 @@ HRESULT WINAPI extDirectDrawEnumerateExProxy(LPDDENUMCALLBACKEX lpCallback, LPVO
|
|||||||
{
|
{
|
||||||
HRESULT ret;
|
HRESULT ret;
|
||||||
OutTraceP("DirectDrawEnumerateEx: PROXED lpCallback=%x lpContext=%x Flags=%x(%s)\n",
|
OutTraceP("DirectDrawEnumerateEx: PROXED lpCallback=%x lpContext=%x Flags=%x(%s)\n",
|
||||||
lpCallback, lpContext, dwFlags, ExplainDDEnumerateFlags(dwFlags));
|
lpCallback, lpContext, dxw.dwFlags1, ExplainDDEnumerateFlags(dwFlags));
|
||||||
(*pDirectDrawEnumerateEx)(DDEnumerateCallbackEx, lpContext, dwFlags);
|
(*pDirectDrawEnumerateEx)(DDEnumerateCallbackEx, lpContext, dwFlags);
|
||||||
ret=(*pDirectDrawEnumerateEx)(lpCallback, lpContext, dwFlags);
|
ret=(*pDirectDrawEnumerateEx)(lpCallback, lpContext, dwFlags);
|
||||||
if(ret) OutTraceP("DirectDrawEnumerateEx: ERROR res=%x(%s)\n", ret, ExplainDDError(ret));
|
if(ret) OutTraceP("DirectDrawEnumerateEx: ERROR res=%x(%s)\n", ret, ExplainDDError(ret));
|
||||||
|
504
dll/hddraw.cpp
504
dll/hddraw.cpp
File diff suppressed because it is too large
Load Diff
@ -1,6 +1,7 @@
|
|||||||
#include <windows.h>
|
#include <windows.h>
|
||||||
#include <dinput.h>
|
#include <dinput.h>
|
||||||
#include "dxwnd.h"
|
#include "dxwnd.h"
|
||||||
|
#include "dxwcore.hpp"
|
||||||
#include "syslibs.h"
|
#include "syslibs.h"
|
||||||
|
|
||||||
typedef HRESULT (WINAPI *QueryInterface_Type)(void *, REFIID, LPVOID *);
|
typedef HRESULT (WINAPI *QueryInterface_Type)(void *, REFIID, LPVOID *);
|
||||||
@ -26,12 +27,6 @@ HRESULT WINAPI extQueryInterfaceI(void *, REFIID, LPVOID *);
|
|||||||
void GetMousePosition(int *, int *);
|
void GetMousePosition(int *, int *);
|
||||||
void InitPosition(int, int, int, int, int, int);
|
void InitPosition(int, int, int, int, int, int);
|
||||||
|
|
||||||
extern DWORD dwFlags;
|
|
||||||
extern BOOL bActive;
|
|
||||||
extern HWND hWnd;
|
|
||||||
extern DWORD dwWidth;
|
|
||||||
extern DWORD dwHeight;
|
|
||||||
|
|
||||||
DirectInputCreate_Type pDirectInputCreate = 0;
|
DirectInputCreate_Type pDirectInputCreate = 0;
|
||||||
DirectInputCreateEx_Type pDirectInputCreateEx = 0;
|
DirectInputCreateEx_Type pDirectInputCreateEx = 0;
|
||||||
DICreateDevice_Type pDICreateDevice = 0;
|
DICreateDevice_Type pDICreateDevice = 0;
|
||||||
@ -42,8 +37,6 @@ DISetCooperativeLevel_Type pDISetCooperativeLevel;
|
|||||||
SetDataFormat_Type pSetDataFormat;
|
SetDataFormat_Type pSetDataFormat;
|
||||||
QueryInterface_Type pQueryInterfaceI;
|
QueryInterface_Type pQueryInterfaceI;
|
||||||
|
|
||||||
BOOL bDInputAbs = 0;
|
|
||||||
|
|
||||||
int iCursorX;
|
int iCursorX;
|
||||||
int iCursorY;
|
int iCursorY;
|
||||||
int iCursorXBuf;
|
int iCursorXBuf;
|
||||||
@ -205,14 +198,14 @@ HRESULT WINAPI extGetDeviceData(LPDIRECTINPUTDEVICE lpdid, DWORD cbdata, LPVOID
|
|||||||
res = (*pGetDeviceData)(lpdid, cbdata, rgdod, pdwinout, dwflags);
|
res = (*pGetDeviceData)(lpdid, cbdata, rgdod, pdwinout, dwflags);
|
||||||
if(res) return res;
|
if(res) return res;
|
||||||
|
|
||||||
if(!bActive) *pdwinout = 0;
|
if(!dxw.bActive) *pdwinout = 0;
|
||||||
GetMousePosition((int *)&p.x, (int *)&p.y);
|
GetMousePosition((int *)&p.x, (int *)&p.y);
|
||||||
if(cbdata == 20 || cbdata == 24){
|
if(cbdata == 20 || cbdata == 24){
|
||||||
tmp = (BYTE *)rgdod;
|
tmp = (BYTE *)rgdod;
|
||||||
for(i = 0; i < *pdwinout; i ++){
|
for(i = 0; i < *pdwinout; i ++){
|
||||||
if(((LPDIDEVICEOBJECTDATA)tmp)->dwOfs == DIMOFS_X){
|
if(((LPDIDEVICEOBJECTDATA)tmp)->dwOfs == DIMOFS_X){
|
||||||
((LPDIDEVICEOBJECTDATA)tmp)->dwData = p.x;
|
((LPDIDEVICEOBJECTDATA)tmp)->dwData = p.x;
|
||||||
if(!bDInputAbs){
|
if(!dxw.bDInputAbs){
|
||||||
if(p.x < iCurMinX) p.x = iCurMinX;
|
if(p.x < iCurMinX) p.x = iCurMinX;
|
||||||
if(p.x > iCurMaxX) p.x = iCurMaxX;
|
if(p.x > iCurMaxX) p.x = iCurMaxX;
|
||||||
((LPDIDEVICEOBJECTDATA)tmp)->dwData = p.x - iCursorXBuf;
|
((LPDIDEVICEOBJECTDATA)tmp)->dwData = p.x - iCursorXBuf;
|
||||||
@ -221,7 +214,7 @@ HRESULT WINAPI extGetDeviceData(LPDIRECTINPUTDEVICE lpdid, DWORD cbdata, LPVOID
|
|||||||
}
|
}
|
||||||
if(((LPDIDEVICEOBJECTDATA)tmp)->dwOfs == DIMOFS_Y){
|
if(((LPDIDEVICEOBJECTDATA)tmp)->dwOfs == DIMOFS_Y){
|
||||||
((LPDIDEVICEOBJECTDATA)tmp)->dwData = p.y;
|
((LPDIDEVICEOBJECTDATA)tmp)->dwData = p.y;
|
||||||
if(!bDInputAbs){
|
if(!dxw.bDInputAbs){
|
||||||
if(p.y < iCurMinY) p.y = iCurMinY;
|
if(p.y < iCurMinY) p.y = iCurMinY;
|
||||||
if(p.y > iCurMaxY) p.y = iCurMaxY;
|
if(p.y > iCurMaxY) p.y = iCurMaxY;
|
||||||
((LPDIDEVICEOBJECTDATA)tmp)->dwData = p.y - iCursorYBuf;
|
((LPDIDEVICEOBJECTDATA)tmp)->dwData = p.y - iCursorYBuf;
|
||||||
@ -240,7 +233,7 @@ HRESULT WINAPI extGetDeviceState(LPDIRECTINPUTDEVICE lpdid, DWORD cbdata, LPDIMO
|
|||||||
HRESULT res;
|
HRESULT res;
|
||||||
POINT p = {0, 0};
|
POINT p = {0, 0};
|
||||||
|
|
||||||
OutTraceD("GetDeviceState cbData:%i %i\n", cbdata, bActive);
|
OutTraceD("GetDeviceState cbData:%i %i\n", cbdata, dxw.bActive);
|
||||||
|
|
||||||
res = (*pGetDeviceState)(lpdid, cbdata, lpvdata);
|
res = (*pGetDeviceState)(lpdid, cbdata, lpvdata);
|
||||||
if(res) return res;
|
if(res) return res;
|
||||||
@ -248,7 +241,7 @@ HRESULT WINAPI extGetDeviceState(LPDIRECTINPUTDEVICE lpdid, DWORD cbdata, LPDIMO
|
|||||||
GetMousePosition((int *)&p.x, (int *)&p.y);
|
GetMousePosition((int *)&p.x, (int *)&p.y);
|
||||||
lpvdata->lX = p.x;
|
lpvdata->lX = p.x;
|
||||||
lpvdata->lY = p.y;
|
lpvdata->lY = p.y;
|
||||||
if(!bDInputAbs){
|
if(!dxw.bDInputAbs){
|
||||||
if(p.x < iCurMinX) p.x = iCurMinX;
|
if(p.x < iCurMinX) p.x = iCurMinX;
|
||||||
if(p.x > iCurMaxX) p.x = iCurMaxX;
|
if(p.x > iCurMaxX) p.x = iCurMaxX;
|
||||||
if(p.y < iCurMinY) p.y = iCurMinY;
|
if(p.y < iCurMinY) p.y = iCurMinY;
|
||||||
@ -258,14 +251,14 @@ HRESULT WINAPI extGetDeviceState(LPDIRECTINPUTDEVICE lpdid, DWORD cbdata, LPDIMO
|
|||||||
iCursorX = p.x;
|
iCursorX = p.x;
|
||||||
iCursorY = p.y;
|
iCursorY = p.y;
|
||||||
}
|
}
|
||||||
if(!bActive){
|
if(!dxw.bActive){
|
||||||
lpvdata->lZ = 0;
|
lpvdata->lZ = 0;
|
||||||
*(DWORD *)lpvdata->rgbButtons = 0;
|
*(DWORD *)lpvdata->rgbButtons = 0;
|
||||||
}
|
}
|
||||||
OutTraceD("DEBUG: directinput mousestate=(%d,%d)\n", p.x, p.y);
|
OutTraceD("DEBUG: directinput mousestate=(%d,%d)\n", p.x, p.y);
|
||||||
}
|
}
|
||||||
|
|
||||||
if(cbdata == 256 && !bActive) ZeroMemory(lpvdata, 256);
|
if(cbdata == 256 && !dxw.bActive) ZeroMemory(lpvdata, 256);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -273,8 +266,8 @@ HRESULT WINAPI extSetDataFormat(LPDIRECTINPUTDEVICE lpdid, LPCDIDATAFORMAT lpdf)
|
|||||||
{
|
{
|
||||||
OutTraceD("SetDataFormat: flags = 0x%x\n", lpdf->dwFlags);
|
OutTraceD("SetDataFormat: flags = 0x%x\n", lpdf->dwFlags);
|
||||||
|
|
||||||
if(lpdf->dwFlags & DIDF_ABSAXIS) bDInputAbs = 1;
|
if(lpdf->dwFlags & DIDF_ABSAXIS) dxw.bDInputAbs = 1;
|
||||||
if(lpdf->dwFlags & DIDF_RELAXIS) bDInputAbs = 0;
|
if(lpdf->dwFlags & DIDF_RELAXIS) dxw.bDInputAbs = 0;
|
||||||
return (*pSetDataFormat)(lpdid, lpdf);
|
return (*pSetDataFormat)(lpdid, lpdf);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
498
dll/syslibs.cpp
498
dll/syslibs.cpp
File diff suppressed because it is too large
Load Diff
@ -89,8 +89,6 @@ typedef BOOL (WINAPI *SetDeviceGammaRamp_Type)(HDC, LPVOID);
|
|||||||
typedef BOOL (WINAPI *GetDeviceGammaRamp_Type)(HDC, LPVOID);
|
typedef BOOL (WINAPI *GetDeviceGammaRamp_Type)(HDC, LPVOID);
|
||||||
typedef LRESULT (WINAPI *SendMessage_Type)(HWND, UINT, WPARAM, LPARAM);
|
typedef LRESULT (WINAPI *SendMessage_Type)(HWND, UINT, WPARAM, LPARAM);
|
||||||
|
|
||||||
extern DWORD dwFlags, dwFlags2;
|
|
||||||
extern HWND hWnd;
|
|
||||||
extern GetCursorPos_Type pGetCursorPos;
|
extern GetCursorPos_Type pGetCursorPos;
|
||||||
extern SetCursorPos_Type pSetCursorPos;
|
extern SetCursorPos_Type pSetCursorPos;
|
||||||
extern ClipCursor_Type pClipCursor;
|
extern ClipCursor_Type pClipCursor;
|
||||||
|
@ -5,6 +5,7 @@
|
|||||||
#include <malloc.h>
|
#include <malloc.h>
|
||||||
#include <ddraw.h>
|
#include <ddraw.h>
|
||||||
#include "dxwnd.h"
|
#include "dxwnd.h"
|
||||||
|
#include "dxwcore.hpp"
|
||||||
#include "dxhook.h"
|
#include "dxhook.h"
|
||||||
#include "syslibs.h"
|
#include "syslibs.h"
|
||||||
#include "dxhelper.h"
|
#include "dxhelper.h"
|
||||||
|
@ -131,6 +131,7 @@
|
|||||||
#define ID_TRAY_RESTORE 32808
|
#define ID_TRAY_RESTORE 32808
|
||||||
#define ID_VIEW_STATUS 32809
|
#define ID_VIEW_STATUS 32809
|
||||||
#define ID_DXAPP_EXIT 32810
|
#define ID_DXAPP_EXIT 32810
|
||||||
|
#define ID_SAVEFILE 32810
|
||||||
|
|
||||||
// Next default values for new objects
|
// Next default values for new objects
|
||||||
//
|
//
|
||||||
@ -138,7 +139,7 @@
|
|||||||
#ifndef APSTUDIO_READONLY_SYMBOLS
|
#ifndef APSTUDIO_READONLY_SYMBOLS
|
||||||
#define _APS_3D_CONTROLS 1
|
#define _APS_3D_CONTROLS 1
|
||||||
#define _APS_NEXT_RESOURCE_VALUE 150
|
#define _APS_NEXT_RESOURCE_VALUE 150
|
||||||
#define _APS_NEXT_COMMAND_VALUE 32809
|
#define _APS_NEXT_COMMAND_VALUE 32811
|
||||||
#define _APS_NEXT_CONTROL_VALUE 1032
|
#define _APS_NEXT_CONTROL_VALUE 1032
|
||||||
#define _APS_NEXT_SYMED_VALUE 101
|
#define _APS_NEXT_SYMED_VALUE 101
|
||||||
#endif
|
#endif
|
||||||
|
Binary file not shown.
@ -80,6 +80,7 @@ IDR_MAINFRAME MENU
|
|||||||
BEGIN
|
BEGIN
|
||||||
POPUP "&File"
|
POPUP "&File"
|
||||||
BEGIN
|
BEGIN
|
||||||
|
MENUITEM "Save", ID_FILE_SAVE
|
||||||
MENUITEM "&Sort programs list", ID_FILE_SORTPROGRAMSLIST
|
MENUITEM "&Sort programs list", ID_FILE_SORTPROGRAMSLIST
|
||||||
MENUITEM "&Clear all logs", ID_FILE_CLEARALLLOGS
|
MENUITEM "&Clear all logs", ID_FILE_CLEARALLLOGS
|
||||||
POPUP "Hook"
|
POPUP "Hook"
|
||||||
@ -393,7 +394,7 @@ BEGIN
|
|||||||
ID_FILE_NEW "Create a new file\nNew File"
|
ID_FILE_NEW "Create a new file\nNew File"
|
||||||
ID_FILE_OPEN "Open an existing file\nOpen"
|
ID_FILE_OPEN "Open an existing file\nOpen"
|
||||||
ID_FILE_CLOSE "Close the active file\nClose"
|
ID_FILE_CLOSE "Close the active file\nClose"
|
||||||
ID_FILE_SAVE "Save overwriting the files in the working directory\nSave"
|
ID_FILE_SAVE "Save the configuration file\nSave"
|
||||||
ID_FILE_SAVE_AS "Save with a new name\nrename and save"
|
ID_FILE_SAVE_AS "Save with a new name\nrename and save"
|
||||||
END
|
END
|
||||||
|
|
||||||
|
20
host/dxwndhost.vs2008.sln
Normal file
20
host/dxwndhost.vs2008.sln
Normal file
@ -0,0 +1,20 @@
|
|||||||
|
|
||||||
|
Microsoft Visual Studio Solution File, Format Version 10.00
|
||||||
|
# Visual Studio 2008
|
||||||
|
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "dxwndhost", "dxwndhost.vs2008.vcproj", "{FD0B0234-8EC5-43C0-A384-1B881DD3D925}"
|
||||||
|
EndProject
|
||||||
|
Global
|
||||||
|
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
||||||
|
Debug|Win32 = Debug|Win32
|
||||||
|
Release|Win32 = Release|Win32
|
||||||
|
EndGlobalSection
|
||||||
|
GlobalSection(ProjectConfigurationPlatforms) = postSolution
|
||||||
|
{FD0B0234-8EC5-43C0-A384-1B881DD3D925}.Debug|Win32.ActiveCfg = Debug|Win32
|
||||||
|
{FD0B0234-8EC5-43C0-A384-1B881DD3D925}.Debug|Win32.Build.0 = Debug|Win32
|
||||||
|
{FD0B0234-8EC5-43C0-A384-1B881DD3D925}.Release|Win32.ActiveCfg = Release|Win32
|
||||||
|
{FD0B0234-8EC5-43C0-A384-1B881DD3D925}.Release|Win32.Build.0 = Release|Win32
|
||||||
|
EndGlobalSection
|
||||||
|
GlobalSection(SolutionProperties) = preSolution
|
||||||
|
HideSolutionNode = FALSE
|
||||||
|
EndGlobalSection
|
||||||
|
EndGlobal
|
BIN
host/dxwndhost.vs2008.suo
Normal file
BIN
host/dxwndhost.vs2008.suo
Normal file
Binary file not shown.
@ -45,6 +45,7 @@ BEGIN_MESSAGE_MAP(CDxwndhostView, CListView)
|
|||||||
ON_COMMAND(ID_FILE_SORTPROGRAMSLIST, OnSort)
|
ON_COMMAND(ID_FILE_SORTPROGRAMSLIST, OnSort)
|
||||||
ON_COMMAND(ID_FILE_CLEARALLLOGS, OnClearAllLogs)
|
ON_COMMAND(ID_FILE_CLEARALLLOGS, OnClearAllLogs)
|
||||||
ON_COMMAND(ID_FILE_GOTOTRAYICON, OnGoToTrayIcon)
|
ON_COMMAND(ID_FILE_GOTOTRAYICON, OnGoToTrayIcon)
|
||||||
|
ON_COMMAND(ID_FILE_SAVE, OnSaveFile)
|
||||||
ON_COMMAND(ID_HOOK_START, OnHookStart)
|
ON_COMMAND(ID_HOOK_START, OnHookStart)
|
||||||
ON_COMMAND(ID_HOOK_STOP, OnHookStop)
|
ON_COMMAND(ID_HOOK_STOP, OnHookStop)
|
||||||
ON_COMMAND(ID_DXAPP_EXIT, OnExit)
|
ON_COMMAND(ID_DXAPP_EXIT, OnExit)
|
||||||
@ -92,11 +93,100 @@ CDxwndhostView::CDxwndhostView()
|
|||||||
EnumDisplaySettings(NULL, ENUM_CURRENT_SETTINGS, &this->InitDevMode);
|
EnumDisplaySettings(NULL, ENUM_CURRENT_SETTINGS, &this->InitDevMode);
|
||||||
}
|
}
|
||||||
|
|
||||||
CDxwndhostView::~CDxwndhostView()
|
void CDxwndhostView::SaveConfigFile()
|
||||||
{
|
{
|
||||||
int i;
|
int i;
|
||||||
char key[32], val[32];
|
char key[32], val[32];
|
||||||
|
|
||||||
|
for(i = 0; i < MAXTARGETS; i ++){
|
||||||
|
if(!TargetMaps[i].path[0]) break;
|
||||||
|
sprintf_s(key, sizeof(key), "title%i", i);
|
||||||
|
WritePrivateProfileString("target", key, TitleMaps[i].title, InitPath);
|
||||||
|
sprintf_s(key, sizeof(key), "path%i", i);
|
||||||
|
WritePrivateProfileString("target", key, TargetMaps[i].path, InitPath);
|
||||||
|
sprintf_s(key, sizeof(key), "module%i", i);
|
||||||
|
WritePrivateProfileString("target", key, TargetMaps[i].module, InitPath);
|
||||||
|
sprintf_s(key, sizeof(key), "ver%i", i);
|
||||||
|
sprintf_s(val, sizeof(val), "%i", TargetMaps[i].dxversion);
|
||||||
|
WritePrivateProfileString("target", key, val, InitPath);
|
||||||
|
sprintf_s(key, sizeof(key), "flag%i", i);
|
||||||
|
sprintf_s(val, sizeof(val), "%i", TargetMaps[i].flags);
|
||||||
|
WritePrivateProfileString("target", key, val, InitPath);
|
||||||
|
sprintf_s(key, sizeof(key), "flagg%i", i);
|
||||||
|
sprintf_s(val, sizeof(val), "%i", TargetMaps[i].flags2);
|
||||||
|
WritePrivateProfileString("target", key, val, InitPath);
|
||||||
|
sprintf_s(key, sizeof(key), "tflag%i", i);
|
||||||
|
sprintf_s(val, sizeof(val), "%i", TargetMaps[i].tflags);
|
||||||
|
WritePrivateProfileString("target", key, val, InitPath);
|
||||||
|
sprintf_s(key, sizeof(key), "initx%i", i);
|
||||||
|
sprintf_s(val, sizeof(val), "%i", TargetMaps[i].initx);
|
||||||
|
WritePrivateProfileString("target", key, val, InitPath);
|
||||||
|
sprintf_s(key, sizeof(key), "inity%i", i);
|
||||||
|
sprintf_s(val, sizeof(val), "%i", TargetMaps[i].inity);
|
||||||
|
WritePrivateProfileString("target", key, val, InitPath);
|
||||||
|
sprintf_s(key, sizeof(key), "minx%i", i);
|
||||||
|
sprintf_s(val, sizeof(val), "%i", TargetMaps[i].minx);
|
||||||
|
WritePrivateProfileString("target", key, val, InitPath);
|
||||||
|
sprintf_s(key, sizeof(key), "miny%i", i);
|
||||||
|
sprintf_s(val, sizeof(val), "%i", TargetMaps[i].miny);
|
||||||
|
WritePrivateProfileString("target", key, val, InitPath);
|
||||||
|
sprintf_s(key, sizeof(key), "maxx%i", i);
|
||||||
|
sprintf_s(val, sizeof(val), "%i", TargetMaps[i].maxx);
|
||||||
|
WritePrivateProfileString("target", key, val, InitPath);
|
||||||
|
sprintf_s(key, sizeof(key), "maxy%i", i);
|
||||||
|
sprintf_s(val, sizeof(val), "%i", TargetMaps[i].maxy);
|
||||||
|
WritePrivateProfileString("target", key, val, InitPath);
|
||||||
|
sprintf_s(key, sizeof(key), "posx%i", i);
|
||||||
|
sprintf_s(val, sizeof(val), "%i", TargetMaps[i].posx);
|
||||||
|
WritePrivateProfileString("target", key, val, InitPath);
|
||||||
|
sprintf_s(key, sizeof(key), "posy%i", i);
|
||||||
|
sprintf_s(val, sizeof(val), "%i", TargetMaps[i].posy);
|
||||||
|
WritePrivateProfileString("target", key, val, InitPath);
|
||||||
|
sprintf_s(key, sizeof(key), "sizx%i", i);
|
||||||
|
sprintf_s(val, sizeof(val), "%i", TargetMaps[i].sizx);
|
||||||
|
WritePrivateProfileString("target", key, val, InitPath);
|
||||||
|
sprintf_s(key, sizeof(key), "sizy%i", i);
|
||||||
|
sprintf_s(val, sizeof(val), "%i", TargetMaps[i].sizy);
|
||||||
|
WritePrivateProfileString("target", key, val, InitPath);
|
||||||
|
}
|
||||||
|
for(; i < MAXTARGETS; i ++){
|
||||||
|
sprintf_s(key, sizeof(key), "path%i", i);
|
||||||
|
WritePrivateProfileString("target", key, 0, InitPath);
|
||||||
|
sprintf_s(key, sizeof(key), "ver%i", i);
|
||||||
|
WritePrivateProfileString("target", key, 0, InitPath);
|
||||||
|
sprintf_s(key, sizeof(key), "flag%i", i);
|
||||||
|
WritePrivateProfileString("target", key, 0, InitPath);
|
||||||
|
sprintf_s(key, sizeof(key), "flagg%i", i);
|
||||||
|
WritePrivateProfileString("target", key, 0, InitPath);
|
||||||
|
sprintf_s(key, sizeof(key), "tflag%i", i);
|
||||||
|
WritePrivateProfileString("target", key, 0, InitPath);
|
||||||
|
sprintf_s(key, sizeof(key), "initx%i", i);
|
||||||
|
WritePrivateProfileString("target", key, 0, InitPath);
|
||||||
|
sprintf_s(key, sizeof(key), "inity%i", i);
|
||||||
|
WritePrivateProfileString("target", key, 0, InitPath);
|
||||||
|
sprintf_s(key, sizeof(key), "minx%i", i);
|
||||||
|
WritePrivateProfileString("target", key, 0, InitPath);
|
||||||
|
sprintf_s(key, sizeof(key), "miny%i", i);
|
||||||
|
WritePrivateProfileString("target", key, 0, InitPath);
|
||||||
|
sprintf_s(key, sizeof(key), "maxx%i", i);
|
||||||
|
WritePrivateProfileString("target", key, 0, InitPath);
|
||||||
|
sprintf_s(key, sizeof(key), "maxy%i", i);
|
||||||
|
WritePrivateProfileString("target", key, 0, InitPath);
|
||||||
|
sprintf_s(key, sizeof(key), "posx%i", i);
|
||||||
|
WritePrivateProfileString("target", key, 0, InitPath);
|
||||||
|
sprintf_s(key, sizeof(key), "posy%i", i);
|
||||||
|
WritePrivateProfileString("target", key, 0, InitPath);
|
||||||
|
sprintf_s(key, sizeof(key), "sizx%i", i);
|
||||||
|
WritePrivateProfileString("target", key, 0, InitPath);
|
||||||
|
sprintf_s(key, sizeof(key), "sizy%i", i);
|
||||||
|
WritePrivateProfileString("target", key, 0, InitPath);
|
||||||
|
}
|
||||||
|
|
||||||
|
this->isUpdated=FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
|
CDxwndhostView::~CDxwndhostView()
|
||||||
|
{
|
||||||
EndHook();
|
EndHook();
|
||||||
|
|
||||||
RevertScreenChanges(&this->InitDevMode);
|
RevertScreenChanges(&this->InitDevMode);
|
||||||
@ -106,92 +196,7 @@ CDxwndhostView::~CDxwndhostView()
|
|||||||
"Task list has changed.\n"
|
"Task list has changed.\n"
|
||||||
"Do you want to save it?",
|
"Do you want to save it?",
|
||||||
"Warning", MB_YESNO | MB_ICONQUESTION, NULL)==IDYES)
|
"Warning", MB_YESNO | MB_ICONQUESTION, NULL)==IDYES)
|
||||||
{
|
this->SaveConfigFile();
|
||||||
for(i = 0; i < MAXTARGETS; i ++){
|
|
||||||
if(!TargetMaps[i].path[0]) break;
|
|
||||||
sprintf_s(key, sizeof(key), "title%i", i);
|
|
||||||
WritePrivateProfileString("target", key, TitleMaps[i].title, InitPath);
|
|
||||||
sprintf_s(key, sizeof(key), "path%i", i);
|
|
||||||
WritePrivateProfileString("target", key, TargetMaps[i].path, InitPath);
|
|
||||||
sprintf_s(key, sizeof(key), "module%i", i);
|
|
||||||
WritePrivateProfileString("target", key, TargetMaps[i].module, InitPath);
|
|
||||||
sprintf_s(key, sizeof(key), "ver%i", i);
|
|
||||||
sprintf_s(val, sizeof(val), "%i", TargetMaps[i].dxversion);
|
|
||||||
WritePrivateProfileString("target", key, val, InitPath);
|
|
||||||
sprintf_s(key, sizeof(key), "flag%i", i);
|
|
||||||
sprintf_s(val, sizeof(val), "%i", TargetMaps[i].flags);
|
|
||||||
WritePrivateProfileString("target", key, val, InitPath);
|
|
||||||
sprintf_s(key, sizeof(key), "flagg%i", i);
|
|
||||||
sprintf_s(val, sizeof(val), "%i", TargetMaps[i].flags2);
|
|
||||||
WritePrivateProfileString("target", key, val, InitPath);
|
|
||||||
sprintf_s(key, sizeof(key), "tflag%i", i);
|
|
||||||
sprintf_s(val, sizeof(val), "%i", TargetMaps[i].tflags);
|
|
||||||
WritePrivateProfileString("target", key, val, InitPath);
|
|
||||||
sprintf_s(key, sizeof(key), "initx%i", i);
|
|
||||||
sprintf_s(val, sizeof(val), "%i", TargetMaps[i].initx);
|
|
||||||
WritePrivateProfileString("target", key, val, InitPath);
|
|
||||||
sprintf_s(key, sizeof(key), "inity%i", i);
|
|
||||||
sprintf_s(val, sizeof(val), "%i", TargetMaps[i].inity);
|
|
||||||
WritePrivateProfileString("target", key, val, InitPath);
|
|
||||||
sprintf_s(key, sizeof(key), "minx%i", i);
|
|
||||||
sprintf_s(val, sizeof(val), "%i", TargetMaps[i].minx);
|
|
||||||
WritePrivateProfileString("target", key, val, InitPath);
|
|
||||||
sprintf_s(key, sizeof(key), "miny%i", i);
|
|
||||||
sprintf_s(val, sizeof(val), "%i", TargetMaps[i].miny);
|
|
||||||
WritePrivateProfileString("target", key, val, InitPath);
|
|
||||||
sprintf_s(key, sizeof(key), "maxx%i", i);
|
|
||||||
sprintf_s(val, sizeof(val), "%i", TargetMaps[i].maxx);
|
|
||||||
WritePrivateProfileString("target", key, val, InitPath);
|
|
||||||
sprintf_s(key, sizeof(key), "maxy%i", i);
|
|
||||||
sprintf_s(val, sizeof(val), "%i", TargetMaps[i].maxy);
|
|
||||||
WritePrivateProfileString("target", key, val, InitPath);
|
|
||||||
sprintf_s(key, sizeof(key), "posx%i", i);
|
|
||||||
sprintf_s(val, sizeof(val), "%i", TargetMaps[i].posx);
|
|
||||||
WritePrivateProfileString("target", key, val, InitPath);
|
|
||||||
sprintf_s(key, sizeof(key), "posy%i", i);
|
|
||||||
sprintf_s(val, sizeof(val), "%i", TargetMaps[i].posy);
|
|
||||||
WritePrivateProfileString("target", key, val, InitPath);
|
|
||||||
sprintf_s(key, sizeof(key), "sizx%i", i);
|
|
||||||
sprintf_s(val, sizeof(val), "%i", TargetMaps[i].sizx);
|
|
||||||
WritePrivateProfileString("target", key, val, InitPath);
|
|
||||||
sprintf_s(key, sizeof(key), "sizy%i", i);
|
|
||||||
sprintf_s(val, sizeof(val), "%i", TargetMaps[i].sizy);
|
|
||||||
WritePrivateProfileString("target", key, val, InitPath);
|
|
||||||
}
|
|
||||||
for(; i < MAXTARGETS; i ++){
|
|
||||||
sprintf_s(key, sizeof(key), "path%i", i);
|
|
||||||
WritePrivateProfileString("target", key, 0, InitPath);
|
|
||||||
sprintf_s(key, sizeof(key), "ver%i", i);
|
|
||||||
WritePrivateProfileString("target", key, 0, InitPath);
|
|
||||||
sprintf_s(key, sizeof(key), "flag%i", i);
|
|
||||||
WritePrivateProfileString("target", key, 0, InitPath);
|
|
||||||
sprintf_s(key, sizeof(key), "flagg%i", i);
|
|
||||||
WritePrivateProfileString("target", key, 0, InitPath);
|
|
||||||
sprintf_s(key, sizeof(key), "tflag%i", i);
|
|
||||||
WritePrivateProfileString("target", key, 0, InitPath);
|
|
||||||
sprintf_s(key, sizeof(key), "initx%i", i);
|
|
||||||
WritePrivateProfileString("target", key, 0, InitPath);
|
|
||||||
sprintf_s(key, sizeof(key), "inity%i", i);
|
|
||||||
WritePrivateProfileString("target", key, 0, InitPath);
|
|
||||||
sprintf_s(key, sizeof(key), "minx%i", i);
|
|
||||||
WritePrivateProfileString("target", key, 0, InitPath);
|
|
||||||
sprintf_s(key, sizeof(key), "miny%i", i);
|
|
||||||
WritePrivateProfileString("target", key, 0, InitPath);
|
|
||||||
sprintf_s(key, sizeof(key), "maxx%i", i);
|
|
||||||
WritePrivateProfileString("target", key, 0, InitPath);
|
|
||||||
sprintf_s(key, sizeof(key), "maxy%i", i);
|
|
||||||
WritePrivateProfileString("target", key, 0, InitPath);
|
|
||||||
sprintf_s(key, sizeof(key), "posx%i", i);
|
|
||||||
WritePrivateProfileString("target", key, 0, InitPath);
|
|
||||||
sprintf_s(key, sizeof(key), "posy%i", i);
|
|
||||||
WritePrivateProfileString("target", key, 0, InitPath);
|
|
||||||
sprintf_s(key, sizeof(key), "sizx%i", i);
|
|
||||||
WritePrivateProfileString("target", key, 0, InitPath);
|
|
||||||
sprintf_s(key, sizeof(key), "sizy%i", i);
|
|
||||||
WritePrivateProfileString("target", key, 0, InitPath);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
this->isUpdated=FALSE;
|
|
||||||
|
|
||||||
if(this->SystemTray.Enabled()){
|
if(this->SystemTray.Enabled()){
|
||||||
this->SystemTray.StopAnimation();
|
this->SystemTray.StopAnimation();
|
||||||
@ -966,6 +971,16 @@ void CDxwndhostView::OnGoToTrayIcon()
|
|||||||
this->SystemTray.MinimiseToTray(pParent, FALSE);
|
this->SystemTray.MinimiseToTray(pParent, FALSE);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void CDxwndhostView::OnSaveFile()
|
||||||
|
{
|
||||||
|
if (this->isUpdated)
|
||||||
|
if (MessageBoxEx(0,
|
||||||
|
"Task list has changed.\n"
|
||||||
|
"Do you want to save it?",
|
||||||
|
"Warning", MB_YESNO | MB_ICONQUESTION, NULL)==IDYES)
|
||||||
|
this->SaveConfigFile();
|
||||||
|
}
|
||||||
|
|
||||||
void CDxwndhostView::OnTrayRestore()
|
void CDxwndhostView::OnTrayRestore()
|
||||||
{
|
{
|
||||||
CWnd *pParent = this->GetParent();
|
CWnd *pParent = this->GetParent();
|
||||||
|
@ -19,6 +19,7 @@ protected: // Create from serialization only features.
|
|||||||
|
|
||||||
private:
|
private:
|
||||||
void Resize(void);
|
void Resize(void);
|
||||||
|
void SaveConfigFile();
|
||||||
TARGETMAP TargetMaps[MAXTARGETS];
|
TARGETMAP TargetMaps[MAXTARGETS];
|
||||||
PRIVATEMAP TitleMaps[MAXTARGETS];
|
PRIVATEMAP TitleMaps[MAXTARGETS];
|
||||||
char InitPath[MAX_PATH];
|
char InitPath[MAX_PATH];
|
||||||
@ -69,6 +70,7 @@ protected:
|
|||||||
afx_msg void OnRun();
|
afx_msg void OnRun();
|
||||||
afx_msg void OnClearAllLogs();
|
afx_msg void OnClearAllLogs();
|
||||||
afx_msg void OnGoToTrayIcon();
|
afx_msg void OnGoToTrayIcon();
|
||||||
|
afx_msg void OnSaveFile();
|
||||||
afx_msg void OnHookStart();
|
afx_msg void OnHookStart();
|
||||||
afx_msg void OnInitMenu();
|
afx_msg void OnInitMenu();
|
||||||
afx_msg void OnHookStop();
|
afx_msg void OnHookStop();
|
||||||
|
Loading…
x
Reference in New Issue
Block a user