#include DWindow::DWindow() : mhWnd(0) { } DWindow::~DWindow() { if(GetHandle())::DestroyWindow(GetHandle()); } LONG FAR PASCAL DWindow::DialogProcedure(HWND hWnd,UINT message,WPARAM wParam,LPARAM lParam) { int returnCode; DWindow *pDWindow=DWindow::GetPointer(hWnd); if(0==pDWindow) { if(WM_INITDIALOG==message) { pDWindow=(DWindow*)lParam; DWindow::SetPointer(hWnd,pDWindow); pDWindow->SetHandle(hWnd); return pDWindow->DlgProc(message,wParam,lParam); } return FALSE; } returnCode=pDWindow->DlgProc(message,wParam,lParam); if(WM_NCDESTROY==message) { #if defined (__LARGE__) || defined (__COMPACT__) ::RemoveProp(hWnd,"HIWORD"); #endif ::RemoveProp(hWnd,(LPSTR)"LOWORD"); pDWindow->SetHandle(0); } return returnCode; } #if defined (__LARGE__) || defined (__COMPACT__) DWindow *DWindow::GetPointer(HWND hWnd) { HANDLE handleSegment; HANDLE handleOffset; handleSegment=::GetProp(hWnd,(LPSTR)"HIWORD"); handleOffset=::GetProp(hWnd,(LPSTR)"LOWORD"); return (DWindow*)(MK_FP(handleSegment,handleOffset)); } void DWindow::SetPointer(HWND hWnd,DWindow *pDWindow) { ::SetProp(hWnd,"HIWORD",(HANDLE)FP_SEG(pDWindow)); ::SetProp(hWnd,"LOWORD",(HANDLE)FP_OFF(pDWindow)); } #endif