1
0
mirror of https://github.com/DxWnd/DxWnd.reloaded synced 2024-12-30 09:25:35 +01:00

v2_02_71_src

Former-commit-id: 756c3d65da958109a5a35683973512b469ed8b20
This commit is contained in:
gho tik 2014-04-22 12:39:07 -04:00 committed by Refael ACkermann
parent 95386140b5
commit 9efa398c81
34 changed files with 554 additions and 365 deletions

View File

@ -137,6 +137,7 @@
#define NATIVERES 0x00200000 // Supports hardware native resolutions (depending on your PC) #define NATIVERES 0x00200000 // Supports hardware native resolutions (depending on your PC)
#define SUPPORTSVGA 0x00400000 // Supports SVGA standard resolutions #define SUPPORTSVGA 0x00400000 // Supports SVGA standard resolutions
#define SUPPORTHDTV 0x00800000 // Supports HDTV standard resolutions #define SUPPORTHDTV 0x00800000 // Supports HDTV standard resolutions
#define RELEASEMOUSE 0x01000000 // GetCursorPos returns centered coordinates when the mouse cursor is moved outside the window
// logging Tflags DWORD: // logging Tflags DWORD:
#define OUTTRACE 0x00000001 // enables tracing to dxwnd.log in general #define OUTTRACE 0x00000001 // enables tracing to dxwnd.log in general

View File

@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1 version https://git-lfs.github.com/spec/v1
oid sha256:08566b33e7a85d73883a1dedcb52c0be7fdb04f0e8cb8d6a44acd5404c8b2721 oid sha256:dd0cab2c1de012cafee122274a0f9f62529e667e5348f1d32f1a8a181339b3e7
size 471040 size 473600

View File

@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1 version https://git-lfs.github.com/spec/v1
oid sha256:bdc5c58a5fba8b5b8013c2a5fdecfe9ba5fd024b73be5855891c120573a35f5b oid sha256:82bfb64a3a58d26ffe21d8e615fb147cb29a86875c3260cdd3fcbed9875b770c
size 537600 size 539136

View File

@ -0,0 +1,26 @@
[target]
title0=Close Combat 5 Invasion Normandy
path0=D:\Games\Close Combat 5\CC5.exe
module0=
opengllib0=
ver0=0
coord0=0
flag0=134218272
flagg0=1744830464
flagh0=20
flagi0=4194308
tflag0=0
initx0=0
inity0=0
minx0=0
miny0=0
maxx0=0
maxy0=0
posx0=50
posy0=50
sizx0=800
sizy0=600
maxfps0=0
initts0=0
winver0=0
maxres0=-1

View File

@ -0,0 +1,27 @@
[target]
title0=Dune 2000
path0=D:\Games\Dune 2000\DUNE2000.DAT
launchpath0=D:\Games\Dune 2000\DUNE2000.EXE
module0=
opengllib0=
ver0=0
coord0=0
flag0=671105312
flagg0=1207959568
flagh0=20
flagi0=4194308
tflag0=64
initx0=0
inity0=0
minx0=0
miny0=0
maxx0=0
maxy0=0
posx0=50
posy0=50
sizx0=800
sizy0=600
maxfps0=0
initts0=0
winver0=0
maxres0=-1

View File

@ -5,8 +5,8 @@ module0=
opengllib0= opengllib0=
ver0=0 ver0=0
coord0=0 coord0=0
flag0=134217760 flag0=134234144
flagg0=1207959552 flagg0=1207959808
flagh0=20 flagh0=20
flagi0=4194308 flagi0=4194308
tflag0=64 tflag0=64

View File

@ -1,5 +1,5 @@
[window] [window]
posx=1386 posx=1260
posy=352 posy=439
sizx=320 sizx=320
sizy=200 sizy=200

View File

@ -460,3 +460,10 @@ fix: corrected child window procedure handling - fixes "Imperialism" child windo
fixed FillRect coordinate handling - fixes "Imperialism" menus fixed FillRect coordinate handling - fixes "Imperialism" menus
fixed SetWindowPlacement handling fixed SetWindowPlacement handling
v2.02.71
fix: Set/GetWindowLongA/W are always hooked.
fix: added user32 GetDCEx hook for GDI Emulation & Directraw mode
fix: hooked "FrameRect", "TabbedTextOutA", "DrawTextA", "DrawTextExA", "FillRect" in scaled mode only
fix: FIXNCHITTEST mode
fix: when main win is closed, blit area is made null to avoid messing with a wrong screen area
added "Release mouse outside window" option. This option causes the get cursor position to detect a centered mouse position when the cursor is moved outside the window, allowing interaction with other windows without scrolling ot the windowed program. Mainly, this option is meant to help people with a physical disability to use other programs (e. g. the virtual keyboard) to play games.

View File

@ -91,19 +91,19 @@ void dxwCore::HideDesktop(HWND hwnd)
HWND hParent = (*pGetDesktopWindow)(); HWND hParent = (*pGetDesktopWindow)();
if(!wleft) { if(!wleft) {
wleft=(*pCreateWindowExA)(0, "dxwnd:hider", "hider", 0, 0, 0, 0, 0, hParent, NULL, hinst, NULL); wleft=(*pCreateWindowExA)(0, "dxwnd:hider", "hider", 0, 0, 0, 0, 0, hParent, NULL, hinst, NULL);
(*pSetWindowLong)(wleft, GWL_STYLE, 0); (*pSetWindowLongA)(wleft, GWL_STYLE, 0);
} }
if(!wright) { if(!wright) {
wright=(*pCreateWindowExA)(0, "dxwnd:hider", "hider", 0, 0, 0, 0, 0, hParent, NULL, hinst, NULL); wright=(*pCreateWindowExA)(0, "dxwnd:hider", "hider", 0, 0, 0, 0, 0, hParent, NULL, hinst, NULL);
(*pSetWindowLong)(wright, GWL_STYLE, 0); (*pSetWindowLongA)(wright, GWL_STYLE, 0);
} }
if(!wtop) { if(!wtop) {
wtop=(*pCreateWindowExA)(0, "dxwnd:hider", "hider", 0, 0, 0, 0, 0, hParent, NULL, hinst, NULL); wtop=(*pCreateWindowExA)(0, "dxwnd:hider", "hider", 0, 0, 0, 0, 0, hParent, NULL, hinst, NULL);
(*pSetWindowLong)(wtop, GWL_STYLE, 0); (*pSetWindowLongA)(wtop, GWL_STYLE, 0);
} }
if(!wbottom) { if(!wbottom) {
wbottom=(*pCreateWindowExA)(0, "dxwnd:hider", "hider", 0, 0, 0, 0, 0, hParent, NULL, hinst, NULL); wbottom=(*pCreateWindowExA)(0, "dxwnd:hider", "hider", 0, 0, 0, 0, 0, hParent, NULL, hinst, NULL);
(*pSetWindowLong)(wbottom, GWL_STYLE, 0); (*pSetWindowLongA)(wbottom, GWL_STYLE, 0);
} }
(*pMoveWindow)(wleft, wDesktop.left, wDesktop.top, wRect.left, wDesktop.bottom, TRUE); (*pMoveWindow)(wleft, wDesktop.left, wDesktop.top, wRect.left, wDesktop.bottom, TRUE);
@ -111,10 +111,10 @@ void dxwCore::HideDesktop(HWND hwnd)
(*pMoveWindow)(wtop, wDesktop.left, wDesktop.top, wDesktop.right, wRect.top-wDesktop.top, TRUE); (*pMoveWindow)(wtop, wDesktop.left, wDesktop.top, wDesktop.right, wRect.top-wDesktop.top, TRUE);
(*pMoveWindow)(wbottom, wDesktop.left, wRect.bottom, wDesktop.right, wDesktop.bottom-wRect.bottom, TRUE); (*pMoveWindow)(wbottom, wDesktop.left, wRect.bottom, wDesktop.right, wDesktop.bottom-wRect.bottom, TRUE);
(*pSetWindowLong)(wleft, GWL_EXSTYLE, WS_EX_TOPMOST); (*pSetWindowLongA)(wleft, GWL_EXSTYLE, WS_EX_TOPMOST);
(*pSetWindowLong)(wright, GWL_EXSTYLE, WS_EX_TOPMOST); (*pSetWindowLongA)(wright, GWL_EXSTYLE, WS_EX_TOPMOST);
(*pSetWindowLong)(wtop, GWL_EXSTYLE, WS_EX_TOPMOST); (*pSetWindowLongA)(wtop, GWL_EXSTYLE, WS_EX_TOPMOST);
(*pSetWindowLong)(wbottom, GWL_EXSTYLE, WS_EX_TOPMOST); (*pSetWindowLongA)(wbottom, GWL_EXSTYLE, WS_EX_TOPMOST);
(*pShowWindow)(wleft, SW_SHOW); (*pShowWindow)(wleft, SW_SHOW);
(*pShowWindow)(wright, SW_SHOW); (*pShowWindow)(wright, SW_SHOW);

View File

