/* ------------------------------------------------------------------ */ // DirectDraw Surface Stack implementation /* ------------------------------------------------------------------ */ #define _CRT_SECURE_NO_WARNINGS #include #include "dxwnd.h" #include "dxwcore.hpp" //#define DXW_WINPROC_STACK_TRACING #define MAXWNDHSTACK 256 dxwWStack::dxwWStack() { WhndTOS = 0; WhndSize = MAXWNDHSTACK; WhndStack = (wndstack_entry *)malloc(WhndSize * sizeof(wndstack_entry)); } dxwWStack::~dxwWStack() { } void dxwWStack::Put(HWND hwnd, WNDPROC wndproc, int w, int h) { int StackIdx; // add extra space when necessary, in chunks of MAXWNDHSTACK entries if(WhndTOS == WhndSize){ WhndSize += MAXWNDHSTACK; WhndStack = (wndstack_entry *)realloc(WhndStack, WhndSize * sizeof(wndstack_entry)); } // wndproc values of 0xFFFFxxxx type seems to be error codes rather than valid callback addresses .... // v2.02.36 using CallWindowProc you can pass WinProc handles, so you don't need to eliminate them! //if (((DWORD)wndproc & 0xFFFF0000) == 0xFFFF0000) return; //OutTraceDW("DEBUG: WNDPROC STACK push hwnd=%x, wndproc=%x\n", hwnd, wndproc); // try update first... for(StackIdx=0; StackIdx