@ -84,7 +84,7 @@ static char *Flag4Names[32]={
"LIMITSCREENRES", "NOFILLRECT", "HOOKGLIDE", "HIDEDESKTOP", "LIMITSCREENRES", "NOFILLRECT", "HOOKGLIDE", "HIDEDESKTOP",
"STRETCHTIMERS", "NOFLIPEMULATION", "NOTEXTURES", "RETURNNULLREF", "STRETCHTIMERS", "NOFLIPEMULATION", "NOTEXTURES", "RETURNNULLREF",
"FINETIMING", "NATIVERES", "SUPPORTSVGA", "SUPPORTHDTV", "FINETIMING", "NATIVERES", "SUPPORTSVGA", "SUPPORTHDTV",
"", "", "", "", "RELEASEMOUSE", "", "", "",
"", "", "", "", "", "", "", "",
}; };
@ -505,8 +505,8 @@ void CalculateWindowPos(HWND hwnd, DWORD width, DWORD height, LPWINDOWPOS wp)
RECT UnmappedRect; RECT UnmappedRect;
UnmappedRect=rect; UnmappedRect=rect;
dwStyle=(*pGetWindowLong)(hwnd, GWL_STYLE); dwStyle=(*pGetWindowLongA)(hwnd, GWL_STYLE);
dwExStyle=(*pGetWindowLong)(hwnd, GWL_EXSTYLE); dwExStyle=(*pGetWindowLongA)(hwnd, GWL_EXSTYLE);
// BEWARE: from MSDN - If the window is a child window, the return value is undefined. // BEWARE: from MSDN - If the window is a child window, the return value is undefined.
hMenu = (dwStyle & WS_CHILD) ? NULL : GetMenu(hwnd); hMenu = (dwStyle & WS_CHILD) ? NULL : GetMenu(hwnd);
AdjustWindowRectEx(&rect, dwStyle, (hMenu!=NULL), dwExStyle); AdjustWindowRectEx(&rect, dwStyle, (hMenu!=NULL), dwExStyle);
@ -562,7 +562,7 @@ void AdjustWindowPos(HWND hwnd, DWORD width, DWORD height)
void HookWindowProc(HWND hwnd) void HookWindowProc(HWND hwnd)
{ {
WNDPROC pWindowProc; WNDPROC pWindowProc;
pWindowProc = (WNDPROC)(*pGetWindowLong)(hwnd, GWL_WNDPROC); pWindowProc = (WNDPROC)(*pGetWindowLongA)(hwnd, GWL_WNDPROC);
if ((pWindowProc == extWindowProc) || if ((pWindowProc == extWindowProc) ||
(pWindowProc == extChildWindowProc) || (pWindowProc == extChildWindowProc) ||
(pWindowProc == extDialogWindowProc)){ (pWindowProc == extDialogWindowProc)){
@ -572,7 +572,7 @@ void HookWindowProc(HWND hwnd)
else {// don't hook twice .... else {// don't hook twice ....
long lres; long lres;
WhndStackPush(hwnd, pWindowProc); WhndStackPush(hwnd, pWindowProc);
lres=(*pSetWindowLong)(hwnd, GWL_WNDPROC, (LONG)extWindowProc); lres=(*pSetWindowLongA)(hwnd, GWL_WNDPROC, (LONG)extWindowProc);
OutTraceDW("SetWindowLong: hwnd=%x HOOK WindowProc=%x->%x\n", hwnd, lres, (LONG)extWindowProc); OutTraceDW("SetWindowLong: hwnd=%x HOOK WindowProc=%x->%x\n", hwnd, lres, (LONG)extWindowProc);
} }
} }
@ -599,8 +599,8 @@ void AdjustWindowFrame(HWND hwnd, DWORD width, DWORD height)
break; break;
} }
(*pSetWindowLong)(hwnd, GWL_STYLE, style); (*pSetWindowLongA)(hwnd, GWL_STYLE, style);
(*pSetWindowLong)(hwnd, GWL_EXSTYLE, 0); (*pSetWindowLongA)(hwnd, GWL_EXSTYLE, 0);
(*pShowWindow)(hwnd, SW_SHOWNORMAL); (*pShowWindow)(hwnd, SW_SHOWNORMAL);
OutTraceDW("AdjustWindowFrame hwnd=%x, set style=%s extstyle=0\n", hwnd, (style == 0) ? "0" : "WS_OVERLAPPEDWINDOW"); OutTraceDW("AdjustWindowFrame hwnd=%x, set style=%s extstyle=0\n", hwnd, (style == 0) ? "0" : "WS_OVERLAPPEDWINDOW");
AdjustWindowPos(hwnd, width, height); AdjustWindowPos(hwnd, width, height);
@ -978,11 +978,12 @@ LRESULT CALLBACK extWindowProc(HWND hwnd, UINT message, WPARAM wparam, LPARAM lp
if (dxw.dwFlags1 & CLIPCURSOR) dxw.EraseClipCursor(); if (dxw.dwFlags1 & CLIPCURSOR) dxw.EraseClipCursor();
if (dxw.dwFlags1 & ENABLECLIPPING) (*pClipCursor)(NULL); if (dxw.dwFlags1 & ENABLECLIPPING) (*pClipCursor)(NULL);
break; break;
case WM_CLOSE: // commented out: WM_CLOSE just issue a request to close the window, not the process! It should be WM_QUIT....
OutTraceDW("WindowProc: WM_CLOSE - terminating process\n"); //case WM_CLOSE:
if(dxw.dwFlags3 & FORCE16BPP) RecoverScreenMode(); // OutTraceDW("WindowProc: WM_CLOSE - terminating process\n");
TerminateProcess(GetCurrentProcess(),0); // if(dxw.dwFlags3 & FORCE16BPP) RecoverScreenMode();
break; // TerminateProcess(GetCurrentProcess(),0);
// break;
case WM_SYSKEYDOWN: case WM_SYSKEYDOWN:
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){

View File

@ -362,10 +362,21 @@ POINT dxwCore::FixCursorPos(POINT prev)
} }
} }
if(dxw.dwFlags4 & RELEASEMOUSE){
if ((curr.x < 0) ||
(curr.y < 0) ||
(curr.x > w) ||
(curr.y > h)){
curr.x = w / 2;
curr.y = h / 2;
}
}
else {
if (curr.x < 0) curr.x = 0; if (curr.x < 0) curr.x = 0;
if (curr.y < 0) curr.y = 0; if (curr.y < 0) curr.y = 0;
if (curr.x > w) curr.x = w; if (curr.x > w) curr.x = w;
if (curr.y > h) curr.y = h; if (curr.y > h) curr.y = h;
}
if (w) curr.x = (curr.x * dxw.GetScreenWidth()) / w; if (w) curr.x = (curr.x * dxw.GetScreenWidth()) / w;
if (h) curr.y = (curr.y * dxw.GetScreenHeight()) / h; if (h) curr.y = (curr.y * dxw.GetScreenHeight()) / h;
@ -511,10 +522,9 @@ RECT dxwCore::MapWindowRect(LPRECT lpRect)
if (!(*pGetClientRect)(hWnd, &ClientRect)){ if (!(*pGetClientRect)(hWnd, &ClientRect)){
OutTraceE("GetClientRect ERROR: err=%d hwnd=%x at %d\n", GetLastError(), hWnd, __LINE__); OutTraceE("GetClientRect ERROR: err=%d hwnd=%x at %d\n", GetLastError(), hWnd, __LINE__);
// v2.02.31: try.... // v2.02.71: return a void area to prevent blitting to wrong area
ClientRect.top=ClientRect.left=0; ClientRect.top=ClientRect.left=ClientRect.right=ClientRect.bottom=0;
ClientRect.right=iRatioX; return ClientRect;
ClientRect.bottom=iRatioY;
} }
RetRect=ClientRect; RetRect=ClientRect;
@ -770,6 +780,16 @@ POINT dxwCore::AddCoordinates(POINT p1, POINT p2)
return ps; return ps;
} }
RECT dxwCore::AddCoordinates(RECT r1, POINT p2)
{
RECT rs;
rs.left = r1.left + p2.x;
rs.right = r1.right + p2.x;
rs.top = r1.top + p2.y;
rs.bottom = r1.bottom + p2.y;
return rs;
}
POINT dxwCore::SubCoordinates(POINT p1, POINT p2) POINT dxwCore::SubCoordinates(POINT p1, POINT p2)
{ {
POINT ps; POINT ps;
@ -1328,7 +1348,7 @@ void dxwCore::FixWindowFrame(HWND hwnd)
OutTraceDW("FixWindowFrame: hwnd=%x\n", hwnd); OutTraceDW("FixWindowFrame: hwnd=%x\n", hwnd);
nOldStyle=(*pGetWindowLong)(hwnd, GWL_STYLE); nOldStyle=(*pGetWindowLongA)(hwnd, GWL_STYLE);
if (!nOldStyle){ if (!nOldStyle){
OutTraceE("FixWindowFrame: GetWindowLong ERROR %d at %d\n",GetLastError(),__LINE__); OutTraceE("FixWindowFrame: GetWindowLong ERROR %d at %d\n",GetLastError(),__LINE__);
return; return;
@ -1337,12 +1357,12 @@ void dxwCore::FixWindowFrame(HWND hwnd)
OutTraceDW("FixWindowFrame: style=%x(%s)\n",nOldStyle,ExplainStyle(nOldStyle)); OutTraceDW("FixWindowFrame: style=%x(%s)\n",nOldStyle,ExplainStyle(nOldStyle));
// fix style // fix style
if (!(*pSetWindowLong)(hwnd, GWL_STYLE, WS_OVERLAPPEDWINDOW)){ if (!(*pSetWindowLongA)(hwnd, GWL_STYLE, WS_OVERLAPPEDWINDOW)){
OutTraceE("FixWindowFrame: SetWindowLong ERROR %d at %d\n",GetLastError(),__LINE__); OutTraceE("FixWindowFrame: SetWindowLong ERROR %d at %d\n",GetLastError(),__LINE__);
return; return;
} }
// fix exstyle // fix exstyle
if (!(*pSetWindowLong)(hwnd, GWL_EXSTYLE, 0)){ if (!(*pSetWindowLongA)(hwnd, GWL_EXSTYLE, 0)){
OutTraceE("FixWindowFrame: SetWindowLong ERROR %d at %d\n",GetLastError(),__LINE__); OutTraceE("FixWindowFrame: SetWindowLong ERROR %d at %d\n",GetLastError(),__LINE__);
return; return;
} }
@ -1365,7 +1385,7 @@ void dxwCore::FixStyle(char *ApiName, HWND hwnd, WPARAM wParam, LPARAM lParam)
lpSS->styleNew= WS_OVERLAPPEDWINDOW; lpSS->styleNew= WS_OVERLAPPEDWINDOW;
} }
if (dxw.dwFlags1 & LOCKWINSTYLE){ // set to current value if (dxw.dwFlags1 & LOCKWINSTYLE){ // set to current value
lpSS->styleNew= (*pGetWindowLong)(hwnd, GWL_STYLE); lpSS->styleNew= (*pGetWindowLongA)(hwnd, GWL_STYLE);
} }
if (dxw.dwFlags1 & PREVENTMAXIMIZE){ // disable maximize settings if (dxw.dwFlags1 & PREVENTMAXIMIZE){ // disable maximize settings
if (lpSS->styleNew & WS_MAXIMIZE){ if (lpSS->styleNew & WS_MAXIMIZE){
@ -1381,7 +1401,7 @@ void dxwCore::FixStyle(char *ApiName, HWND hwnd, WPARAM wParam, LPARAM lParam)
lpSS->styleNew= 0; lpSS->styleNew= 0;
} }
if (dxw.dwFlags1 & LOCKWINSTYLE){ // set to current value if (dxw.dwFlags1 & LOCKWINSTYLE){ // set to current value
lpSS->styleNew= (*pGetWindowLong)(hwnd, GWL_EXSTYLE); lpSS->styleNew= (*pGetWindowLongA)(hwnd, GWL_EXSTYLE);
} }
if ((dxw.dwFlags1 & PREVENTMAXIMIZE) && (hwnd==hWnd)){ // disable maximize settings if ((dxw.dwFlags1 & PREVENTMAXIMIZE) && (hwnd==hWnd)){ // disable maximize settings
if (lpSS->styleNew & WS_EX_TOPMOST){ if (lpSS->styleNew & WS_EX_TOPMOST){
@ -1398,8 +1418,10 @@ void dxwCore::FixStyle(char *ApiName, HWND hwnd, WPARAM wParam, LPARAM lParam)
HDC dxwCore::AcquireEmulatedDC(HWND hwnd) HDC dxwCore::AcquireEmulatedDC(HWND hwnd)
{ {
HDC wdc; HDC wdc;
if(!(wdc=(*pGDIGetDC)(hwnd))) if(!(wdc=(*pGDIGetDC)(hwnd))){
OutTraceE("GetDC: ERROR err=%d at=%d\n", GetLastError(), __LINE__); OutTraceE("GetDC: ERROR err=%d at=%d\n", GetLastError(), __LINE__);
return NULL;
}
return AcquireEmulatedDC(wdc); return AcquireEmulatedDC(wdc);
} }
@ -1416,16 +1438,22 @@ HDC dxwCore::AcquireEmulatedDC(LPDIRECTDRAWSURFACE lpdds)
HDC dxwCore::AcquireEmulatedDC(HDC wdc) HDC dxwCore::AcquireEmulatedDC(HDC wdc)
{ {
RealHDC=wdc; RealHDC=wdc;
//HDC wdc; HWND hwnd;
//if(!(wdc=(*pGDIGetDC)(hwnd))) RECT WinRect;
//OutTraceE("GetDC: ERROR err=%d at=%d\n", GetLastError(), __LINE__); if(!(hwnd=WindowFromDC(wdc)))
if(!VirtualHDC){ // or resolution changed and you must rebuild a new one .... !!!!! OutTraceE("WindowFromDC: ERROR err=%d at=%d\n", GetLastError(), __LINE__);
(*pGetClientRect)(hwnd, &WinRect);
if(dxw.IsDesktop(hwnd)){
dxw.VirtualPicRect = dxw.GetScreenRect();
}
else {
VirtualPicRect = WinRect;
dxw.UnmapClient(&VirtualPicRect);
}
if(!(VirtualHDC=CreateCompatibleDC(wdc))) if(!(VirtualHDC=CreateCompatibleDC(wdc)))
OutTraceE("CreateCompatibleDC: ERROR err=%d at=%d\n", GetLastError(), __LINE__); OutTraceE("CreateCompatibleDC: ERROR err=%d at=%d\n", GetLastError(), __LINE__);
if(!VirtualPic){ if(!(VirtualPic=CreateCompatibleBitmap(wdc, VirtualPicRect.right, VirtualPicRect.bottom)))
if(!(VirtualPic=CreateCompatibleBitmap(wdc, dxw.GetScreenWidth(), dxw.GetScreenHeight())))
OutTraceE("CreateCompatibleBitmap: ERROR err=%d at=%d\n", GetLastError(), __LINE__); OutTraceE("CreateCompatibleBitmap: ERROR err=%d at=%d\n", GetLastError(), __LINE__);
}
if(!SelectObject(VirtualHDC, VirtualPic)){ if(!SelectObject(VirtualHDC, VirtualPic)){
if(!DeleteObject(VirtualPic)) if(!DeleteObject(VirtualPic))
OutTraceE("DeleteObject: ERROR err=%d at=%d\n", GetLastError(), __LINE__); OutTraceE("DeleteObject: ERROR err=%d at=%d\n", GetLastError(), __LINE__);
@ -1434,7 +1462,8 @@ HDC dxwCore::AcquireEmulatedDC(HDC wdc)
if(!SelectObject(VirtualHDC, VirtualPic)) if(!SelectObject(VirtualHDC, VirtualPic))
OutTraceE("SelectObject: ERROR err=%d at=%d\n", GetLastError(), __LINE__); OutTraceE("SelectObject: ERROR err=%d at=%d\n", GetLastError(), __LINE__);
} }
} if(!(*pGDIStretchBlt)(VirtualHDC, 0, 0, VirtualPicRect.right, VirtualPicRect.bottom, wdc, 0, 0, WinRect.right, WinRect.bottom, SRCCOPY))
OutTraceE("StretchBlt: ERROR err=%d at=%d\n", GetLastError(), __LINE__);
return VirtualHDC; return VirtualHDC;
} }
@ -1446,10 +1475,14 @@ BOOL dxwCore::ReleaseEmulatedDC(HWND hwnd)
(*pGetClientRect)(hwnd, &client); (*pGetClientRect)(hwnd, &client);
if(!(wdc=(*pGDIGetDC)(hwnd))) if(!(wdc=(*pGDIGetDC)(hwnd)))
OutTraceE("GetDC: ERROR err=%d at=%d\n", GetLastError(), __LINE__); OutTraceE("GetDC: ERROR err=%d at=%d\n", GetLastError(), __LINE__);
//OutTrace("StretchBlt: destdc=%x destrect=(0,0)-(%d,%d) srcdc=%x srcrect=(0,0)-(%d,%d)\n", wdc, client.right, client.bottom, VirtualHDC, dxw.GetScreenWidth(), dxw.GetScreenHeight()); //OutTrace("StretchBlt: destdc=%x destrect=(0,0)-(%d,%d) srcdc=%x srcrect=(0,0)-(%d,%d)\n", wdc, client.right, client.bottom, VirtualHDC, VirtualPicRect.right, VirtualPicRect.bottom);
if(!(*pGDIStretchBlt)(wdc, 0, 0, client.right, client.bottom, VirtualHDC, 0, 0, dxw.GetScreenWidth(), dxw.GetScreenHeight(), SRCCOPY)) if(!(*pGDIStretchBlt)(wdc, 0, 0, client.right, client.bottom, VirtualHDC, 0, 0, VirtualPicRect.right, VirtualPicRect.bottom, SRCCOPY))
OutTraceE("StretchBlt: ERROR err=%d at=%d\n", GetLastError(), __LINE__); OutTraceE("StretchBlt: ERROR err=%d at=%d\n", GetLastError(), __LINE__);
//(*pInvalidateRect)(hwnd, NULL, 0); //(*pInvalidateRect)(hwnd, NULL, 0);
if(!DeleteObject(VirtualPic))
OutTraceE("DeleteObject: ERROR err=%d at=%d\n", GetLastError(), __LINE__);
if(!DeleteObject(VirtualHDC))
OutTraceE("DeleteObject: ERROR err=%d at=%d\n", GetLastError(), __LINE__);
ret=TRUE; ret=TRUE;
return ret; return ret;
} }

View File

@ -69,6 +69,7 @@ public: // methods
RECT GetWindowRect(RECT); RECT GetWindowRect(RECT);
RECT GetClientRect(RECT); RECT GetClientRect(RECT);
POINT AddCoordinates(POINT, POINT); POINT AddCoordinates(POINT, POINT);
RECT AddCoordinates(RECT, POINT);
POINT SubCoordinates(POINT, POINT); POINT SubCoordinates(POINT, POINT);
POINT ClientOffset(HWND); POINT ClientOffset(HWND);
void ScreenRefresh(void); void ScreenRefresh(void);
@ -158,6 +159,7 @@ protected:
DWORD PrimSurfaces[DDSQLEN+1]; DWORD PrimSurfaces[DDSQLEN+1];
DWORD BackSurfaces[DDSQLEN+1]; DWORD BackSurfaces[DDSQLEN+1];
HBITMAP VirtualPic; HBITMAP VirtualPic;
RECT VirtualPicRect;
private: private:
void UnmarkPrimarySurface(LPDIRECTDRAWSURFACE); void UnmarkPrimarySurface(LPDIRECTDRAWSURFACE);

View File

@ -24,7 +24,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
#include "dxwnd.h" #include "dxwnd.h"
#include "dxwcore.hpp" #include "dxwcore.hpp"
#define VERSION "2.02.70" #define VERSION "2.02.71"
#define DDTHREADLOCK 1 #define DDTHREADLOCK 1

Binary file not shown.

View File

@ -36,8 +36,6 @@ ExtTextOutW_Type pExtTextOutW = NULL;
ExtTextOutA_Type pExtTextOutA = NULL; ExtTextOutA_Type pExtTextOutA = NULL;
static HookEntry_Type Hooks[]={ static HookEntry_Type Hooks[]={
{"ExtTextOutA", (FARPROC)ExtTextOutA, (FARPROC *)&pExtTextOutA, (FARPROC)extExtTextOutA},
{"ExtTextOutW", (FARPROC)ExtTextOutW, (FARPROC *)&pExtTextOutW, (FARPROC)extExtTextOutW},
{"GetDeviceCaps", (FARPROC)GetDeviceCaps, (FARPROC *)&pGDIGetDeviceCaps, (FARPROC)extGetDeviceCaps}, {"GetDeviceCaps", (FARPROC)GetDeviceCaps, (FARPROC *)&pGDIGetDeviceCaps, (FARPROC)extGetDeviceCaps},
{"ScaleWindowExtEx", (FARPROC)ScaleWindowExtEx, (FARPROC *)&pGDIScaleWindowExtEx, (FARPROC)extScaleWindowExtEx}, {"ScaleWindowExtEx", (FARPROC)ScaleWindowExtEx, (FARPROC *)&pGDIScaleWindowExtEx, (FARPROC)extScaleWindowExtEx},
@ -67,7 +65,6 @@ static HookEntry_Type RemapHooks[]={
{"GetWindowOrgEx", (FARPROC)NULL, (FARPROC *)&pGetWindowOrgEx, (FARPROC)extGetWindowOrgEx}, {"GetWindowOrgEx", (FARPROC)NULL, (FARPROC *)&pGetWindowOrgEx, (FARPROC)extGetWindowOrgEx},
{"SetWindowOrgEx", (FARPROC)NULL, (FARPROC *)&pSetWindowOrgEx, (FARPROC)extSetWindowOrgEx}, {"SetWindowOrgEx", (FARPROC)NULL, (FARPROC *)&pSetWindowOrgEx, (FARPROC)extSetWindowOrgEx},
{"GetCurrentPositionEx", (FARPROC)NULL, (FARPROC *)&pGetCurrentPositionEx, (FARPROC)extGetCurrentPositionEx}, {"GetCurrentPositionEx", (FARPROC)NULL, (FARPROC *)&pGetCurrentPositionEx, (FARPROC)extGetCurrentPositionEx},
{"StretchDIBits", (FARPROC)StretchDIBits, (FARPROC *)&pStretchDIBits, (FARPROC)extStretchDIBits}, // unuseful
{"SetDIBitsToDevice", (FARPROC)NULL, (FARPROC *)&pSetDIBitsToDevice, (FARPROC)extSetDIBitsToDevice}, // does the stretching {"SetDIBitsToDevice", (FARPROC)NULL, (FARPROC *)&pSetDIBitsToDevice, (FARPROC)extSetDIBitsToDevice}, // does the stretching
{0, NULL, 0, 0} // terminator {0, NULL, 0, 0} // terminator
}; };
@ -103,21 +100,18 @@ static HookEntry_Type ScaledHooks[]={
{"StretchBlt", (FARPROC)StretchBlt, (FARPROC *)&pGDIStretchBlt, (FARPROC)extGDIStretchBlt}, {"StretchBlt", (FARPROC)StretchBlt, (FARPROC *)&pGDIStretchBlt, (FARPROC)extGDIStretchBlt},
{"PatBlt", (FARPROC)PatBlt, (FARPROC *)&pGDIPatBlt, (FARPROC)extGDIPatBlt}, {"PatBlt", (FARPROC)PatBlt, (FARPROC *)&pGDIPatBlt, (FARPROC)extGDIPatBlt},
{"MaskBlt", (FARPROC)NULL, (FARPROC *)&pMaskBlt, (FARPROC)extMaskBlt}, {"MaskBlt", (FARPROC)NULL, (FARPROC *)&pMaskBlt, (FARPROC)extMaskBlt},
{"ExtTextOutA", (FARPROC)ExtTextOutA, (FARPROC *)&pExtTextOutA, (FARPROC)extExtTextOutA},
{"ExtTextOutW", (FARPROC)ExtTextOutW, (FARPROC *)&pExtTextOutW, (FARPROC)extExtTextOutW},
{0, NULL, 0, 0} // terminator {0, NULL, 0, 0} // terminator
}; };
static HookEntry_Type EmulateHooks[]={ static HookEntry_Type EmulateHooks[]={
// useless CreateCompatibleDC: it maps VirtualHDC on top of VirtualHDC, then does nothing.... // useless CreateCompatibleDC: it maps VirtualHDC on top of VirtualHDC, then does nothing, unless when asked to operate on 0!....
//{"CreateCompatibleDC", (FARPROC)CreateCompatibleDC, (FARPROC *)&pGDICreateCompatibleDC, (FARPROC)extEMUCreateCompatibleDC}, //{"CreateCompatibleDC", (FARPROC)CreateCompatibleDC, (FARPROC *)&pGDICreateCompatibleDC, (FARPROC)extEMUCreateCompatibleDC},
// useless DeleteDC: it's just a proxy // useless DeleteDC: it's just a proxy
//{"DeleteDC", (FARPROC)DeleteDC, (FARPROC *)&pGDIDeleteDC, (FARPROC)extGDIDeleteDC}, //{"DeleteDC", (FARPROC)DeleteDC, (FARPROC *)&pGDIDeleteDC, (FARPROC)extGDIDeleteDC},
{"CreateDCA", (FARPROC)CreateDCA, (FARPROC *)&pGDICreateDC, (FARPROC)extGDICreateDC}, {"CreateDCA", (FARPROC)CreateDCA, (FARPROC *)&pGDICreateDC, (FARPROC)extGDICreateDC},
// CreateDCW ..... // CreateDCW .....
{"BitBlt", (FARPROC)BitBlt, (FARPROC *)&pGDIBitBlt, (FARPROC)extGDIBitBlt},
{"StretchBlt", (FARPROC)StretchBlt, (FARPROC *)&pGDIStretchBlt, (FARPROC)extGDIStretchBlt},
{"PatBlt", (FARPROC)PatBlt, (FARPROC *)&pGDIPatBlt, (FARPROC)extGDIPatBlt},
{"MaskBlt", (FARPROC)NULL, (FARPROC *)&pMaskBlt, (FARPROC)extMaskBlt},
{"GetObjectType", (FARPROC)GetObjectType, (FARPROC *)&pGetObjectType, (FARPROC)extGetObjectType}, {"GetObjectType", (FARPROC)GetObjectType, (FARPROC *)&pGetObjectType, (FARPROC)extGetObjectType},
{"GetClipBox", (FARPROC)NULL, (FARPROC *)&pGDIGetClipBox, (FARPROC)extGetClipBox}, {"GetClipBox", (FARPROC)NULL, (FARPROC *)&pGDIGetClipBox, (FARPROC)extGetClipBox},
@ -131,6 +125,7 @@ static HookEntry_Type DDHooks[]={
{"BitBlt", (FARPROC)BitBlt, (FARPROC *)&pGDIBitBlt, (FARPROC)extDDBitBlt}, {"BitBlt", (FARPROC)BitBlt, (FARPROC *)&pGDIBitBlt, (FARPROC)extDDBitBlt},
{"StretchBlt", (FARPROC)StretchBlt, (FARPROC *)&pGDIStretchBlt, (FARPROC)extDDStretchBlt}, {"StretchBlt", (FARPROC)StretchBlt, (FARPROC *)&pGDIStretchBlt, (FARPROC)extDDStretchBlt},
{"GetClipBox", (FARPROC)NULL, (FARPROC *)&pGDIGetClipBox, (FARPROC)extGetClipBox}, {"GetClipBox", (FARPROC)NULL, (FARPROC *)&pGDIGetClipBox, (FARPROC)extGetClipBox},
// {"PatBlt", (FARPROC)PatBlt, (FARPROC *)&pGDIPatBlt, (FARPROC)extDDPatBlt}, // missing one ... // {"PatBlt", (FARPROC)PatBlt, (FARPROC *)&pGDIPatBlt, (FARPROC)extDDPatBlt}, // missing one ...
// {"MaskBlt", (FARPROC)NULL, (FARPROC *)&pMaskBlt, (FARPROC)extDDMaskBlt}, // missing one ... // {"MaskBlt", (FARPROC)NULL, (FARPROC *)&pMaskBlt, (FARPROC)extDDMaskBlt}, // missing one ...
{0, NULL, 0, 0} // terminator {0, NULL, 0, 0} // terminator
@ -402,9 +397,10 @@ int WINAPI extGetDeviceCaps(HDC hdc, int nindex)
BOOL WINAPI extTextOutA(HDC hdc, int nXStart, int nYStart, LPCTSTR lpString, int cchString) BOOL WINAPI extTextOutA(HDC hdc, int nXStart, int nYStart, LPCTSTR lpString, int cchString)
{ {
BOOL ret; BOOL ret;
extern BOOL gFixed;
OutTraceDW("TextOut: hdc=%x xy=(%d,%d) str=(%d)\"%.*s\"\n", hdc, nXStart, nYStart, cchString, cchString, lpString); OutTraceDW("TextOut: hdc=%x xy=(%d,%d) str=(%d)\"%.*s\"\n", hdc, nXStart, nYStart, cchString, cchString, lpString);
if (dxw.IsFullScreen() && (OBJ_DC == GetObjectType(hdc))){ if (!gFixed && dxw.IsFullScreen() && (OBJ_DC == GetObjectType(hdc))){
dxw.MapClient(&nXStart, &nYStart); dxw.MapClient(&nXStart, &nYStart);
OutTraceDW("TextOut: fixed dest=(%d,%d)\n", nXStart, nYStart); OutTraceDW("TextOut: fixed dest=(%d,%d)\n", nXStart, nYStart);
} }
@ -738,6 +734,13 @@ HDC WINAPI extDDGetDC(HWND hwnd)
return ret; return ret;
} }
HDC WINAPI extDDGetDCEx(HWND hwnd, HRGN hrgnClip, DWORD flags)
{
HDC ret;
ret=winDDGetDC(hwnd, "GDI.GetDCEx");
return ret;
}
HDC WINAPI extDDGetWindowDC(HWND hwnd) HDC WINAPI extDDGetWindowDC(HWND hwnd)
{ {
HDC ret; HDC ret;
@ -750,11 +753,11 @@ int WINAPI extDDReleaseDC(HWND hwnd, HDC hDC)
int res; int res;
extern HRESULT WINAPI extReleaseDC(LPDIRECTDRAWSURFACE, HDC); extern HRESULT WINAPI extReleaseDC(LPDIRECTDRAWSURFACE, HDC);
OutTraceDW("GDI.ReleaseDC: hwnd=%x hdc=%x\n", hwnd, hDC); OutTraceDW("GDI.ReleaseDC(DD): hwnd=%x hdc=%x\n", hwnd, hDC);
res=0; res=0;
if ((hDC == PrimHDC) || (hwnd==0)){ if ((hDC == PrimHDC) || (hwnd==0)){
dxw.SetPrimarySurface(); dxw.SetPrimarySurface();
OutTraceDW("GDI.ReleaseDC: refreshing primary surface lpdds=%x\n",dxw.lpDDSPrimHDC); OutTraceDW("GDI.ReleaseDC(DD): refreshing primary surface lpdds=%x\n",dxw.lpDDSPrimHDC);
if(!dxw.lpDDSPrimHDC) return 0; if(!dxw.lpDDSPrimHDC) return 0;
extReleaseDC(dxw.lpDDSPrimHDC, hDC); extReleaseDC(dxw.lpDDSPrimHDC, hDC);
PrimHDC=NULL; PrimHDC=NULL;
@ -862,12 +865,12 @@ HDC WINAPI extGDICreateDC(LPSTR Driver, LPSTR Device, LPSTR Output, CONST DEVMOD
HDC WINAPI extGDICreateCompatibleDC(HDC hdc) HDC WINAPI extGDICreateCompatibleDC(HDC hdc)
{ {
HDC RetHdc, SrcHdc; HDC RetHdc;
DWORD LastError; DWORD LastError;
OutTraceDW("GDI.CreateCompatibleDC: hdc=%x\n", hdc); OutTraceDW("GDI.CreateCompatibleDC: hdc=%x\n", hdc);
if(hdc==0){ if(hdc==0){
SrcHdc=(*pGDIGetDC)(dxw.GethWnd()); hdc=(*pGDIGetDC)(dxw.GethWnd());
OutTraceDW("GDI.CreateCompatibleDC: duplicating win HDC hWnd=%x\n", dxw.GethWnd()); OutTraceDW("GDI.CreateCompatibleDC: duplicating win HDC hWnd=%x\n", dxw.GethWnd());
} }
@ -882,34 +885,6 @@ HDC WINAPI extGDICreateCompatibleDC(HDC hdc)
return RetHdc; return RetHdc;
} }
//HDC WINAPI extEMUCreateCompatibleDC(HDC hdc)
//{
// HDC RetHdc, SrcHdc;
// DWORD LastError;
//
// OutTraceDW("GDI.CreateCompatibleDC: hdc=%x\n", hdc);
// if((hdc==0) || (hdc==dxw.RealHDC)){
// SrcHdc=dxw.AcquireEmulatedDC(dxw.GethWnd());
// OutTraceDW("GDI.CreateCompatibleDC: using emulated HDC hWnd=%x hdc=%x\n", dxw.GethWnd(), SrcHdc);
// }
//
// // eliminated error message for errorcode 0.
// SetLastError(0);
// RetHdc=(*pGDICreateCompatibleDC)(hdc);
// LastError=GetLastError();
// if(!LastError)
// OutTraceDW("GDI.CreateCompatibleDC: returning HDC=%x\n", RetHdc);
// else
// OutTraceE("GDI.CreateCompatibleDC ERROR: err=%d at %d\n", LastError, __LINE__);
// return RetHdc;
//}
//BOOL WINAPI extEMUBitBlt(HDC hdcDest, int nXDest, int nYDest, int nWidth, int nHeight, HDC hdcSrc, int nXSrc, int nYSrc, DWORD dwRop)
//{
// if (hdcDest==dxw.RealHDC) hdcDest=dxw.VirtualHDC;
// return (*pGDIBitBlt)(hdcDest, nXDest, nYDest, nWidth, nHeight, hdcSrc, nXSrc, nYSrc, dwRop);
//}
BOOL WINAPI extGDIBitBlt(HDC hdcDest, int nXDest, int nYDest, int nWidth, int nHeight, HDC hdcSrc, int nXSrc, int nYSrc, DWORD dwRop) BOOL WINAPI extGDIBitBlt(HDC hdcDest, int nXDest, int nYDest, int nWidth, int nHeight, HDC hdcSrc, int nXSrc, int nYSrc, DWORD dwRop)
{ {
BOOL res; BOOL res;
@ -1837,51 +1812,29 @@ DWORD WINAPI extGetObjectType(HGDIOBJ h)
return res; return res;
} }
#if 0 extern BOOL gFixed;
HBITMAP WINAPI extCreateDIBitmap(HDC hdc, const BITMAPINFOHEADER *lpbmih, DWORD fdwInit, const VOID *lpbInit, const BITMAPINFO *lpbmi, UINT fuUsage)
{
OutTrace("CreateDIBitmap: hdc=x dwInit=%x bInit=%x Usage=%x\n", hdc, fdwInit, lpbInit, fuUsage);
return NULL;
}
int WINAPI extSetMapMode(HDC hdc, int fnMapMode)
{
OutTraceDW("SetMapMode: hdc=%x MapMode=%d\n", hdc, fnMapMode);
return TRUE;
}
// to map:
// GetCurrentPositionEx
// GetViewportExtEx
// DPtoLP
// GetWindowOrgEx
// LPtoDP
// OffsetViewportOrgEx
// OffsetWindowOrgEx
// TransparentBlt
// to do: eliminate FIXTEXTOUT handling
// GetDCEx
BOOL SetTextJustification(
_In_ HDC hdc,
_In_ int nBreakExtra, <----
_In_ int nBreakCount
);
#endif
BOOL WINAPI extExtTextOutA(HDC hdc, int X, int Y, UINT fuOptions, const RECT *lprc, LPCSTR lpString, UINT cbCount, const INT *lpDx) BOOL WINAPI extExtTextOutA(HDC hdc, int X, int Y, UINT fuOptions, const RECT *lprc, LPCSTR lpString, UINT cbCount, const INT *lpDx)
{ {
OutTrace("ExtTextOutA: pos=(%d,%d) String=\"%s\"\n", X, Y, lpString); RECT rc;
//if (dxw.IsFullScreen() && (OBJ_DC == GetObjectType(hdc))){ if(IsTraceDW){
// dxw.MapClient(&X, &Y); OutTrace("ExtTextOutA: hdc=%x pos=(%d,%d) String=\"%s\" rect=", hdc, X, Y, lpString);
// if(lprc) dxw.MapClient((LPRECT)lprc); if(lprc)
// OutTraceDW("ExtTextOutA: fixed pos=(%d,%d)\n", X, Y); OutTrace("(%d,%d)-(%d,%d)\n", lprc->left, lprc->top, lprc->right, lprc->bottom);
//} else
return (*pExtTextOutA)(hdc, X, Y, fuOptions, lprc, lpString, cbCount, lpDx); OutTrace("NULL\n");
} }
extern BOOL gFixed; if (dxw.IsFullScreen() && (OBJ_DC == GetObjectType(hdc)) && !gFixed){
dxw.MapClient(&X, &Y);
if(lprc) dxw.MapClient(&rc);
OutTraceDW("ExtTextOutA: fixed pos=(%d,%d)\n", X, Y);
}
if(lprc)
return (*pExtTextOutA)(hdc, X, Y, fuOptions, &rc, lpString, cbCount, lpDx);
else
return (*pExtTextOutA)(hdc, X, Y, fuOptions, NULL, lpString, cbCount, lpDx);
}
BOOL WINAPI extExtTextOutW(HDC hdc, int X, int Y, UINT fuOptions, const RECT *lprc, LPCWSTR lpString, UINT cbCount, const INT *lpDx) BOOL WINAPI extExtTextOutW(HDC hdc, int X, int Y, UINT fuOptions, const RECT *lprc, LPCWSTR lpString, UINT cbCount, const INT *lpDx)
{ {
@ -1894,11 +1847,7 @@ BOOL WINAPI extExtTextOutW(HDC hdc, int X, int Y, UINT fuOptions, const RECT *lp
OutTrace("NULL\n"); OutTrace("NULL\n");
} }
//return (*pExtTextOutW)(hdc, X, Y, fuOptions, lprc, lpString, cbCount, lpDx);
if (dxw.IsFullScreen() && (OBJ_DC == GetObjectType(hdc)) && !gFixed){ if (dxw.IsFullScreen() && (OBJ_DC == GetObjectType(hdc)) && !gFixed){
//dxw.UnmapClient(&X, &Y);
//if(lprc) dxw.UnmapClient(&rc);
dxw.MapClient(&X, &Y); dxw.MapClient(&X, &Y);
if(lprc) dxw.MapClient(&rc); if(lprc) dxw.MapClient(&rc);
OutTraceDW("ExtTextOutW: fixed pos=(%d,%d)\n", X, Y); OutTraceDW("ExtTextOutW: fixed pos=(%d,%d)\n", X, Y);

View File

@ -508,7 +508,8 @@ static void DumpD3DDevideDesc(LPD3DDEVICEDESC d3, char *label)
if(d3->dwFlags & D3DDD_DEVICEZBUFFERBITDEPTH) OutTrace("DeviceZBufferBitDepth=%d ", d3->dwDeviceZBufferBitDepth); if(d3->dwFlags & D3DDD_DEVICEZBUFFERBITDEPTH) OutTrace("DeviceZBufferBitDepth=%d ", d3->dwDeviceZBufferBitDepth);
if(d3->dwFlags & D3DDD_MAXBUFFERSIZE) OutTrace("MaxBufferSize=%d ", d3->dwMaxBufferSize); if(d3->dwFlags & D3DDD_MAXBUFFERSIZE) OutTrace("MaxBufferSize=%d ", d3->dwMaxBufferSize);
if(d3->dwFlags & D3DDD_MAXVERTEXCOUNT) OutTrace("MaxVertexCount=%d ", d3->dwMaxVertexCount); if(d3->dwFlags & D3DDD_MAXVERTEXCOUNT) OutTrace("MaxVertexCount=%d ", d3->dwMaxVertexCount);
OutTrace("\n"); OutTrace("Texture min=(%dx%d) max=(%dx%d)\n", d3->dwMinTextureWidth, d3->dwMinTextureHeight, d3->dwMaxTextureWidth, d3->dwMaxTextureHeight);
//OutTrace("\n");
} }
else else
OutTrace("EnumDevices: CALLBACK dev=%s ddesc=NULL\n", label); OutTrace("EnumDevices: CALLBACK dev=%s ddesc=NULL\n", label);

View File

@ -360,7 +360,8 @@ DXWEXTERN GetDesktopWindow_Type pGetDesktopWindow DXWINITIALIZED;
DXWEXTERN GetSystemMetrics_Type pGetSystemMetrics DXWINITIALIZED; DXWEXTERN GetSystemMetrics_Type pGetSystemMetrics DXWINITIALIZED;
DXWEXTERN GetTopWindow_Type pGetTopWindow DXWINITIALIZED; DXWEXTERN GetTopWindow_Type pGetTopWindow DXWINITIALIZED;
DXWEXTERN GDIGetDC_Type pGDIGetWindowDC DXWINITIALIZED; DXWEXTERN GDIGetDC_Type pGDIGetWindowDC DXWINITIALIZED;
DXWEXTERN GetWindowLong_Type pGetWindowLong DXWINITIALIZED; DXWEXTERN GetWindowLong_Type pGetWindowLongA DXWINITIALIZED;
DXWEXTERN GetWindowLong_Type pGetWindowLongW DXWINITIALIZED;
DXWEXTERN GetWindowRect_Type pGetWindowRect DXWINITIALIZED; DXWEXTERN GetWindowRect_Type pGetWindowRect DXWINITIALIZED;
DXWEXTERN InvalidateRect_Type pInvalidateRect DXWINITIALIZED; DXWEXTERN InvalidateRect_Type pInvalidateRect DXWINITIALIZED;
DXWEXTERN MapWindowPoints_Type pMapWindowPoints DXWINITIALIZED; DXWEXTERN MapWindowPoints_Type pMapWindowPoints DXWINITIALIZED;
@ -375,7 +376,8 @@ DXWEXTERN SendMessage_Type pSendMessageW DXWINITIALIZED;
DXWEXTERN SetCursor_Type pSetCursor DXWINITIALIZED; DXWEXTERN SetCursor_Type pSetCursor DXWINITIALIZED;
DXWEXTERN SetCursorPos_Type pSetCursorPos DXWINITIALIZED; DXWEXTERN SetCursorPos_Type pSetCursorPos DXWINITIALIZED;
DXWEXTERN SetTimer_Type pSetTimer DXWINITIALIZED; DXWEXTERN SetTimer_Type pSetTimer DXWINITIALIZED;
DXWEXTERN SetWindowLong_Type pSetWindowLong DXWINITIALIZED; DXWEXTERN SetWindowLong_Type pSetWindowLongA DXWINITIALIZED;
DXWEXTERN SetWindowLong_Type pSetWindowLongW DXWINITIALIZED;
DXWEXTERN SetWindowPos_Type pSetWindowPos DXWINITIALIZED; DXWEXTERN SetWindowPos_Type pSetWindowPos DXWINITIALIZED;
DXWEXTERN ShowCursor_Type pShowCursor DXWINITIALIZED; DXWEXTERN ShowCursor_Type pShowCursor DXWINITIALIZED;
DXWEXTERN ShowWindow_Type pShowWindow DXWINITIALIZED; DXWEXTERN ShowWindow_Type pShowWindow DXWINITIALIZED;
@ -528,6 +530,7 @@ extern HRESULT STDAPICALLTYPE extCoInitialize(LPVOID);
// user32.dll: // user32.dll:
extern HDC WINAPI extBeginPaint(HWND, LPPAINTSTRUCT); extern HDC WINAPI extBeginPaint(HWND, LPPAINTSTRUCT);
extern HDC WINAPI extEMUBeginPaint(HWND, LPPAINTSTRUCT);
extern HDC WINAPI extDDBeginPaint(HWND, LPPAINTSTRUCT); extern HDC WINAPI extDDBeginPaint(HWND, LPPAINTSTRUCT);
extern LRESULT WINAPI extCallWindowProc(WNDPROC, HWND, UINT, WPARAM, LPARAM); extern LRESULT WINAPI extCallWindowProc(WNDPROC, HWND, UINT, WPARAM, LPARAM);
extern LONG WINAPI extChangeDisplaySettingsA(DEVMODEA *, DWORD); extern LONG WINAPI extChangeDisplaySettingsA(DEVMODEA *, DWORD);
@ -544,6 +547,7 @@ extern LRESULT WINAPI extDefWindowProc(HWND, UINT, WPARAM, LPARAM);
extern int WINAPI extDrawTextA(HDC, LPCTSTR, int, LPRECT, UINT); extern int WINAPI extDrawTextA(HDC, LPCTSTR, int, LPRECT, UINT);
extern int WINAPI extDrawTextExA(HDC, LPTSTR, int, LPRECT, UINT, LPDRAWTEXTPARAMS); extern int WINAPI extDrawTextExA(HDC, LPTSTR, int, LPRECT, UINT, LPDRAWTEXTPARAMS);
extern BOOL WINAPI extEndPaint(HWND, const PAINTSTRUCT *); extern BOOL WINAPI extEndPaint(HWND, const PAINTSTRUCT *);
extern BOOL WINAPI extEMUEndPaint(HWND, const PAINTSTRUCT *);
extern BOOL WINAPI extDDEndPaint(HWND, const PAINTSTRUCT *); extern BOOL WINAPI extDDEndPaint(HWND, const PAINTSTRUCT *);
extern LONG WINAPI extEnumDisplaySettings(LPCTSTR, DWORD, DEVMODE *); extern LONG WINAPI extEnumDisplaySettings(LPCTSTR, DWORD, DEVMODE *);
extern int WINAPI extFillRect(HDC, const RECT *, HBRUSH); extern int WINAPI extFillRect(HDC, const RECT *, HBRUSH);
@ -552,13 +556,16 @@ extern BOOL WINAPI extGetClientRect(HWND, LPRECT);
extern BOOL WINAPI extGetClipCursor(LPRECT); extern BOOL WINAPI extGetClipCursor(LPRECT);
extern BOOL WINAPI extGetCursorPos(LPPOINT); extern BOOL WINAPI extGetCursorPos(LPPOINT);
extern HDC WINAPI extGDIGetDC(HWND); extern HDC WINAPI extGDIGetDC(HWND);
extern HDC WINAPI extEMUGetDC(HWND);
extern HDC WINAPI extDDGetDC(HWND); extern HDC WINAPI extDDGetDC(HWND);
extern HWND WINAPI extGetDesktopWindow(void); extern HWND WINAPI extGetDesktopWindow(void);
extern int WINAPI extGetSystemMetrics(int); extern int WINAPI extGetSystemMetrics(int);
extern HWND WINAPI extGetTopWindow(HWND); extern HWND WINAPI extGetTopWindow(HWND);
extern HDC WINAPI extGDIGetWindowDC(HWND); extern HDC WINAPI extGDIGetWindowDC(HWND);
extern HDC WINAPI extEMUGetWindowDC(HWND);
extern HDC WINAPI extDDGetWindowDC(HWND); extern HDC WINAPI extDDGetWindowDC(HWND);
extern LONG WINAPI extGetWindowLong(HWND, int); extern LONG WINAPI extGetWindowLongA(HWND, int);
extern LONG WINAPI extGetWindowLongW(HWND, int);
extern BOOL WINAPI extGetWindowRect(HWND, LPRECT); extern BOOL WINAPI extGetWindowRect(HWND, LPRECT);
extern BOOL WINAPI extInvalidateRect(HWND, RECT *, BOOL); extern BOOL WINAPI extInvalidateRect(HWND, RECT *, BOOL);
//extern BOOL WINAPI extDDInvalidateRect(HWND, RECT *, BOOL); //extern BOOL WINAPI extDDInvalidateRect(HWND, RECT *, BOOL);
@ -567,15 +574,17 @@ extern BOOL WINAPI extMoveWindow(HWND, int, int, int, int, BOOL);
extern BOOL WINAPI extPeekMessage(LPMSG, HWND, UINT, UINT, UINT); extern BOOL WINAPI extPeekMessage(LPMSG, HWND, UINT, UINT, UINT);
extern ATOM WINAPI extRegisterClassExA(WNDCLASSEXA *); extern ATOM WINAPI extRegisterClassExA(WNDCLASSEXA *);
extern ATOM WINAPI extRegisterClassA(WNDCLASSA *); extern ATOM WINAPI extRegisterClassA(WNDCLASSA *);
extern int WINAPI extDDReleaseDC(HWND, HDC);
extern int WINAPI extGDIReleaseDC(HWND, HDC); extern int WINAPI extGDIReleaseDC(HWND, HDC);
extern int WINAPI extEMUReleaseDC(HWND, HDC);
extern int WINAPI extDDReleaseDC(HWND, HDC);
extern BOOL WINAPI extScreenToClient(HWND, LPPOINT); extern BOOL WINAPI extScreenToClient(HWND, LPPOINT);
extern LRESULT WINAPI extSendMessageA(HWND, UINT, WPARAM, LPARAM); extern LRESULT WINAPI extSendMessageA(HWND, UINT, WPARAM, LPARAM);
extern LRESULT WINAPI extSendMessageW(HWND, UINT, WPARAM, LPARAM); extern LRESULT WINAPI extSendMessageW(HWND, UINT, WPARAM, LPARAM);
extern HCURSOR WINAPI extSetCursor(HCURSOR); extern HCURSOR WINAPI extSetCursor(HCURSOR);
extern BOOL WINAPI extSetCursorPos(int, int); extern BOOL WINAPI extSetCursorPos(int, int);
extern UINT_PTR WINAPI extSetTimer(HWND, UINT_PTR, UINT, TIMERPROC); extern UINT_PTR WINAPI extSetTimer(HWND, UINT_PTR, UINT, TIMERPROC);
extern LONG WINAPI extSetWindowLong(HWND, int, LONG); extern LONG WINAPI extSetWindowLongA(HWND, int, LONG);
extern LONG WINAPI extSetWindowLongW(HWND, int, LONG);
extern BOOL WINAPI extSetWindowPos(HWND, HWND, int, int, int, int, UINT); extern BOOL WINAPI extSetWindowPos(HWND, HWND, int, int, int, int, UINT);
extern int WINAPI extShowCursor(BOOL); extern int WINAPI extShowCursor(BOOL);
extern BOOL WINAPI extShowWindow(HWND, int); extern BOOL WINAPI extShowWindow(HWND, int);
@ -584,6 +593,8 @@ extern BOOL WINAPI extDestroyWindow(HWND);
extern BOOL WINAPI extCloseWindow(HWND); extern BOOL WINAPI extCloseWindow(HWND);
extern BOOL WINAPI extSetSysColors(int, const INT *, const COLORREF *); extern BOOL WINAPI extSetSysColors(int, const INT *, const COLORREF *);
extern HDC WINAPI extGDIGetDCEx(HWND, HRGN, DWORD); extern HDC WINAPI extGDIGetDCEx(HWND, HRGN, DWORD);
extern HDC WINAPI extEMUGetDCEx(HWND, HRGN, DWORD);
extern HDC WINAPI extDDGetDCEx(HWND, HRGN, DWORD);
extern BOOL WINAPI extUpdateWindow(HWND); extern BOOL WINAPI extUpdateWindow(HWND);
extern BOOL WINAPI extGetWindowPlacement(HWND, WINDOWPLACEMENT *); extern BOOL WINAPI extGetWindowPlacement(HWND, WINDOWPLACEMENT *);
extern BOOL WINAPI extSetWindowPlacement(HWND, WINDOWPLACEMENT *); extern BOOL WINAPI extSetWindowPlacement(HWND, WINDOWPLACEMENT *);

View File

@ -26,8 +26,6 @@ static HookEntry_Type Hooks[]={
{"EnumDisplaySettingsA", (FARPROC)EnumDisplaySettingsA, (FARPROC *)&pEnumDisplaySettings, (FARPROC)extEnumDisplaySettings}, {"EnumDisplaySettingsA", (FARPROC)EnumDisplaySettingsA, (FARPROC *)&pEnumDisplaySettings, (FARPROC)extEnumDisplaySettings},
{"GetClipCursor", (FARPROC)GetClipCursor, (FARPROC*)&pGetClipCursor, (FARPROC)extGetClipCursor}, {"GetClipCursor", (FARPROC)GetClipCursor, (FARPROC*)&pGetClipCursor, (FARPROC)extGetClipCursor},
{"ClipCursor", (FARPROC)ClipCursor, (FARPROC *)&pClipCursor, (FARPROC)extClipCursor}, {"ClipCursor", (FARPROC)ClipCursor, (FARPROC *)&pClipCursor, (FARPROC)extClipCursor},
{"FillRect", (FARPROC)NULL, (FARPROC *)&pFillRect, (FARPROC)extFillRect},
{"FrameRect", (FARPROC)NULL, (FARPROC *)&pFrameRect, (FARPROC)extFrameRect},
{"DefWindowProcA", (FARPROC)DefWindowProcA, (FARPROC *)&pDefWindowProc, (FARPROC)extDefWindowProc}, {"DefWindowProcA", (FARPROC)DefWindowProcA, (FARPROC *)&pDefWindowProc, (FARPROC)extDefWindowProc},
{"CreateWindowExA", (FARPROC)CreateWindowExA, (FARPROC *)&pCreateWindowExA, (FARPROC)extCreateWindowExA}, {"CreateWindowExA", (FARPROC)CreateWindowExA, (FARPROC *)&pCreateWindowExA, (FARPROC)extCreateWindowExA},
{"CreateWindowExW", (FARPROC)CreateWindowExW, (FARPROC *)&pCreateWindowExW, (FARPROC)extCreateWindowExW}, {"CreateWindowExW", (FARPROC)CreateWindowExW, (FARPROC *)&pCreateWindowExW, (FARPROC)extCreateWindowExW},
@ -35,13 +33,14 @@ static HookEntry_Type Hooks[]={
{"RegisterClassA", (FARPROC)RegisterClassA, (FARPROC *)&pRegisterClassA, (FARPROC)extRegisterClassA}, {"RegisterClassA", (FARPROC)RegisterClassA, (FARPROC *)&pRegisterClassA, (FARPROC)extRegisterClassA},
{"GetSystemMetrics", (FARPROC)GetSystemMetrics, (FARPROC *)&pGetSystemMetrics, (FARPROC)extGetSystemMetrics}, {"GetSystemMetrics", (FARPROC)GetSystemMetrics, (FARPROC *)&pGetSystemMetrics, (FARPROC)extGetSystemMetrics},
{"GetDesktopWindow", (FARPROC)GetDesktopWindow, (FARPROC *)&pGetDesktopWindow, (FARPROC)extGetDesktopWindow}, {"GetDesktopWindow", (FARPROC)GetDesktopWindow, (FARPROC *)&pGetDesktopWindow, (FARPROC)extGetDesktopWindow},
{"TabbedTextOutA", (FARPROC)TabbedTextOutA, (FARPROC *)&pTabbedTextOutA, (FARPROC)extTabbedTextOutA},
{"DrawTextA", (FARPROC)DrawTextA, (FARPROC *)&pDrawText, (FARPROC)extDrawTextA},
{"DrawTextExA", (FARPROC)DrawTextExA, (FARPROC *)&pDrawTextEx, (FARPROC)extDrawTextExA},
{"CloseWindow", (FARPROC)NULL, (FARPROC *)&pCloseWindow, (FARPROC)extCloseWindow}, {"CloseWindow", (FARPROC)NULL, (FARPROC *)&pCloseWindow, (FARPROC)extCloseWindow},
{"DestroyWindow", (FARPROC)NULL, (FARPROC *)&pDestroyWindow, (FARPROC)extDestroyWindow}, {"DestroyWindow", (FARPROC)NULL, (FARPROC *)&pDestroyWindow, (FARPROC)extDestroyWindow},
{"SetSysColors", (FARPROC)NULL, (FARPROC *)&pSetSysColors, (FARPROC)extSetSysColors}, {"SetSysColors", (FARPROC)NULL, (FARPROC *)&pSetSysColors, (FARPROC)extSetSysColors},
{"SetCapture", (FARPROC)NULL, (FARPROC *)&pSetCapture, (FARPROC)extSetCapture}, {"SetCapture", (FARPROC)NULL, (FARPROC *)&pSetCapture, (FARPROC)extSetCapture},
{"SetWindowLongA", (FARPROC)SetWindowLongA, (FARPROC *)&pSetWindowLongA, (FARPROC)extSetWindowLongA},
{"GetWindowLongA", (FARPROC)GetWindowLongA, (FARPROC *)&pGetWindowLongA, (FARPROC)extGetWindowLongA},
{"SetWindowLongW", (FARPROC)SetWindowLongW, (FARPROC *)&pSetWindowLongW, (FARPROC)extSetWindowLongW},
{"GetWindowLongW", (FARPROC)GetWindowLongW, (FARPROC *)&pGetWindowLongW, (FARPROC)extGetWindowLongW},
//{"GetActiveWindow", (FARPROC)NULL, (FARPROC *)&pGetActiveWindow, (FARPROC)extGetActiveWindow}, //{"GetActiveWindow", (FARPROC)NULL, (FARPROC *)&pGetActiveWindow, (FARPROC)extGetActiveWindow},
//{"GetForegroundWindow", (FARPROC)NULL, (FARPROC *)&pGetForegroundWindow, (FARPROC)extGetForegroundWindow}, //{"GetForegroundWindow", (FARPROC)NULL, (FARPROC *)&pGetForegroundWindow, (FARPROC)extGetForegroundWindow},
@ -57,12 +56,13 @@ static HookEntry_Type NoGDIHooks[]={
}; };
static HookEntry_Type EmulateHooks[]={ static HookEntry_Type EmulateHooks[]={
{"BeginPaint", (FARPROC)BeginPaint, (FARPROC *)&pBeginPaint, (FARPROC)extBeginPaint}, {"BeginPaint", (FARPROC)BeginPaint, (FARPROC *)&pBeginPaint, (FARPROC)extEMUBeginPaint},
{"EndPaint", (FARPROC)EndPaint, (FARPROC *)&pEndPaint, (FARPROC)extEndPaint}, {"EndPaint", (FARPROC)EndPaint, (FARPROC *)&pEndPaint, (FARPROC)extEMUEndPaint},
{"GetDC", (FARPROC)GetDC, (FARPROC *)&pGDIGetDC, (FARPROC)extGDIGetDC}, {"GetDC", (FARPROC)GetDC, (FARPROC *)&pGDIGetDC, (FARPROC)extEMUGetDC},
{"GetWindowDC", (FARPROC)GetWindowDC, (FARPROC *)&pGDIGetWindowDC, (FARPROC)extGDIGetWindowDC}, {"GetDCEx", (FARPROC)GetDCEx, (FARPROC *)&pGDIGetDCEx, (FARPROC)extEMUGetDCEx},
{"ReleaseDC", (FARPROC)ReleaseDC, (FARPROC *)&pGDIReleaseDC, (FARPROC)extGDIReleaseDC}, {"GetWindowDC", (FARPROC)GetWindowDC, (FARPROC *)&pGDIGetWindowDC, (FARPROC)extEMUGetWindowDC},
{"InvalidateRect", (FARPROC)InvalidateRect, (FARPROC *)&pInvalidateRect, (FARPROC)extInvalidateRect}, {"ReleaseDC", (FARPROC)ReleaseDC, (FARPROC *)&pGDIReleaseDC, (FARPROC)extEMUReleaseDC},
//{"InvalidateRect", (FARPROC)InvalidateRect, (FARPROC *)&pInvalidateRect, (FARPROC)extInvalidateRect},
{0, NULL, 0, 0} // terminator {0, NULL, 0, 0} // terminator
}; };
@ -70,6 +70,7 @@ static HookEntry_Type DDHooks[]={
{"BeginPaint", (FARPROC)BeginPaint, (FARPROC *)&pBeginPaint, (FARPROC)extDDBeginPaint}, {"BeginPaint", (FARPROC)BeginPaint, (FARPROC *)&pBeginPaint, (FARPROC)extDDBeginPaint},
{"EndPaint", (FARPROC)EndPaint, (FARPROC *)&pEndPaint, (FARPROC)extDDEndPaint}, {"EndPaint", (FARPROC)EndPaint, (FARPROC *)&pEndPaint, (FARPROC)extDDEndPaint},
{"GetDC", (FARPROC)GetDC, (FARPROC *)&pGDIGetDC, (FARPROC)extDDGetDC}, {"GetDC", (FARPROC)GetDC, (FARPROC *)&pGDIGetDC, (FARPROC)extDDGetDC},
{"GetDCEx", (FARPROC)GetDCEx, (FARPROC *)&pGDIGetDCEx, (FARPROC)extDDGetDCEx},
{"GetWindowDC", (FARPROC)GetWindowDC, (FARPROC *)&pGDIGetWindowDC, (FARPROC)extDDGetDC}, {"GetWindowDC", (FARPROC)GetWindowDC, (FARPROC *)&pGDIGetWindowDC, (FARPROC)extDDGetDC},
{"ReleaseDC", (FARPROC)ReleaseDC, (FARPROC *)&pGDIReleaseDC, (FARPROC)extDDReleaseDC}, {"ReleaseDC", (FARPROC)ReleaseDC, (FARPROC *)&pGDIReleaseDC, (FARPROC)extDDReleaseDC},
{"InvalidateRect", (FARPROC)InvalidateRect, (FARPROC *)&pInvalidateRect, (FARPROC)extInvalidateRect}, {"InvalidateRect", (FARPROC)InvalidateRect, (FARPROC *)&pInvalidateRect, (FARPROC)extInvalidateRect},
@ -77,6 +78,11 @@ static HookEntry_Type DDHooks[]={
}; };
static HookEntry_Type ScaledHooks[]={ static HookEntry_Type ScaledHooks[]={
{"FrameRect", (FARPROC)NULL, (FARPROC *)&pFrameRect, (FARPROC)extFrameRect},
{"TabbedTextOutA", (FARPROC)TabbedTextOutA, (FARPROC *)&pTabbedTextOutA, (FARPROC)extTabbedTextOutA},
{"DrawTextA", (FARPROC)DrawTextA, (FARPROC *)&pDrawText, (FARPROC)extDrawTextA},
{"DrawTextExA", (FARPROC)DrawTextExA, (FARPROC *)&pDrawTextEx, (FARPROC)extDrawTextExA},
{"FillRect", (FARPROC)NULL, (FARPROC *)&pFillRect, (FARPROC)extFillRect},
{"BeginPaint", (FARPROC)BeginPaint, (FARPROC *)&pBeginPaint, (FARPROC)extBeginPaint}, {"BeginPaint", (FARPROC)BeginPaint, (FARPROC *)&pBeginPaint, (FARPROC)extBeginPaint},
{"EndPaint", (FARPROC)EndPaint, (FARPROC *)&pEndPaint, (FARPROC)extEndPaint}, {"EndPaint", (FARPROC)EndPaint, (FARPROC *)&pEndPaint, (FARPROC)extEndPaint},
{"GetDC", (FARPROC)GetDC, (FARPROC *)&pGDIGetDC, (FARPROC)extGDIGetDC}, {"GetDC", (FARPROC)GetDC, (FARPROC *)&pGDIGetDC, (FARPROC)extGDIGetDC},
@ -114,8 +120,6 @@ static HookEntry_Type MouseHooks[]={
static HookEntry_Type WinHooks[]={ static HookEntry_Type WinHooks[]={
{"ShowWindow", (FARPROC)ShowWindow, (FARPROC *)&pShowWindow, (FARPROC)extShowWindow}, {"ShowWindow", (FARPROC)ShowWindow, (FARPROC *)&pShowWindow, (FARPROC)extShowWindow},
{"SetWindowLongA", (FARPROC)SetWindowLongA, (FARPROC *)&pSetWindowLong, (FARPROC)extSetWindowLong},
{"GetWindowLongA", (FARPROC)GetWindowLongA, (FARPROC *)&pGetWindowLong, (FARPROC)extGetWindowLong},
{"SetWindowPos", (FARPROC)SetWindowPos, (FARPROC *)&pSetWindowPos, (FARPROC)extSetWindowPos}, {"SetWindowPos", (FARPROC)SetWindowPos, (FARPROC *)&pSetWindowPos, (FARPROC)extSetWindowPos},
{"DeferWindowPos", (FARPROC)DeferWindowPos, (FARPROC *)&pGDIDeferWindowPos, (FARPROC)extDeferWindowPos}, {"DeferWindowPos", (FARPROC)DeferWindowPos, (FARPROC *)&pGDIDeferWindowPos, (FARPROC)extDeferWindowPos},
{"CallWindowProcA", (FARPROC)CallWindowProcA, (FARPROC *)&pCallWindowProc, (FARPROC)extCallWindowProc}, {"CallWindowProcA", (FARPROC)CallWindowProcA, (FARPROC *)&pCallWindowProc, (FARPROC)extCallWindowProc},
@ -422,9 +426,18 @@ static LRESULT WINAPI FixWindowProc(char *ApiName, HWND hwnd, UINT Msg, WPARAM w
ApiName, hwnd, Msg, ExplainWinMessage(Msg), wParam, lParam); ApiName, hwnd, Msg, ExplainWinMessage(Msg), wParam, lParam);
switch(Msg){ switch(Msg){
case WM_NCHITTEST:
// v2.02.71 fix: when processing WM_NCHITTEST messages whith fixed coordinates avoid calling
// the *pDefWindowProc call
// fixes "Microsoft Motocross Madness" mouse handling
if((dxw.dwFlags2 & FIXNCHITTEST) && (dxw.dwFlags1 & MODIFYMOUSE)){ // mouse processing
OutTraceDW("%s: suppress WM_NCHITTEST\n", ApiName);
return TRUE;
}
break;
case WM_ERASEBKGND: case WM_ERASEBKGND:
OutTraceDW("%s: prevent erase background\n", ApiName); OutTraceDW("%s: prevent erase background\n", ApiName);
return 1; // 1=erased return TRUE; // 1=erased
break; // useless break; // useless
case WM_GETMINMAXINFO: case WM_GETMINMAXINFO:
dxwFixMinMaxInfo(ApiName, hwnd, lParam); dxwFixMinMaxInfo(ApiName, hwnd, lParam);
@ -480,7 +493,6 @@ BOOL WINAPI extInvalidateRect(HWND hwnd, RECT *lpRect, BOOL bErase)
return (*pInvalidateRect)(hwnd, lpRect, bErase); return (*pInvalidateRect)(hwnd, lpRect, bErase);
} }
else{ else{
//dxw.MapClient(lpRect);
// just exagerate ... // just exagerate ...
return (*pInvalidateRect)(hwnd, NULL, bErase); return (*pInvalidateRect)(hwnd, NULL, bErase);
} }
@ -512,11 +524,11 @@ BOOL WINAPI extShowWindow(HWND hwnd, int nCmdShow)
return res; return res;
} }
LONG WINAPI extGetWindowLong(HWND hwnd, int nIndex) LONG WINAPI extGetWindowLong(HWND hwnd, int nIndex, GetWindowLong_Type pGetWindowLong)
{ {
LONG res; LONG res;
res=(*pGetWindowLong)(hwnd, nIndex); res=(*pGetWindowLongA)(hwnd, nIndex);
OutTraceDW("GetWindowLong: hwnd=%x, Index=%x(%s) res=%x\n", hwnd, nIndex, ExplainSetWindowIndex(nIndex), res); OutTraceDW("GetWindowLong: hwnd=%x, Index=%x(%s) res=%x\n", hwnd, nIndex, ExplainSetWindowIndex(nIndex), res);
@ -530,7 +542,17 @@ LONG WINAPI extGetWindowLong(HWND hwnd, int nIndex)
return res; return res;
} }
LONG WINAPI extSetWindowLong(HWND hwnd, int nIndex, LONG dwNewLong) LONG WINAPI extGetWindowLongA(HWND hwnd, int nIndex)
{
return extGetWindowLong(hwnd, nIndex, pGetWindowLongA);
}
LONG WINAPI extGetWindowLongW(HWND hwnd, int nIndex)
{
return extGetWindowLong(hwnd, nIndex, pGetWindowLongW);
}
LONG WINAPI extSetWindowLong(HWND hwnd, int nIndex, LONG dwNewLong, SetWindowLong_Type pSetWindowLong)
{ {
LONG res; LONG res;
@ -543,12 +565,12 @@ LONG WINAPI extSetWindowLong(HWND hwnd, int nIndex, LONG dwNewLong)
if(nIndex==GWL_STYLE){ if(nIndex==GWL_STYLE){
OutTraceDW("SetWindowLong: Lock GWL_STYLE=%x\n", dwNewLong); OutTraceDW("SetWindowLong: Lock GWL_STYLE=%x\n", dwNewLong);
//return 1; //return 1;
return (*pGetWindowLong)(hwnd, nIndex); return (*pGetWindowLongA)(hwnd, nIndex);
} }
if(nIndex==GWL_EXSTYLE){ if(nIndex==GWL_EXSTYLE){
OutTraceDW("SetWindowLong: Lock GWL_EXSTYLE=%x\n", dwNewLong); OutTraceDW("SetWindowLong: Lock GWL_EXSTYLE=%x\n", dwNewLong);
//return 1; //return 1;
return (*pGetWindowLong)(hwnd, nIndex); return (*pGetWindowLongA)(hwnd, nIndex);
} }
} }
@ -587,7 +609,7 @@ LONG WINAPI extSetWindowLong(HWND hwnd, int nIndex, LONG dwNewLong)
} }
// end of GPL fix // end of GPL fix
OldProc = (WNDPROC)(*pGetWindowLong)(hwnd, GWL_WNDPROC); OldProc = (WNDPROC)(*pGetWindowLongA)(hwnd, GWL_WNDPROC);
// v2.02.70 fix // v2.02.70 fix
if((OldProc==extWindowProc) || if((OldProc==extWindowProc) ||
(OldProc==extChildWindowProc)|| (OldProc==extChildWindowProc)||
@ -596,17 +618,27 @@ LONG WINAPI extSetWindowLong(HWND hwnd, int nIndex, LONG dwNewLong)
WhndStackPush(hwnd, (WNDPROC)dwNewLong); WhndStackPush(hwnd, (WNDPROC)dwNewLong);
res=(LONG)OldProc; res=(LONG)OldProc;
SetLastError(0); SetLastError(0);
lres=(WNDPROC)(*pSetWindowLong)(hwnd, GWL_WNDPROC, (LONG)extWindowProc); lres=(WNDPROC)(*pSetWindowLongA)(hwnd, GWL_WNDPROC, (LONG)extWindowProc);
if(!lres && GetLastError())OutTraceE("SetWindowLong: ERROR err=%d at %d\n", GetLastError(), __LINE__); if(!lres && GetLastError())OutTraceE("SetWindowLong: ERROR err=%d at %d\n", GetLastError(), __LINE__);
} }
else { else {
res=(*pSetWindowLong)(hwnd, nIndex, dwNewLong); res=(*pSetWindowLongA)(hwnd, nIndex, dwNewLong);
} }
OutTraceDW("SetWindowLong: hwnd=%x, nIndex=%x, Val=%x, res=%x\n", hwnd, nIndex, dwNewLong, res); OutTraceDW("SetWindowLong: hwnd=%x, nIndex=%x, Val=%x, res=%x\n", hwnd, nIndex, dwNewLong, res);
return res; return res;
} }
LONG WINAPI extSetWindowLongA(HWND hwnd, int nIndex, LONG dwNewLong)
{
return extSetWindowLong(hwnd, nIndex, dwNewLong, pSetWindowLongA);
}
LONG WINAPI extSetWindowLongW(HWND hwnd, int nIndex, LONG dwNewLong)
{
return extSetWindowLong(hwnd, nIndex, dwNewLong, pSetWindowLongW);
}
BOOL WINAPI extSetWindowPos(HWND hwnd, HWND hWndInsertAfter, int X, int Y, int cx, int cy, UINT uFlags) BOOL WINAPI extSetWindowPos(HWND hwnd, HWND hWndInsertAfter, int X, int Y, int cx, int cy, UINT uFlags)
{ {
BOOL res; BOOL res;
@ -650,8 +682,8 @@ BOOL WINAPI extSetWindowPos(HWND hwnd, HWND hWndInsertAfter, int X, int Y, int c
RECT rect; RECT rect;
rect.top=rect.left=0; rect.top=rect.left=0;
rect.right=cx; rect.bottom=cy; rect.right=cx; rect.bottom=cy;
dwCurStyle=(*pGetWindowLong)(hwnd, GWL_STYLE); dwCurStyle=(*pGetWindowLongA)(hwnd, GWL_STYLE);
dwExStyle=(*pGetWindowLong)(hwnd, GWL_EXSTYLE); dwExStyle=(*pGetWindowLongA)(hwnd, GWL_EXSTYLE);
// BEWARE: from MSDN - If the window is a child window, the return value is undefined. // BEWARE: from MSDN - If the window is a child window, the return value is undefined.
hMenu = (dwCurStyle & WS_CHILD) ? NULL : GetMenu(hwnd); hMenu = (dwCurStyle & WS_CHILD) ? NULL : GetMenu(hwnd);
AdjustWindowRectEx(&rect, dwCurStyle, (hMenu!=NULL), dwExStyle); AdjustWindowRectEx(&rect, dwCurStyle, (hMenu!=NULL), dwExStyle);
@ -1220,8 +1252,8 @@ static HWND WINAPI extCreateWindowCommon(
if ((!isValidHandle) && dxw.IsFullScreen()){ if ((!isValidHandle) && dxw.IsFullScreen()){
dxw.SethWnd(hwnd); dxw.SethWnd(hwnd);
extern void AdjustWindowPos(HWND, DWORD, DWORD); extern void AdjustWindowPos(HWND, DWORD, DWORD);
(*pSetWindowLong)(hwnd, GWL_STYLE, (dxw.dwFlags2 & MODALSTYLE) ? 0 : WS_OVERLAPPEDWINDOW); (*pSetWindowLongA)(hwnd, GWL_STYLE, (dxw.dwFlags2 & MODALSTYLE) ? 0 : WS_OVERLAPPEDWINDOW);
(*pSetWindowLong)(hwnd, GWL_EXSTYLE, 0); (*pSetWindowLongA)(hwnd, GWL_EXSTYLE, 0);
OutTraceDW("%s: hwnd=%x, set style=WS_OVERLAPPEDWINDOW extstyle=0\n", ApiName, hwnd); OutTraceDW("%s: hwnd=%x, set style=WS_OVERLAPPEDWINDOW extstyle=0\n", ApiName, hwnd);
AdjustWindowPos(hwnd, nWidth, nHeight); AdjustWindowPos(hwnd, nWidth, nHeight);
(*pShowWindow)(hwnd, SW_SHOWNORMAL); (*pShowWindow)(hwnd, SW_SHOWNORMAL);
@ -1237,7 +1269,7 @@ static HWND WINAPI extCreateWindowCommon(
// a hooker (either extWindowProc or extChildWindowProc) you have to retrieve // a hooker (either extWindowProc or extChildWindowProc) you have to retrieve
// the correct value (WhndGetWindowProc) before saving it (WhndStackPush). // the correct value (WhndGetWindowProc) before saving it (WhndStackPush).
long res; long res;
pWindowProc = (WNDPROC)(*pGetWindowLong)(hwnd, GWL_WNDPROC); pWindowProc = (WNDPROC)(*pGetWindowLongA)(hwnd, GWL_WNDPROC);
if((pWindowProc == extWindowProc) || if((pWindowProc == extWindowProc) ||
(pWindowProc == extChildWindowProc) || (pWindowProc == extChildWindowProc) ||
(pWindowProc == extDialogWindowProc)){ // avoid recursions (pWindowProc == extDialogWindowProc)){ // avoid recursions
@ -1246,7 +1278,7 @@ static HWND WINAPI extCreateWindowCommon(
pWindowProc=WhndGetWindowProc(Father); pWindowProc=WhndGetWindowProc(Father);
} }
OutTraceDW("Hooking CHILD hwnd=%x father WindowProc %x->%x\n", hwnd, pWindowProc, extChildWindowProc); OutTraceDW("Hooking CHILD hwnd=%x father WindowProc %x->%x\n", hwnd, pWindowProc, extChildWindowProc);
res=(*pSetWindowLong)(hwnd, GWL_WNDPROC, (LONG)extChildWindowProc); res=(*pSetWindowLongA)(hwnd, GWL_WNDPROC, (LONG)extChildWindowProc);
if(!res) OutTraceE("%s: SetWindowLong ERROR %x\n", ApiName, GetLastError()); if(!res) OutTraceE("%s: SetWindowLong ERROR %x\n", ApiName, GetLastError());
WhndStackPush(hwnd, pWindowProc); WhndStackPush(hwnd, pWindowProc);
} }
@ -1592,28 +1624,6 @@ LONG WINAPI extChangeDisplaySettingsExW(LPCTSTR lpszDeviceName, DEVMODEW *lpDevM
return MyChangeDisplaySettings("ChangeDisplaySettingsExW", TRUE, lpDevMode, dwflags); return MyChangeDisplaySettings("ChangeDisplaySettingsExW", TRUE, lpDevMode, dwflags);
} }
//HDC WINAPI extEMUGetDC(HWND hwnd)
//{
// HDC ret;
//
// OutTraceDW("GDI.GetDC: hwnd=%x\n", hwnd);
//
// if (dxw.IsDesktop(hwnd)) {
// OutTraceDW("GDI.GetDC: desktop remapping hwnd=%x->%x\n", hwnd, dxw.GethWnd());
// hwnd=dxw.GethWnd();
// ret=dxw.AcquireEmulatedDC(hwnd);
// }
// else{
// ret=(*pGDIGetDC)(hwnd);
// }
// if(ret)
// OutTraceDW("GDI.GetDC: hwnd=%x ret=%x\n", lochwnd, ret);
// else
// OutTraceE("GDI.GetDC ERROR: hwnd=%x err=%d at %d\n", lochwnd, err, __LINE__);
//
// return ret;
//}
HDC WINAPI extGDIGetDC(HWND hwnd) HDC WINAPI extGDIGetDC(HWND hwnd)
{ {
HDC ret; HDC ret;
@ -1628,11 +1638,40 @@ HDC WINAPI extGDIGetDC(HWND hwnd)
ret=(*pGDIGetDC)(lochwnd); ret=(*pGDIGetDC)(lochwnd);
if((dxw.dwFlags3 & GDIEMULATEDC) && (dxw.IsDesktop(hwnd)) && (dxw.VirtualHDC==NULL)){ if(ret){
ret=dxw.AcquireEmulatedDC(lochwnd); OutTraceDW("GDI.GetDC: hwnd=%x ret=%x\n", lochwnd, ret);
OutTraceDW("GDI.GetDC(GDIEMULATEDC): remapping hdc=%x->%x\n", (*pGDIGetDC)(hwnd), ret);
dxw.VirtualHDC=ret;
} }
else{
int err;
err=GetLastError();
OutTraceE("GDI.GetDC ERROR: hwnd=%x err=%d at %d\n", lochwnd, err, __LINE__);
if((err==ERROR_INVALID_WINDOW_HANDLE) && (lochwnd!=hwnd)){
ret=(*pGDIGetDC)(hwnd);
if(ret)
OutTraceDW("GDI.GetDC: hwnd=%x ret=%x\n", hwnd, ret);
else
OutTraceE("GDI.GetDC ERROR: hwnd=%x err=%d at %d\n", hwnd, GetLastError(), __LINE__);
}
}
return ret;
}
HDC WINAPI extEMUGetDC(HWND hwnd)
{
HDC ret;
HWND lochwnd;
OutTraceDW("GDI.GetDC: hwnd=%x\n", hwnd);
lochwnd=hwnd;
if (dxw.IsRealDesktop(hwnd)) {
OutTraceDW("GDI.GetDC: desktop remapping hwnd=%x->%x\n", hwnd, dxw.GethWnd());
lochwnd=dxw.GethWnd();
}
ret=dxw.AcquireEmulatedDC(lochwnd);
OutTraceDW("GDI.GetDC: remapping hdc=%x->%x\n", (*pGDIGetDC)(hwnd), ret);
dxw.VirtualHDC=ret;
if(ret){ if(ret){
OutTraceDW("GDI.GetDC: hwnd=%x ret=%x\n", lochwnd, ret); OutTraceDW("GDI.GetDC: hwnd=%x ret=%x\n", lochwnd, ret);
@ -1666,9 +1705,6 @@ HDC WINAPI extGDIGetDCEx(HWND hwnd, HRGN hrgnClip, DWORD flags)
lochwnd=dxw.GethWnd(); lochwnd=dxw.GethWnd();
} }
if(dxw.dwFlags3 & GDIEMULATEDC)
ret=dxw.AcquireEmulatedDC(lochwnd);
else
ret=(*pGDIGetDC)(lochwnd); ret=(*pGDIGetDC)(lochwnd);
if(ret){ if(ret){
@ -1690,6 +1726,42 @@ HDC WINAPI extGDIGetDCEx(HWND hwnd, HRGN hrgnClip, DWORD flags)
return ret; return ret;
} }
HDC WINAPI extEMUGetDCEx(HWND hwnd, HRGN hrgnClip, DWORD flags)
{
// used by Star Wars Shadow of the Empire
HDC ret;
HWND lochwnd;
OutTraceDW("GDI.GetDCEx: hwnd=%x hrgnClip=%x flags=%x(%s)\n", hwnd, hrgnClip, flags, ExplainGetDCExFlags(flags));
lochwnd=hwnd;
if (dxw.IsRealDesktop(hwnd)) {
OutTraceDW("GDI.GetDCEx: desktop remapping hwnd=%x->%x\n", hwnd, dxw.GethWnd());
lochwnd=dxw.GethWnd();
}
ret=dxw.AcquireEmulatedDC(lochwnd);
OutTraceDW("GDI.GetDCEx: remapping hdc=%x->%x\n", (*pGDIGetDC)(hwnd), ret);
dxw.VirtualHDC=ret;
if(ret){
OutTraceDW("GDI.GetDCEx: hwnd=%x ret=%x\n", lochwnd, ret);
}
else{
int err;
err=GetLastError();
OutTraceE("GDI.GetDCEx ERROR: hwnd=%x err=%d at %d\n", lochwnd, err, __LINE__);
if((err==ERROR_INVALID_WINDOW_HANDLE) && (lochwnd!=hwnd)){
ret=(*pGDIGetDCEx)(hwnd, hrgnClip, flags);
if(ret)
OutTraceDW("GDI.GetDCEx: hwnd=%x ret=%x\n", hwnd, ret);
else
OutTraceE("GDI.GetDCEx ERROR: hwnd=%x err=%d at %d\n", hwnd, GetLastError(), __LINE__);
}
}
return ret;
}
HDC WINAPI extGDIGetWindowDC(HWND hwnd) HDC WINAPI extGDIGetWindowDC(HWND hwnd)
{ {
HDC ret; HDC ret;
@ -1701,6 +1773,43 @@ HDC WINAPI extGDIGetWindowDC(HWND hwnd)
lochwnd=dxw.GethWnd(); lochwnd=dxw.GethWnd();
} }
if(dxw.IsFullScreen()){
ret=dxw.AcquireEmulatedDC(lochwnd);
OutTraceDW("GDI.GetWindowDC: remapping hdc=%x->%x\n", (*pGDIGetDC)(hwnd), ret);
dxw.VirtualHDC=ret;
}
else
ret=(*pGDIGetWindowDC)(lochwnd);
if(ret){
OutTraceDW("GDI.GetWindowDC: hwnd=%x ret=%x\n", lochwnd, ret);
}
else{
int err;
err=GetLastError();
OutTraceE("GDI.GetWindowDC ERROR: hwnd=%x err=%d at %d\n", lochwnd, err, __LINE__);
if((err==ERROR_INVALID_WINDOW_HANDLE) && (lochwnd!=hwnd)){
ret=(*pGDIGetWindowDC)(hwnd);
if(ret)
OutTraceDW("GDI.GetWindowDC: hwnd=%x ret=%x\n", hwnd, ret);
else
OutTraceE("GDI.GetWindowDC ERROR: hwnd=%x err=%d at %d\n", hwnd, GetLastError(), __LINE__);
}
}
return ret;
}
HDC WINAPI extEMUGetWindowDC(HWND hwnd)
{
HDC ret;
HWND lochwnd;
OutTraceDW("GDI.GetWindowDC: hwnd=%x\n", hwnd);
lochwnd=hwnd;
if (dxw.IsRealDesktop(hwnd)) {
OutTraceDW("GDI.GetWindowDC: desktop remapping hwnd=%x->%x\n", hwnd, dxw.GethWnd());
lochwnd=dxw.GethWnd();
}
if(dxw.IsDesktop(hwnd) && dxw.IsFullScreen()) if(dxw.IsDesktop(hwnd) && dxw.IsFullScreen())
ret=(*pGDIGetDC)(lochwnd); ret=(*pGDIGetDC)(lochwnd);
else else
@ -1729,13 +1838,24 @@ int WINAPI extGDIReleaseDC(HWND hwnd, HDC hDC)
int res; int res;
OutTraceDW("GDI.ReleaseDC: hwnd=%x hdc=%x\n", hwnd, hDC); OutTraceDW("GDI.ReleaseDC: hwnd=%x hdc=%x\n", hwnd, hDC);
if (dxw.IsRealDesktop(hwnd)) hwnd=dxw.GethWnd(); if (dxw.IsRealDesktop(hwnd)) hwnd=dxw.GethWnd();
if((dxw.dwFlags3 & GDIEMULATEDC) && (hDC == dxw.VirtualHDC)) // v2.02.53 !!!!!
res=dxw.ReleaseEmulatedDC(hwnd);
else
res=(*pGDIReleaseDC)(hwnd, hDC); res=(*pGDIReleaseDC)(hwnd, hDC);
if (!res) OutTraceE("GDI.ReleaseDC ERROR: err=%d at %d\n", GetLastError(), __LINE__);
return(res);
}
int WINAPI extEMUReleaseDC(HWND hwnd, HDC hDC)
{
int res;
HDC windc;
OutTraceDW("GDI.ReleaseDC: hwnd=%x hdc=%x\n", hwnd, hDC);
if (dxw.IsRealDesktop(hwnd)) hwnd=dxw.GethWnd();
windc=(*pGDIGetDC)(hwnd);
res=dxw.ReleaseEmulatedDC(hwnd);
res=(*pGDIReleaseDC)(hwnd, windc);
if (!res) OutTraceE("GDI.ReleaseDC ERROR: err=%d at %d\n", GetLastError(), __LINE__); if (!res) OutTraceE("GDI.ReleaseDC ERROR: err=%d at %d\n", GetLastError(), __LINE__);
return(res); return(res);
} }
@ -1747,28 +1867,42 @@ HDC WINAPI extBeginPaint(HWND hwnd, LPPAINTSTRUCT lpPaint)
OutTraceDW("GDI.BeginPaint: hwnd=%x lpPaint=%x FullScreen=%x\n", hwnd, lpPaint, dxw.IsFullScreen()); OutTraceDW("GDI.BeginPaint: hwnd=%x lpPaint=%x FullScreen=%x\n", hwnd, lpPaint, dxw.IsFullScreen());
hdc=(*pBeginPaint)(hwnd, lpPaint); hdc=(*pBeginPaint)(hwnd, lpPaint);
// avoid access to real desktop
if(dxw.IsRealDesktop(hwnd)) hwnd=dxw.GethWnd();
// if not in fullscreen mode, that's all! // if not in fullscreen mode, that's all!
if(!dxw.IsFullScreen()) return hdc; if(!dxw.IsFullScreen()) return hdc;
// on CLIENTREMAPPING, resize the paint area to virtual screen size // on CLIENTREMAPPING, resize the paint area to virtual screen size
if(dxw.dwFlags1 & CLIENTREMAPPING) lpPaint->rcPaint=dxw.GetScreenRect(); if(dxw.dwFlags1 & CLIENTREMAPPING) lpPaint->rcPaint=dxw.GetScreenRect();
if(!dxw.IsDesktop(hwnd)) return hdc;
if(dxw.dwFlags3 & GDIEMULATEDC) {
HDC EmuHDC;
EmuHDC = dxw.AcquireEmulatedDC(hwnd);
lpPaint->hdc=EmuHDC;
//dxw.MapClient(&lpPaint->rcPaint);
OutTraceDW("GDI.BeginPaint(GDIEMULATEDC): hdc=%x -> %x\n", hdc, EmuHDC);
return EmuHDC;
}
OutTraceDW("GDI.BeginPaint: hdc=%x\n", hdc); OutTraceDW("GDI.BeginPaint: hdc=%x\n", hdc);
return hdc; return hdc;
} }
#ifndef EXPERIMENTAL HDC WINAPI extEMUBeginPaint(HWND hwnd, LPPAINTSTRUCT lpPaint)
{
HDC hdc;
HDC EmuHDC;
OutTraceDW("GDI.BeginPaint: hwnd=%x lpPaint=%x FullScreen=%x\n", hwnd, lpPaint, dxw.IsFullScreen());
hdc=(*pBeginPaint)(hwnd, lpPaint);
// avoid access to real desktop
if(dxw.IsRealDesktop(hwnd)) hwnd=dxw.GethWnd();
// if not in fullscreen mode, that's all!
if(!dxw.IsFullScreen()) return hdc;
// on CLIENTREMAPPING, resize the paint area to virtual screen size
if(dxw.dwFlags1 & CLIENTREMAPPING) lpPaint->rcPaint=dxw.GetScreenRect();
EmuHDC = dxw.AcquireEmulatedDC(hwnd);
lpPaint->hdc=EmuHDC;
OutTraceDW("GDI.BeginPaint: hdc=%x -> %x\n", hdc, EmuHDC);
return EmuHDC;
}
HDC WINAPI extDDBeginPaint(HWND hwnd, LPPAINTSTRUCT lpPaint) HDC WINAPI extDDBeginPaint(HWND hwnd, LPPAINTSTRUCT lpPaint)
{ {
HDC hdc; HDC hdc;
@ -1814,51 +1948,6 @@ HDC WINAPI extDDBeginPaint(HWND hwnd, LPPAINTSTRUCT lpPaint)
OutTraceDW("GDI.BeginPaint(MAPGDITOPRIMARY): hdc=%x -> %x\n", hdc, PrimHDC); OutTraceDW("GDI.BeginPaint(MAPGDITOPRIMARY): hdc=%x -> %x\n", hdc, PrimHDC);
return PrimHDC; return PrimHDC;
} }
#else
HDC WINAPI extDDBeginPaint(HWND hwnd, LPPAINTSTRUCT lpPaint)
{
HDC hdc;
extern HRESULT WINAPI extGetDC(LPDIRECTDRAWSURFACE, HDC FAR *);
OutTraceDW("GDI.BeginPaint: hwnd=%x%s lpPaint=%x FullScreen=%x\n",
hwnd, dxw.IsDesktop(hwnd)?"(DESKTOP)":"", lpPaint, dxw.IsFullScreen());
if(dxw.IsDesktop(hwnd)) hwnd=dxw.GethWnd();
hdc=(*pBeginPaint)(hwnd, lpPaint);
// if not in fullscreen mode, that's all!
if(!dxw.IsFullScreen()) return hdc;
// on MAPGDITOPRIMARY, return the PrimHDC handle instead of the window DC
// if a primary surface has not been created yet, do it
if(!pGetDC || !dxw.lpDDSPrimHDC){
extern HRESULT WINAPI extDirectDrawCreate(GUID FAR *, LPDIRECTDRAW FAR *, IUnknown FAR *);
HRESULT res;
LPDIRECTDRAW lpDD;
LPDIRECTDRAWSURFACE lpDDS;
DDSURFACEDESC ddsd;
res=extDirectDrawCreate(0, &lpDD, NULL);
lpDD->SetCooperativeLevel(dxw.GethWnd(), DDSCL_FULLSCREEN | DDSCL_EXCLUSIVE);
memset((void *)&ddsd, 0, sizeof(DDSURFACEDESC));
ddsd.dwSize = sizeof(DDSURFACEDESC);
ddsd.dwFlags = DDSD_CAPS|DDSD_HEIGHT|DDSD_WIDTH;
ddsd.ddsCaps.dwCaps = DDSCAPS_PRIMARYSURFACE;
ddsd.dwHeight = dxw.GetScreenHeight();
ddsd.dwWidth = dxw.GetScreenWidth();
res=lpDD->CreateSurface(&ddsd, &lpDDS, NULL);
dxw.lpDDSPrimHDC = lpDDS;
OutTraceDW("GDI.BeginPaint(MAPGDITOPRIMARY): dd=%x ddsPrim=%x\n", lpDD, lpDDS);
}
HDC EmuHDC;
EmuHDC = dxw.AcquireEmulatedDC(dxw.lpDDSPrimHDC);
lpPaint->hdc=EmuHDC;
lpPaint->rcPaint=dxw.GetScreenRect();
OutTraceDW("GDI.BeginPaint(MAPGDITOPRIMARY): hdc=%x -> %x\n", hdc, EmuHDC);
return EmuHDC;
}
#endif
BOOL WINAPI extEndPaint(HWND hwnd, const PAINTSTRUCT *lpPaint) BOOL WINAPI extEndPaint(HWND hwnd, const PAINTSTRUCT *lpPaint)
{ {
@ -1866,11 +1955,23 @@ BOOL WINAPI extEndPaint(HWND hwnd, const PAINTSTRUCT *lpPaint)
OutTraceDW("GDI.EndPaint: hwnd=%x lpPaint=%x lpPaint.hdc=%x\n", hwnd, lpPaint, lpPaint->hdc); OutTraceDW("GDI.EndPaint: hwnd=%x lpPaint=%x lpPaint.hdc=%x\n", hwnd, lpPaint, lpPaint->hdc);
if((dxw.dwFlags3 & GDIEMULATEDC) && dxw.IsFullScreen() && dxw.IsDesktop(hwnd)){ ret=(*pEndPaint)(hwnd, lpPaint);
OutTraceDW("GDI.EndPaint: hwnd=%x ret=%x\n", hwnd, ret);
if(!ret) OutTraceE("GDI.EndPaint ERROR: err=%d at %d\n", GetLastError(), __LINE__);
return ret;
}
BOOL WINAPI extEMUEndPaint(HWND hwnd, const PAINTSTRUCT *lpPaint)
{
BOOL ret;
OutTraceDW("GDI.EndPaint: hwnd=%x lpPaint=%x lpPaint.hdc=%x\n", hwnd, lpPaint, lpPaint->hdc);
if(dxw.IsFullScreen()){
OutTraceDW("GDI.EndPaint(GDIEMULATEDC): hwnd=%x\n", hwnd); OutTraceDW("GDI.EndPaint(GDIEMULATEDC): hwnd=%x\n", hwnd);
ret=dxw.ReleaseEmulatedDC(hwnd); ret=dxw.ReleaseEmulatedDC(hwnd);
} }
else
// proxy part ... // proxy part ...
ret=(*pEndPaint)(hwnd, lpPaint); ret=(*pEndPaint)(hwnd, lpPaint);
OutTraceDW("GDI.EndPaint: hwnd=%x ret=%x\n", hwnd, ret); OutTraceDW("GDI.EndPaint: hwnd=%x ret=%x\n", hwnd, ret);
@ -1878,7 +1979,6 @@ BOOL WINAPI extEndPaint(HWND hwnd, const PAINTSTRUCT *lpPaint)
return ret; return ret;
} }
#ifndef EXPERIMENTAL
BOOL WINAPI extDDEndPaint(HWND hwnd, const PAINTSTRUCT *lpPaint) BOOL WINAPI extDDEndPaint(HWND hwnd, const PAINTSTRUCT *lpPaint)
{ {
BOOL ret; BOOL ret;
@ -1886,16 +1986,32 @@ BOOL WINAPI extDDEndPaint(HWND hwnd, const PAINTSTRUCT *lpPaint)
extern HRESULT WINAPI extGetDC(LPDIRECTDRAWSURFACE, HDC FAR *); extern HRESULT WINAPI extGetDC(LPDIRECTDRAWSURFACE, HDC FAR *);
extern HRESULT WINAPI extBlt(LPDIRECTDRAWSURFACE lpdds, LPRECT lpdestrect, LPDIRECTDRAWSURFACE lpddssrc, LPRECT lpsrcrect, DWORD dwflags, LPDDBLTFX lpddbltfx); extern HRESULT WINAPI extBlt(LPDIRECTDRAWSURFACE lpdds, LPRECT lpdestrect, LPDIRECTDRAWSURFACE lpddssrc, LPRECT lpsrcrect, DWORD dwflags, LPDDBLTFX lpddbltfx);
OutTraceDW("GDI.EndPaint: hwnd=%x%s lpPaint=%x lpPaint.hdc=%x\n", OutTraceDW("GDI.EndPaint(DD): hwnd=%x%s lpPaint=%x lpPaint.hdc=%x\n",
hwnd, dxw.IsDesktop(hwnd)?"(DESKTOP)":"", lpPaint, lpPaint->hdc); hwnd, dxw.IsDesktop(hwnd)?"(DESKTOP)":"", lpPaint, lpPaint->hdc);
// v2.02.53 ... // v2.02.53 ...
//if(dxw.IsFullScreen() && dxw.IsDesktop(hwnd)){ //if(dxw.IsFullScreen() && dxw.IsDesktop(hwnd)){
if(dxw.IsFullScreen()){ if(dxw.IsFullScreen()){
RECT Rect;
LPRECT lpRect;
ret=(*pEndPaint)(hwnd, lpPaint); ret=(*pEndPaint)(hwnd, lpPaint);
dxw.lpDDSPrimHDC->Unlock(NULL); dxw.lpDDSPrimHDC->Unlock(NULL);
//dxw.ScreenRefresh(); //dxw.ScreenRefresh();
extBlt(dxw.lpDDSPrimHDC, NULL, dxw.lpDDSPrimHDC, NULL, 0, NULL); if(dxw.IsDesktop(hwnd))
lpRect=NULL;
else{
POINT p={0,0};
lpRect=&Rect;
(*pGetClientRect)(hwnd, lpRect);
p=dxw.ClientOffset(hwnd);
lpRect->left += p.x;
lpRect->right += p.x;
lpRect->top += p.y;
lpRect->bottom += p.y;
//dxw.AddCoordinates(lpRect, p);
dxw.UnmapClient(lpRect);
}
extBlt(dxw.lpDDSPrimHDC, lpRect, dxw.lpDDSPrimHDC, NULL, 0, NULL);
return TRUE; return TRUE;
} }
@ -1905,40 +2021,6 @@ BOOL WINAPI extDDEndPaint(HWND hwnd, const PAINTSTRUCT *lpPaint)
if(!ret) OutTraceE("GDI.EndPaint ERROR: err=%d at %d\n", GetLastError(), __LINE__); if(!ret) OutTraceE("GDI.EndPaint ERROR: err=%d at %d\n", GetLastError(), __LINE__);
return ret; return ret;
} }
#else
BOOL WINAPI extDDEndPaint(HWND hwnd, const PAINTSTRUCT *lpPaint)
{
BOOL ret;
extern HRESULT WINAPI extReleaseDC(LPDIRECTDRAWSURFACE lpdds, HDC FAR hdc);
extern HRESULT WINAPI extGetDC(LPDIRECTDRAWSURFACE, HDC FAR *);
extern HRESULT WINAPI extBlt(LPDIRECTDRAWSURFACE lpdds, LPRECT lpdestrect, LPDIRECTDRAWSURFACE lpddssrc, LPRECT lpsrcrect, DWORD dwflags, LPDDBLTFX lpddbltfx);
OutTraceDW("GDI.EndPaint: hwnd=%x%s lpPaint=%x lpPaint.hdc=%x\n",
hwnd, dxw.IsDesktop(hwnd)?"(DESKTOP)":"", lpPaint, lpPaint->hdc);
// v2.02.53 ...
//if(dxw.IsFullScreen() && dxw.IsDesktop(hwnd)){
if(dxw.IsFullScreen()){
RECT client;
HDC hdc;
ret=(*pEndPaint)(hwnd, lpPaint);
(*pGetDC)(dxw.lpDDSPrimHDC, &hdc);
(*pGetClientRect)(hwnd, &client);
if(!(*pGDIBitBlt)(hdc, 0, 0, client.right, client.bottom, lpPaint->hdc, 0, 0, SRCCOPY))
OutTraceE("StretchBlt: ERROR err=%d at=%d\n", GetLastError(), __LINE__);
extReleaseDC(dxw.lpDDSPrimHDC, hdc);
//dxw.ScreenRefresh();
extBlt(dxw.lpDDSPrimHDC, NULL, dxw.lpDDSPrimHDC, NULL, 0, NULL);
return TRUE;
}
// proxy part ...
ret=(*pEndPaint)(hwnd, lpPaint);
OutTraceDW("GDI.EndPaint: hwnd=%x ret=%x\n", hwnd, ret);
if(!ret) OutTraceE("GDI.EndPaint ERROR: err=%d at %d\n", GetLastError(), __LINE__);
return ret;
}
#endif
HWND WINAPI extCreateDialogIndirectParam(HINSTANCE hInstance, LPCDLGTEMPLATE lpTemplate, HWND hWndParent, DLGPROC lpDialogFunc, LPARAM lParamInit) HWND WINAPI extCreateDialogIndirectParam(HINSTANCE hInstance, LPCDLGTEMPLATE lpTemplate, HWND hWndParent, DLGPROC lpDialogFunc, LPARAM lParamInit)
{ {
@ -1950,7 +2032,7 @@ HWND WINAPI extCreateDialogIndirectParam(HINSTANCE hInstance, LPCDLGTEMPLATE lpT
RetHWND=(*pCreateDialogIndirectParam)(hInstance, lpTemplate, hWndParent, lpDialogFunc, lParamInit); RetHWND=(*pCreateDialogIndirectParam)(hInstance, lpTemplate, hWndParent, lpDialogFunc, lParamInit);
WhndStackPush(RetHWND, (WNDPROC)lpDialogFunc); WhndStackPush(RetHWND, (WNDPROC)lpDialogFunc);
if(!(*pSetWindowLong)(RetHWND, DWL_DLGPROC, (LONG)extDialogWindowProc)) if(!(*pSetWindowLongA)(RetHWND, DWL_DLGPROC, (LONG)extDialogWindowProc))
OutTraceE("SetWindowLong: ERROR err=%d at %d\n", GetLastError(), __LINE__); OutTraceE("SetWindowLong: ERROR err=%d at %d\n", GetLastError(), __LINE__);
OutTraceDW("CreateDialogIndirectParam: hwnd=%x\n", RetHWND); OutTraceDW("CreateDialogIndirectParam: hwnd=%x\n", RetHWND);
@ -1969,7 +2051,7 @@ HWND WINAPI extCreateDialogParam(HINSTANCE hInstance, LPCTSTR lpTemplateName, HW
RetHWND=(*pCreateDialogParam)(hInstance, lpTemplateName, hWndParent, lpDialogFunc, lParamInit); RetHWND=(*pCreateDialogParam)(hInstance, lpTemplateName, hWndParent, lpDialogFunc, lParamInit);
WhndStackPush(RetHWND, (WNDPROC)lpDialogFunc); WhndStackPush(RetHWND, (WNDPROC)lpDialogFunc);
if(!(*pSetWindowLong)(RetHWND, DWL_DLGPROC, (LONG)extDialogWindowProc)) if(!(*pSetWindowLongA)(RetHWND, DWL_DLGPROC, (LONG)extDialogWindowProc))
OutTraceE("SetWindowLong: ERROR err=%d at %d\n", GetLastError(), __LINE__); OutTraceE("SetWindowLong: ERROR err=%d at %d\n", GetLastError(), __LINE__);
OutTraceDW("CreateDialogParam: hwnd=%x\n", RetHWND); OutTraceDW("CreateDialogParam: hwnd=%x\n", RetHWND);
@ -2002,7 +2084,7 @@ BOOL WINAPI extMoveWindow(HWND hwnd, int X, int Y, int nWidth, int nHeight, BOOL
BOOL isChild; BOOL isChild;
(*pClientToScreen)(dxw.GethWnd(),&upleft); (*pClientToScreen)(dxw.GethWnd(),&upleft);
(*pGetClientRect)(dxw.GethWnd(),&client); (*pGetClientRect)(dxw.GethWnd(),&client);
if ((*pGetWindowLong)(hwnd, GWL_STYLE) & WS_CHILD){ if ((*pGetWindowLongA)(hwnd, GWL_STYLE) & WS_CHILD){
isChild=TRUE; isChild=TRUE;
// child coordinate adjustement // child coordinate adjustement
X = (X * client.right) / dxw.GetScreenWidth(); X = (X * client.right) / dxw.GetScreenWidth();

View File

@ -47,6 +47,8 @@
#define IDC_FILE 1000 #define IDC_FILE 1000
#define IDC_OPEN 1001 #define IDC_OPEN 1001
#define IDC_MODULE 1002 #define IDC_MODULE 1002
#define IDC_LAUNCH 1003
#define IDC_OPENLAUNCH 1004
#define IDC_STATUSINFO 1005 #define IDC_STATUSINFO 1005
#define IDC_VERSION 1006 #define IDC_VERSION 1006
#define IDC_UNNOTIFY 1007 #define IDC_UNNOTIFY 1007
@ -73,8 +75,6 @@
#define IDC_VIDEOTOSYSTEMMEM 1030 #define IDC_VIDEOTOSYSTEMMEM 1030
#define IDC_FIXTEXTOUT 1031 #define IDC_FIXTEXTOUT 1031
#define IDC_KEEPCURSORWITHIN 1032 #define IDC_KEEPCURSORWITHIN 1032
#define IDC_FIXTEXTOUT2 1032
#define IDC_HOOKGLIDE 1032
#define IDC_USERGB565 1033 #define IDC_USERGB565 1033
#define IDC_SUPPRESSDXERRORS 1034 #define IDC_SUPPRESSDXERRORS 1034
#define IDC_PREVENTMAXIMIZE 1035 #define IDC_PREVENTMAXIMIZE 1035
@ -89,7 +89,6 @@
#define IDC_POSY 1047 #define IDC_POSY 1047
#define IDC_SIZX 1048 #define IDC_SIZX 1048
#define IDC_SIZY 1049 #define IDC_SIZY 1049
#define IDC_DISABLEFOGGING 1049
#define IDC_HOOKCHILDWIN 1050 #define IDC_HOOKCHILDWIN 1050
#define IDC_MESSAGEPROC 1051 #define IDC_MESSAGEPROC 1051
#define IDC_RECOVERSCREENMODE 1053 #define IDC_RECOVERSCREENMODE 1053
@ -132,13 +131,11 @@
#define IDC_WINDOWIZE 1091 #define IDC_WINDOWIZE 1091
#define IDC_NOBANNER 1092 #define IDC_NOBANNER 1092
#define IDC_STARTDEBUG 1093 #define IDC_STARTDEBUG 1093
#define IDC_PALETTECOLORS 1093
#define IDC_WIREFRAME 1094 #define IDC_WIREFRAME 1094
#define IDC_DISABLEGAMMARAMP 1095 #define IDC_DISABLEGAMMARAMP 1095
#define IDC_FORCEWINRESIZE 1096 #define IDC_FORCEWINRESIZE 1096
#define IDC_FORCE16BPP 1097 #define IDC_FORCE16BPP 1097
#define IDC_FORCEHOOKOPENGL 1098 #define IDC_FORCEHOOKOPENGL 1098
#define IDC_LISTRES 1098
#define IDC_DESKTOPCENTER 1099 #define IDC_DESKTOPCENTER 1099
#define IDC_COORDINATES 1100 #define IDC_COORDINATES 1100
#define IDC_SUPPRESSD3DEXT 1101 #define IDC_SUPPRESSD3DEXT 1101
@ -211,6 +208,11 @@
#define IDC_SUPPORTSVGA 1170 #define IDC_SUPPORTSVGA 1170
#define IDC_SUPPORTHDMI 1171 #define IDC_SUPPORTHDMI 1171
#define IDC_NATIVERES 1172 #define IDC_NATIVERES 1172
#define IDC_LISTRES 1173
#define IDC_PALETTECOLORS 1174
#define IDC_DISABLEFOGGING 1175
#define IDC_RELEASEMOUSE 1176
#define IDC_HOOKGLIDE 1177
#define ID_MODIFY 32771 #define ID_MODIFY 32771
#define ID_DELETE 32772 #define ID_DELETE 32772
#define ID_ADD 32773 #define ID_ADD 32773

View File

@ -1,9 +1,9 @@
// TabDirectX.cpp : implementation file // TabInput.cpp : implementation file
// //
#include "stdafx.h" #include "stdafx.h"
#include "TargetDlg.h" #include "TargetDlg.h"
#include "TabMouse.h" #include "TabInput.h"
#ifdef _DEBUG #ifdef _DEBUG
#define new DEBUG_NEW #define new DEBUG_NEW
@ -37,6 +37,7 @@ void CTabInput::DoDataExchange(CDataExchange* pDX)
DDX_Check(pDX, IDC_MESSAGEPROC, cTarget->m_MessageProc); DDX_Check(pDX, IDC_MESSAGEPROC, cTarget->m_MessageProc);
DDX_Check(pDX, IDC_FIXNCHITTEST, cTarget->m_FixNCHITTEST); DDX_Check(pDX, IDC_FIXNCHITTEST, cTarget->m_FixNCHITTEST);
DDX_Check(pDX, IDC_SLOW, cTarget->m_SlowDown); DDX_Check(pDX, IDC_SLOW, cTarget->m_SlowDown);
DDX_Check(pDX, IDC_RELEASEMOUSE, cTarget->m_ReleaseMouse);
// DirectInput // DirectInput
DDX_Check(pDX, IDC_HOOKDI, cTarget->m_HookDI); DDX_Check(pDX, IDC_HOOKDI, cTarget->m_HookDI);
DDX_Text(pDX, IDC_INITX, cTarget->m_InitX); DDX_Text(pDX, IDC_INITX, cTarget->m_InitX);
@ -45,6 +46,9 @@ void CTabInput::DoDataExchange(CDataExchange* pDX)
DDX_Text(pDX, IDC_MAXY, cTarget->m_MaxY); DDX_Text(pDX, IDC_MAXY, cTarget->m_MaxY);
DDX_Text(pDX, IDC_MINX, cTarget->m_MinX); DDX_Text(pDX, IDC_MINX, cTarget->m_MinX);
DDX_Text(pDX, IDC_MINY, cTarget->m_MinY); DDX_Text(pDX, IDC_MINY, cTarget->m_MinY);
// Message processing
DDX_Check(pDX, IDC_FILTERMESSAGES, cTarget->m_FilterMessages);
DDX_Check(pDX, IDC_PEEKALLMESSAGES, cTarget->m_PeekAllMessages);
} }
BEGIN_MESSAGE_MAP(CTabInput, CDialog) BEGIN_MESSAGE_MAP(CTabInput, CDialog)

View File

@ -28,18 +28,17 @@ void CTabProgram::DoDataExchange(CDataExchange* pDX)
CTargetDlg *cTarget = ((CTargetDlg *)(this->GetParent()->GetParent())); CTargetDlg *cTarget = ((CTargetDlg *)(this->GetParent()->GetParent()));
DDX_Radio(pDX, IDC_COORDINATES, cTarget->m_Coordinates); DDX_Radio(pDX, IDC_COORDINATES, cTarget->m_Coordinates);
DDX_Control(pDX, IDC_FILE, cTarget->m_File); DDX_Control(pDX, IDC_FILE, cTarget->m_File);
DDX_Control(pDX, IDC_LAUNCH, cTarget->m_Launch);
DDX_Text(pDX, IDC_FILE, cTarget->m_FilePath); DDX_Text(pDX, IDC_FILE, cTarget->m_FilePath);
DDX_Text(pDX, IDC_LAUNCH, cTarget->m_LaunchPath);
DDX_Text(pDX, IDC_TITLE, cTarget->m_Title); DDX_Text(pDX, IDC_TITLE, cTarget->m_Title);
DDX_Text(pDX, IDC_MODULE, cTarget->m_Module); DDX_Text(pDX, IDC_MODULE, cTarget->m_Module);
DDX_Check(pDX, IDC_UNNOTIFY, cTarget->m_UnNotify); DDX_Check(pDX, IDC_UNNOTIFY, cTarget->m_UnNotify);
DDX_Check(pDX, IDC_WINDOWIZE, cTarget->m_Windowize); DDX_Check(pDX, IDC_WINDOWIZE, cTarget->m_Windowize);
DDX_Check(pDX, IDC_HOOKDLLS, cTarget->m_HookDLLs); DDX_Check(pDX, IDC_HOOKDLLS, cTarget->m_HookDLLs);
DDX_Check(pDX, IDC_FULLSCREENONLY, cTarget->m_FullScreenOnly); DDX_Check(pDX, IDC_FULLSCREENONLY, cTarget->m_FullScreenOnly);
DDX_Check(pDX, IDC_FILTERMESSAGES, cTarget->m_FilterMessages);
DDX_Check(pDX, IDC_PEEKALLMESSAGES, cTarget->m_PeekAllMessages);
DDX_Check(pDX, IDC_HOOKCHILDWIN, cTarget->m_HookChildWin); DDX_Check(pDX, IDC_HOOKCHILDWIN, cTarget->m_HookChildWin);
DDX_Check(pDX, IDC_HOOKENABLED, cTarget->m_HookEnabled); DDX_Check(pDX, IDC_HOOKENABLED, cTarget->m_HookEnabled);
DDX_Check(pDX, IDC_NOBANNER, cTarget->m_NoBanner);
DDX_Check(pDX, IDC_STARTDEBUG, cTarget->m_StartDebug); DDX_Check(pDX, IDC_STARTDEBUG, cTarget->m_StartDebug);
DDX_Check(pDX, IDC_CLIENTREMAPPING, cTarget->m_ClientRemapping); DDX_Check(pDX, IDC_CLIENTREMAPPING, cTarget->m_ClientRemapping);
DDX_Check(pDX, IDC_SAVELOAD, cTarget->m_SaveLoad); DDX_Check(pDX, IDC_SAVELOAD, cTarget->m_SaveLoad);
@ -56,6 +55,7 @@ BEGIN_MESSAGE_MAP(CTabProgram, CDialog)
//{{AFX_MSG_MAP(CTabProgram) //{{AFX_MSG_MAP(CTabProgram)
// NOTE: the ClassWizard will add message map macros here // NOTE: the ClassWizard will add message map macros here
ON_BN_CLICKED(IDC_OPEN, OnOpen) ON_BN_CLICKED(IDC_OPEN, OnOpen)
ON_BN_CLICKED(IDC_OPENLAUNCH, OnOpenLaunch)
//}}AFX_MSG_MAP //}}AFX_MSG_MAP
//ON_BN_CLICKED(IDC_COORDINATES, &CTabProgram::OnBnClickedCoordinates) //ON_BN_CLICKED(IDC_COORDINATES, &CTabProgram::OnBnClickedCoordinates)
//ON_BN_CLICKED(IDC_DESKTOPWORKAREA, &CTabProgram::OnBnClickedDesktopworkarea) //ON_BN_CLICKED(IDC_DESKTOPWORKAREA, &CTabProgram::OnBnClickedDesktopworkarea)
@ -75,6 +75,18 @@ void CTabProgram::OnOpen()
"Program (*.exe)|*.exe|All Files (*.*)|*.*||", this); "Program (*.exe)|*.exe|All Files (*.*)|*.*||", this);
if( dlg.DoModal() == IDOK) cTarget->m_File.SetWindowText(dlg.GetPathName()); if( dlg.DoModal() == IDOK) cTarget->m_File.SetWindowText(dlg.GetPathName());
} }
void CTabProgram::OnOpenLaunch()
{
// TODO: Please add your control notification handler code here
char path[MAX_PATH];
CTargetDlg *cTarget = ((CTargetDlg *)(this->GetParent()->GetParent()));
cTarget->m_File.GetWindowText(path, MAX_PATH);
CFileDialog dlg( TRUE, "*.*", path, OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT,
"Program (*.exe)|*.exe|All Files (*.*)|*.*||", this);
if( dlg.DoModal() == IDOK) cTarget->m_Launch.SetWindowText(dlg.GetPathName());
}
void CTabProgram::OnBnClickedCoordinates() void CTabProgram::OnBnClickedCoordinates()
{ {
// TODO: Add your control notification handler code here // TODO: Add your control notification handler code here

View File

@ -17,6 +17,7 @@ class CTabProgram : public CDialog
public: public:
CTabProgram(CWnd* pParent = NULL); // standard constructor CTabProgram(CWnd* pParent = NULL); // standard constructor
void OnOpen(void); void OnOpen(void);
void OnOpenLaunch(void);
// Dialog Data // Dialog Data
//{{AFX_DATA(CTabProgram) //{{AFX_DATA(CTabProgram)

View File

@ -45,6 +45,7 @@ void CTabWindow::DoDataExchange(CDataExchange* pDX)
DDX_Check(pDX, IDC_NOWINDOWMOVE, cTarget->m_NoWindowMove); DDX_Check(pDX, IDC_NOWINDOWMOVE, cTarget->m_NoWindowMove);
DDX_Check(pDX, IDC_SUPPRESSCHILD, cTarget->m_SuppressChild); DDX_Check(pDX, IDC_SUPPRESSCHILD, cTarget->m_SuppressChild);
DDX_Check(pDX, IDC_HIDEDESKTOP, cTarget->m_HideDesktop); DDX_Check(pDX, IDC_HIDEDESKTOP, cTarget->m_HideDesktop);
DDX_Check(pDX, IDC_NOBANNER, cTarget->m_NoBanner);
// color management // color management
DDX_Check(pDX, IDC_INIT8BPP, cTarget->m_Init8BPP); DDX_Check(pDX, IDC_INIT8BPP, cTarget->m_Init8BPP);

View File

@ -126,6 +126,7 @@ CTargetDlg::CTargetDlg(CWnd* pParent /*=NULL*/)
m_TimeStretch = FALSE; m_TimeStretch = FALSE;
m_StretchTimers = FALSE; m_StretchTimers = FALSE;
m_FineTiming = FALSE; m_FineTiming = FALSE;
m_ReleaseMouse = FALSE;
m_InterceptRDTSC = FALSE; m_InterceptRDTSC = FALSE;
m_HookOpenGL = FALSE; m_HookOpenGL = FALSE;
m_ForceHookOpenGL = FALSE; m_ForceHookOpenGL = FALSE;

View File

@ -23,6 +23,7 @@ public:
enum { IDD = IDD_TARGET }; enum { IDD = IDD_TARGET };
CDXTabCtrl m_tabdxTabCtrl; CDXTabCtrl m_tabdxTabCtrl;
CEdit m_File; CEdit m_File;
CEdit m_Launch;
int m_DXVersion; int m_DXVersion;
int m_Coordinates; int m_Coordinates;
int m_DxEmulationMode; int m_DxEmulationMode;
@ -54,6 +55,7 @@ public:
BOOL m_StartDebug; BOOL m_StartDebug;
BOOL m_HookEnabled; BOOL m_HookEnabled;
CString m_FilePath; CString m_FilePath;
CString m_LaunchPath;
CString m_Module; CString m_Module;
CString m_Title; CString m_Title;
CString m_OpenGLLib; CString m_OpenGLLib;
@ -107,6 +109,7 @@ public:
BOOL m_TimeStretch; BOOL m_TimeStretch;
BOOL m_StretchTimers; BOOL m_StretchTimers;
BOOL m_FineTiming; BOOL m_FineTiming;
BOOL m_ReleaseMouse;
BOOL m_InterceptRDTSC; BOOL m_InterceptRDTSC;
BOOL m_HookOpenGL; BOOL m_HookOpenGL;
BOOL m_ForceHookOpenGL; BOOL m_ForceHookOpenGL;

View File

@ -24,7 +24,7 @@
#include "TabProgram.h" #include "TabProgram.h"
#include "TabLogs.h" #include "TabLogs.h"
#include "TabDirectX.h" #include "TabDirectX.h"
#include "TabMouse.h" #include "TabInput.h"
#include "TabTiming.h" #include "TabTiming.h"
#include "TabWindow.h" #include "TabWindow.h"
#include "TabOpenGL.h" #include "TabOpenGL.h"

Binary file not shown.

View File

@ -22,6 +22,7 @@
typedef struct PRIVATEMAP typedef struct PRIVATEMAP
{ {
char title[40+1]; char title[40+1];
char launchpath[MAX_PATH+1];
}PRIVATEMAP; }PRIVATEMAP;
///////////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////////////

View File

@ -259,8 +259,8 @@ BEGIN
EDITTEXT IDC_FILE,39,31,162,14,ES_AUTOHSCROLL EDITTEXT IDC_FILE,39,31,162,14,ES_AUTOHSCROLL
LTEXT "Path:",IDC_STATIC,11,33,22,9 LTEXT "Path:",IDC_STATIC,11,33,22,9
PUSHBUTTON "...",IDC_OPEN,207,31,12,14 PUSHBUTTON "...",IDC_OPEN,207,31,12,14
EDITTEXT IDC_MODULE,39,49,161,14,ES_AUTOHSCROLL EDITTEXT IDC_MODULE,39,65,161,14,ES_AUTOHSCROLL
LTEXT "Module:",IDC_STATIC,11,52,25,9 LTEXT "Module:",IDC_STATIC,11,68,25,9
LTEXT "Window initial position && size",IDC_STATIC,18,198,115,9 LTEXT "Window initial position && size",IDC_STATIC,18,198,115,9
LTEXT "X",IDC_STATIC,18,214,9,9 LTEXT "X",IDC_STATIC,18,214,9,9
LTEXT "Y",IDC_STATIC,49,214,9,9 LTEXT "Y",IDC_STATIC,49,214,9,9
@ -270,27 +270,27 @@ BEGIN
EDITTEXT IDC_POSY,55,210,19,14,ES_AUTOHSCROLL | ES_NUMBER,WS_EX_RIGHT EDITTEXT IDC_POSY,55,210,19,14,ES_AUTOHSCROLL | ES_NUMBER,WS_EX_RIGHT
EDITTEXT IDC_SIZX,85,210,19,14,ES_AUTOHSCROLL,WS_EX_RIGHT EDITTEXT IDC_SIZX,85,210,19,14,ES_AUTOHSCROLL,WS_EX_RIGHT
EDITTEXT IDC_SIZY,113,210,19,14,ES_AUTOHSCROLL,WS_EX_RIGHT EDITTEXT IDC_SIZY,113,210,19,14,ES_AUTOHSCROLL,WS_EX_RIGHT
CONTROL "Do not notify on task switch",IDC_UNNOTIFY,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,16,93,124,10 CONTROL "Do not notify on task switch",IDC_UNNOTIFY,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,16,105,124,10
CONTROL "Optimize CPU (DirectX1 - 7)",IDC_SAVELOAD,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,170,129,109,10 CONTROL "Optimize CPU (DirectX1 - 7)",IDC_SAVELOAD,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,170,141,109,10
CONTROL "Intercept Alt-F4 key",IDC_HANDLEALTF4,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,16,105,109,10 CONTROL "Intercept Alt-F4 key",IDC_HANDLEALTF4,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,16,117,109,10
CONTROL "Run in Window",IDC_WINDOWIZE,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,16,117,124,10 CONTROL "Run in Window",IDC_WINDOWIZE,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,16,129,124,10
GROUPBOX "Generic",IDC_STATIC,7,65,286,106 GROUPBOX "Generic",IDC_STATIC,7,82,286,89
CONTROL "No banner",IDC_NOBANNER,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,170,93,108,10 CONTROL "use DLL Injection",IDC_STARTDEBUG,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,170,117,100,10
CONTROL "use DLL Injection",IDC_STARTDEBUG,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,170,105,100,10 CONTROL "Remap Client Rect",IDC_CLIENTREMAPPING,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,170,93,115,10
CONTROL "Remap Client Rect",IDC_CLIENTREMAPPING,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,170,81,115,10 CONTROL "Hook all DLLs",IDC_HOOKDLLS,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,16,141,124,10
CONTROL "Hook all DLLs",IDC_HOOKDLLS,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,16,129,124,10 CONTROL "Hook enabled",IDC_HOOKENABLED,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,16,93,124,10
CONTROL "Hook enabled",IDC_HOOKENABLED,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,16,81,124,10
CONTROL "X,Y coordinates",IDC_COORDINATES,"Button",BS_AUTORADIOBUTTON | WS_GROUP,170,184,95,10 CONTROL "X,Y coordinates",IDC_COORDINATES,"Button",BS_AUTORADIOBUTTON | WS_GROUP,170,184,95,10
CONTROL "Desktop center",IDC_DESKTOPCENTER,"Button",BS_AUTORADIOBUTTON,170,194,95,10 CONTROL "Desktop center",IDC_DESKTOPCENTER,"Button",BS_AUTORADIOBUTTON,170,194,95,10
CONTROL "Desktop work area",IDC_DESKTOPWORKAREA,"Button",BS_AUTORADIOBUTTON,170,204,95,10 CONTROL "Desktop work area",IDC_DESKTOPWORKAREA,"Button",BS_AUTORADIOBUTTON,170,204,95,10
CONTROL "Desktop",IDC_DESKTOPFULL,"Button",BS_AUTORADIOBUTTON,170,214,95,10 CONTROL "Desktop",IDC_DESKTOPFULL,"Button",BS_AUTORADIOBUTTON,170,214,95,10
CONTROL "Hook child WindowProc",IDC_HOOKCHILDWIN,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,170,117,104,10 CONTROL "Hook child WindowProc",IDC_HOOKCHILDWIN,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,170,129,104,10
CONTROL "Fullscreen only",IDC_FULLSCREENONLY,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,170,141,114,10 CONTROL "Fullscreen only",IDC_FULLSCREENONLY,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,170,153,114,10
CONTROL "Filter offending messages",IDC_FILTERMESSAGES,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,16,153,114,10
CONTROL "Peek all messages in queue",IDC_PEEKALLMESSAGES,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,170,153,114,10
GROUPBOX "Position",IDC_STATIC,7,172,286,56 GROUPBOX "Position",IDC_STATIC,7,172,286,56
CONTROL "Keep aspect ratio",IDC_KEEPASPECTRATIO,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,16,185,115,10 CONTROL "Keep aspect ratio",IDC_KEEPASPECTRATIO,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,16,185,115,10
CONTROL "Hook OpenGL",IDC_HOOKOPENGL,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,16,141,115,10 CONTROL "Hook OpenGL",IDC_HOOKOPENGL,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,16,153,115,10
EDITTEXT IDC_LAUNCH,39,48,162,14,ES_AUTOHSCROLL
LTEXT "Launch:",IDC_STATIC,11,51,28,9
PUSHBUTTON "...",IDC_OPENLAUNCH,207,48,12,14
END END
IDD_TAB_LOG DIALOGEX 0, 0, 300, 240 IDD_TAB_LOG DIALOGEX 0, 0, 300, 240
@ -360,7 +360,7 @@ BEGIN
CONTROL "Hide Cursor",IDC_HIDEHWCURSOR,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,16,15,100,10 CONTROL "Hide Cursor",IDC_HIDEHWCURSOR,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,16,15,100,10
CONTROL "Intercept GDI Cursor Clipping",IDC_ENABLECLIPPING, CONTROL "Intercept GDI Cursor Clipping",IDC_ENABLECLIPPING,
"Button",BS_AUTOCHECKBOX | WS_TABSTOP,16,85,109,10 "Button",BS_AUTOCHECKBOX | WS_TABSTOP,16,85,109,10
GROUPBOX "Cursor handling",IDC_STATIC,7,3,129,134 GROUPBOX "Cursor handling",IDC_STATIC,7,3,129,148
CONTROL "Keep cursor within window",IDC_KEEPCURSORWITHIN,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,16,61,108,10 CONTROL "Keep cursor within window",IDC_KEEPCURSORWITHIN,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,16,61,108,10
CONTROL "Force cursor clipping",IDC_CLIPCURSOR,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,16,50,108,10 CONTROL "Force cursor clipping",IDC_CLIPCURSOR,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,16,50,108,10
CONTROL "Message processing",IDC_MESSAGEPROC,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,16,96,103,10 CONTROL "Message processing",IDC_MESSAGEPROC,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,16,96,103,10
@ -385,6 +385,10 @@ BEGIN
CONTROL "DirectInput Hooking",IDC_HOOKDI,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,150,15,97,12 CONTROL "DirectInput Hooking",IDC_HOOKDI,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,150,15,97,12
GROUPBOX "DirectInput",IDC_STATIC,141,3,152,71 GROUPBOX "DirectInput",IDC_STATIC,141,3,152,71
LTEXT " X,Y range",IDC_STATIC,147,54,42,9 LTEXT " X,Y range",IDC_STATIC,147,54,42,9
CONTROL "Filter offending messages",IDC_FILTERMESSAGES,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,150,96,114,10
CONTROL "Peek all messages in queue",IDC_PEEKALLMESSAGES,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,150,108,114,10
GROUPBOX "Message handling",IDC_STATIC,142,79,151,72
CONTROL "Release mouse outside window",IDC_RELEASEMOUSE,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,16,130,114,12
END END
IDD_TAB_TIMING DIALOGEX 0, 0, 300, 240 IDD_TAB_TIMING DIALOGEX 0, 0, 300, 240
@ -443,6 +447,7 @@ BEGIN
CONTROL "SVGA modes",IDC_SUPPORTSVGA,"Button",BS_AUTORADIOBUTTON | WS_GROUP,160,136,124,10 CONTROL "SVGA modes",IDC_SUPPORTSVGA,"Button",BS_AUTORADIOBUTTON | WS_GROUP,160,136,124,10
CONTROL "HDMI modes",IDC_SUPPORTHDMI,"Button",BS_AUTORADIOBUTTON,160,148,124,10 CONTROL "HDMI modes",IDC_SUPPORTHDMI,"Button",BS_AUTORADIOBUTTON,160,148,124,10
CONTROL "Monitor native modes",IDC_NATIVERES,"Button",BS_AUTORADIOBUTTON,160,160,124,10 CONTROL "Monitor native modes",IDC_NATIVERES,"Button",BS_AUTORADIOBUTTON,160,160,124,10
CONTROL "No banner",IDC_NOBANNER,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,17,196,108,10
END END
IDD_TAB_EMPTY DIALOGEX 0, 0, 300, 240 IDD_TAB_EMPTY DIALOGEX 0, 0, 300, 240

Binary file not shown.

View File

@ -394,11 +394,11 @@
> >
</File> </File>
<File <File
RelativePath=".\TabLogs.cpp" RelativePath=".\TabInput.cpp"
> >
</File> </File>
<File <File
RelativePath=".\TabMouse.cpp" RelativePath=".\TabLogs.cpp"
> >
</File> </File>
<File <File
@ -503,11 +503,11 @@
> >
</File> </File>
<File <File
RelativePath=".\TabLogs.h" RelativePath=".\TabInput.h"
> >
</File> </File>
<File <File
RelativePath=".\TabMouse.h" RelativePath=".\TabLogs.h"
> >
</File> </File>
<File <File

View File

@ -240,6 +240,7 @@ static void SetTargetFromDlg(TARGETMAP *t, CTargetDlg *dlg)
if(dlg->m_TimeStretch) t->flags2 |= TIMESTRETCH; if(dlg->m_TimeStretch) t->flags2 |= TIMESTRETCH;
if(dlg->m_StretchTimers) t->flags4 |= STRETCHTIMERS; if(dlg->m_StretchTimers) t->flags4 |= STRETCHTIMERS;
if(dlg->m_FineTiming) t->flags4 |= FINETIMING; if(dlg->m_FineTiming) t->flags4 |= FINETIMING;
if(dlg->m_ReleaseMouse) t->flags4 |= RELEASEMOUSE;
if(dlg->m_InterceptRDTSC) t->flags4 |= INTERCEPTRDTSC; if(dlg->m_InterceptRDTSC) t->flags4 |= INTERCEPTRDTSC;
if(dlg->m_HookOpenGL) t->flags2 |= HOOKOPENGL; if(dlg->m_HookOpenGL) t->flags2 |= HOOKOPENGL;
if(dlg->m_ForceHookOpenGL) t->flags3 |= FORCEHOOKOPENGL; if(dlg->m_ForceHookOpenGL) t->flags3 |= FORCEHOOKOPENGL;
@ -404,6 +405,7 @@ static void SetDlgFromTarget(TARGETMAP *t, CTargetDlg *dlg)
dlg->m_TimeStretch = t->flags2 & TIMESTRETCH ? 1 : 0; dlg->m_TimeStretch = t->flags2 & TIMESTRETCH ? 1 : 0;
dlg->m_StretchTimers = t->flags4 & STRETCHTIMERS ? 1 : 0; dlg->m_StretchTimers = t->flags4 & STRETCHTIMERS ? 1 : 0;
dlg->m_FineTiming = t->flags4 & FINETIMING ? 1 : 0; dlg->m_FineTiming = t->flags4 & FINETIMING ? 1 : 0;
dlg->m_ReleaseMouse = t->flags4 & RELEASEMOUSE ? 1 : 0;
dlg->m_InterceptRDTSC = t->flags4 & INTERCEPTRDTSC ? 1 : 0; dlg->m_InterceptRDTSC = t->flags4 & INTERCEPTRDTSC ? 1 : 0;
dlg->m_HookOpenGL = t->flags2 & HOOKOPENGL ? 1 : 0; dlg->m_HookOpenGL = t->flags2 & HOOKOPENGL ? 1 : 0;
dlg->m_ForceHookOpenGL = t->flags3 & FORCEHOOKOPENGL ? 1 : 0; dlg->m_ForceHookOpenGL = t->flags3 & FORCEHOOKOPENGL ? 1 : 0;
@ -436,13 +438,15 @@ static void SetDlgFromTarget(TARGETMAP *t, CTargetDlg *dlg)
dlg->m_MaxScreenRes = t->MaxScreenRes; dlg->m_MaxScreenRes = t->MaxScreenRes;
} }
static void SaveConfigItem(TARGETMAP *TargetMap, char *Title, int i, char *InitPath) static void SaveConfigItem(TARGETMAP *TargetMap, PRIVATEMAP *PrivateMap, int i, char *InitPath)
{ {
char key[32], val[32]; char key[32], val[32];
sprintf_s(key, sizeof(key), "title%i", i); sprintf_s(key, sizeof(key), "title%i", i);
WritePrivateProfileString("target", key, Title, InitPath); WritePrivateProfileString("target", key, PrivateMap->title, InitPath);
sprintf_s(key, sizeof(key), "path%i", i); sprintf_s(key, sizeof(key), "path%i", i);
WritePrivateProfileString("target", key, TargetMap->path, InitPath); WritePrivateProfileString("target", key, TargetMap->path, InitPath);
sprintf_s(key, sizeof(key), "launchpath%i", i);
WritePrivateProfileString("target", key, PrivateMap->launchpath, InitPath);
sprintf_s(key, sizeof(key), "module%i", i); sprintf_s(key, sizeof(key), "module%i", i);
WritePrivateProfileString("target", key, TargetMap->module, InitPath); WritePrivateProfileString("target", key, TargetMap->module, InitPath);
sprintf_s(key, sizeof(key), "opengllib%i", i); sprintf_s(key, sizeof(key), "opengllib%i", i);
@ -518,6 +522,8 @@ static void ClearTarget(int i, char *InitPath)
char key[32]; char key[32];
sprintf_s(key, sizeof(key), "path%i", i); sprintf_s(key, sizeof(key), "path%i", i);
WritePrivateProfileString("target", key, 0, InitPath); WritePrivateProfileString("target", key, 0, InitPath);
sprintf_s(key, sizeof(key), "launchpath%i", i);
WritePrivateProfileString("target", key, 0, InitPath);
sprintf_s(key, sizeof(key), "ver%i", i); sprintf_s(key, sizeof(key), "ver%i", i);
WritePrivateProfileString("target", key, 0, InitPath); WritePrivateProfileString("target", key, 0, InitPath);
sprintf_s(key, sizeof(key), "coord%i", i); sprintf_s(key, sizeof(key), "coord%i", i);
@ -563,7 +569,7 @@ static void ClearTarget(int i, char *InitPath)
WritePrivateProfileString("target", key, 0, InitPath); WritePrivateProfileString("target", key, 0, InitPath);
} }
static int LoadConfigItem(TARGETMAP *TargetMap, char *Title, int i, char *InitPath) static int LoadConfigItem(TARGETMAP *TargetMap, PRIVATEMAP *PrivateMap, int i, char *InitPath)
{ {
char key[32]; char key[32];
DWORD flags; DWORD flags;
@ -571,8 +577,10 @@ static int LoadConfigItem(TARGETMAP *TargetMap, char *Title, int i, char *InitPa
sprintf_s(key, sizeof(key), "path%i", i); sprintf_s(key, sizeof(key), "path%i", i);
GetPrivateProfileString("target", key, "", TargetMap->path, MAX_PATH, InitPath); GetPrivateProfileString("target", key, "", TargetMap->path, MAX_PATH, InitPath);
if(!TargetMap->path[0]) return FALSE; if(!TargetMap->path[0]) return FALSE;
sprintf_s(key, sizeof(key), "launchpath%i", i);
GetPrivateProfileString("target", key, "", PrivateMap->launchpath, MAX_PATH, InitPath);
sprintf_s(key, sizeof(key), "title%i", i); sprintf_s(key, sizeof(key), "title%i", i);
GetPrivateProfileString("target", key, "", Title, sizeof(PRIVATEMAP)-1, InitPath); GetPrivateProfileString("target", key, "", PrivateMap->title, sizeof(PRIVATEMAP)-1, InitPath);
sprintf_s(key, sizeof(key), "module%i", i); sprintf_s(key, sizeof(key), "module%i", i);
GetPrivateProfileString("target", key, "", TargetMap->module, sizeof(TargetMap->module)-1, InitPath); GetPrivateProfileString("target", key, "", TargetMap->module, sizeof(TargetMap->module)-1, InitPath);
sprintf_s(key, sizeof(key), "opengllib%i", i); sprintf_s(key, sizeof(key), "opengllib%i", i);
@ -665,7 +673,7 @@ void CDxwndhostView::SaveConfigFile()
for(i = 0; i < MAXTARGETS; i ++){ for(i = 0; i < MAXTARGETS; i ++){
if(!TargetMaps[i].path[0]) break; if(!TargetMaps[i].path[0]) break;
SaveConfigItem(&TargetMaps[i], TitleMaps[i].title, i, InitPath); SaveConfigItem(&TargetMaps[i], &TitleMaps[i], i, InitPath);
} }
for(; i < MAXTARGETS; i ++) ClearTarget(i, InitPath); for(; i < MAXTARGETS; i ++) ClearTarget(i, InitPath);
this->isUpdated=FALSE; this->isUpdated=FALSE;
@ -757,7 +765,7 @@ void CDxwndhostView::OnInitialUpdate()
listctrl.InsertColumn(0, &listcol); listctrl.InsertColumn(0, &listcol);
for(i = 0; i < MAXTARGETS; i ++){ for(i = 0; i < MAXTARGETS; i ++){
if (!LoadConfigItem(&TargetMaps[i], TitleMaps[i].title, i, InitPath)) break; if (!LoadConfigItem(&TargetMaps[i], &TitleMaps[i], i, InitPath)) break;
listitem.mask = LVIF_TEXT | LVIF_IMAGE; listitem.mask = LVIF_TEXT | LVIF_IMAGE;
listitem.iItem = i; listitem.iItem = i;
listitem.iSubItem = 0; listitem.iSubItem = 0;
@ -821,7 +829,7 @@ void CDxwndhostView::OnExport()
CFileDialog dlg( FALSE, "*.dxw", path, OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT, CFileDialog dlg( FALSE, "*.dxw", path, OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT,
"dxwnd task config (*.dxw)|*.dxw|All Files (*.*)|*.*||", this); "dxwnd task config (*.dxw)|*.dxw|All Files (*.*)|*.*||", this);
if( dlg.DoModal() == IDOK) if( dlg.DoModal() == IDOK)
SaveConfigItem(&TargetMaps[i], TitleMaps[i].title, 0, dlg.GetPathName().GetBuffer()); SaveConfigItem(&TargetMaps[i], &TitleMaps[i], 0, dlg.GetPathName().GetBuffer());
} }
void CDxwndhostView::OnImport() void CDxwndhostView::OnImport()
@ -849,7 +857,7 @@ void CDxwndhostView::OnImport()
if(buffer[ofn.nFileOffset - 1] != '\0'){ if(buffer[ofn.nFileOffset - 1] != '\0'){
// Single-Select // Single-Select
// "buffer" - name of file // "buffer" - name of file
LoadConfigItem(&TargetMaps[i], TitleMaps[i].title, 0, buffer); LoadConfigItem(&TargetMaps[i], &TitleMaps[i], 0, buffer);
listitem.mask = LVIF_TEXT | LVIF_IMAGE; listitem.mask = LVIF_TEXT | LVIF_IMAGE;
listitem.iItem = i; listitem.iItem = i;
listitem.iSubItem = 0; listitem.iSubItem = 0;
@ -868,7 +876,7 @@ void CDxwndhostView::OnImport()
if(!*p)break; if(!*p)break;
strcpy(pathname, folder); strcpy(pathname, folder);
strcat(pathname, p); strcat(pathname, p);
LoadConfigItem(&TargetMaps[i], TitleMaps[i].title, 0, pathname); LoadConfigItem(&TargetMaps[i], &TitleMaps[i], 0, pathname);
listitem.mask = LVIF_TEXT | LVIF_IMAGE; listitem.mask = LVIF_TEXT | LVIF_IMAGE;
listitem.iItem = i; listitem.iItem = i;
listitem.iSubItem = 0; listitem.iSubItem = 0;
@ -897,9 +905,11 @@ void CDxwndhostView::OnModify()
pos = listctrl.GetFirstSelectedItemPosition(); pos = listctrl.GetFirstSelectedItemPosition();
i = listctrl.GetNextSelectedItem(pos); i = listctrl.GetNextSelectedItem(pos);
dlg.m_Title = TitleMaps[i].title; dlg.m_Title = TitleMaps[i].title;
dlg.m_LaunchPath = TitleMaps[i].launchpath;
SetDlgFromTarget(&TargetMaps[i], &dlg); SetDlgFromTarget(&TargetMaps[i], &dlg);
if(dlg.DoModal() == IDOK && dlg.m_FilePath.GetLength()){ if(dlg.DoModal() == IDOK && dlg.m_FilePath.GetLength()){
strncpy(TitleMaps[i].title, dlg.m_Title, 40); strncpy(TitleMaps[i].title, dlg.m_Title, 40);
strncpy(TitleMaps[i].launchpath, dlg.m_LaunchPath, MAX_PATH);
SetTargetFromDlg(&TargetMaps[i], &dlg); SetTargetFromDlg(&TargetMaps[i], &dlg);
CListCtrl& listctrl = GetListCtrl(); CListCtrl& listctrl = GetListCtrl();
listitem.mask = LVIF_TEXT | LVIF_IMAGE; listitem.mask = LVIF_TEXT | LVIF_IMAGE;
@ -1203,6 +1213,7 @@ void CDxwndhostView::OnAdd()
memset(&TargetMaps[i],0,sizeof(TARGETMAP)); // clean up, just in case.... memset(&TargetMaps[i],0,sizeof(TARGETMAP)); // clean up, just in case....
if(dlg.DoModal() == IDOK && dlg.m_FilePath.GetLength()){ if(dlg.DoModal() == IDOK && dlg.m_FilePath.GetLength()){
strncpy(TitleMaps[i].title, dlg.m_Title, 40); strncpy(TitleMaps[i].title, dlg.m_Title, 40);
strncpy(TitleMaps[i].launchpath, dlg.m_LaunchPath, MAX_PATH);
SetTargetFromDlg(&TargetMaps[i], &dlg); SetTargetFromDlg(&TargetMaps[i], &dlg);
CListCtrl& listctrl = GetListCtrl(); CListCtrl& listctrl = GetListCtrl();
listitem.mask = LVIF_TEXT | LVIF_IMAGE; listitem.mask = LVIF_TEXT | LVIF_IMAGE;
@ -1641,6 +1652,12 @@ void CDxwndhostView::OnRun()
if(!listctrl.GetSelectedCount()) return; if(!listctrl.GetSelectedCount()) return;
pos = listctrl.GetFirstSelectedItemPosition(); pos = listctrl.GetFirstSelectedItemPosition();
i = listctrl.GetNextSelectedItem(pos); i = listctrl.GetNextSelectedItem(pos);
//if(strlen(TitleMaps[i].launchpath)>0){
// system(TitleMaps[i].launchpath);
// return;
//}
ZeroMemory(&sinfo, sizeof(sinfo)); ZeroMemory(&sinfo, sizeof(sinfo));
sinfo.cb = sizeof(sinfo); sinfo.cb = sizeof(sinfo);
strcpy_s(path, sizeof(path), TargetMaps[i].path); strcpy_s(path, sizeof(path), TargetMaps[i].path);
@ -1650,7 +1667,9 @@ void CDxwndhostView::OnRun()
CreateThread( NULL, 0, StartDebug, &TargetMaps[i], 0, NULL); CreateThread( NULL, 0, StartDebug, &TargetMaps[i], 0, NULL);
} }
else{ else{
CreateProcess(NULL, TargetMaps[i].path, 0, 0, false, CREATE_DEFAULT_ERROR_MODE, NULL, path, &sinfo, &pinfo); CreateProcess(NULL,
(strlen(TitleMaps[i].launchpath)>0) ? TitleMaps[i].launchpath: TargetMaps[i].path,
0, 0, false, CREATE_DEFAULT_ERROR_MODE, NULL, path, &sinfo, &pinfo);
} }
} }