source: trunk/src/user32/wndsubproc.cpp@ 46

Last change on this file since 46 was 46, checked in by sandervl, 26 years ago

* empty log message *

File size: 3.5 KB
Line 
1/*
2 * Win32 window subproc class for OS/2
3 *
4 * Copyright 1998 Sander van Leeuwen
5 *
6 *
7 * Project Odin Software License can be found in LICENSE.TXT
8 *
9 */
10#include <os2win.h>
11#include <stdarg.h>
12#include <assert.h>
13#include "misc.h"
14#include "user32.h"
15#include "wndsubproc.h"
16
17static LRESULT WIN32API SubWndCallback(HWND, UINT, WPARAM, LPARAM);
18
19//******************************************************************************
20//******************************************************************************
21Win32WindowSubProc::Win32WindowSubProc(HWND hwnd, WNDPROC_O32 pOpen32Callback)
22{
23#ifdef DEBUG
24 WriteLog("ctr Win32WindowSubProc, %X %X\n", hwnd, pOpen32Callback);
25#endif
26 //Insert it in front of the rest
27 next = windows;
28 windows = this;
29
30 pCallback = pOpen32Callback;
31 this->hwnd = hwnd;
32}
33//******************************************************************************
34//******************************************************************************
35Win32WindowSubProc::~Win32WindowSubProc()
36{
37 Win32WindowSubProc *window = Win32WindowSubProc::windows;
38
39 if(window == this) {
40 windows = next;
41 }
42 else {
43 while(window->next != NULL) {
44 if(window->next == this) {
45 window->next = next;
46 break;
47 }
48 window = window->next;
49 }
50 }
51}
52//******************************************************************************
53//******************************************************************************
54WNDPROC Win32WindowSubProc::GetWin32Callback()
55{
56 return(SubWndCallback);
57}
58//******************************************************************************
59//******************************************************************************
60Win32WindowSubProc *Win32WindowSubProc::FindSubProc(WNDPROC_O32 pOrgCallback)
61{
62 Win32WindowSubProc *window = Win32WindowSubProc::windows;
63
64 while(window != NULL) {
65 if(window->pCallback == pOrgCallback) {
66 return(window);
67 }
68 window = window->next;
69 }
70#ifdef DEBUG
71//// WriteLog("Win32WindowSubProc::FindSubProc, can't find callback %X!\n", pOrgCallback);
72#endif
73 return(NULL);
74}
75//******************************************************************************
76//******************************************************************************
77void Win32WindowSubProc::DeleteSubWindow(HWND hwnd)
78{
79 Win32WindowSubProc *window = windows;
80
81#ifdef DEBUG
82 WriteLog("::DeleteSubWindow, destroy window/dialog %X!!\n", hwnd);
83#endif
84 while(window != NULL) {
85 if(window->hwnd == hwnd) {
86 delete(window);
87 return;
88 }
89 window = window->next;
90 }
91#ifdef DEBUG
92 WriteLog("::DeleteSubWindow, can't find window %X!!\n", hwnd);
93#endif
94}
95//******************************************************************************
96//******************************************************************************
97static LRESULT WIN32API SubWndCallback(HWND hwnd, UINT Msg, WPARAM wParam, LPARAM lParam)
98{
99 Win32WindowSubProc *curwnd = Win32WindowSubProc::windows;
100 LRESULT rc;
101
102 while(curwnd != NULL) {
103 if(curwnd->hwnd == hwnd) {
104 rc = curwnd->pCallback(hwnd, Msg, wParam, lParam);
105 if(Msg == WM_NCDESTROY) {
106#ifdef DEBUG
107 WriteLog("WM_NCDESTROY received for subwindow %X\n", curwnd->hwnd);
108#endif
109 delete curwnd;
110 }
111 return rc;
112 }
113 curwnd = curwnd->next;
114 }
115#ifdef DEBUG
116 WriteLog("SubWndCallback, can't find window %X %d!!!!\n", hwnd, Msg);
117#endif
118 return 0;
119}
120//******************************************************************************
121//******************************************************************************
122Win32WindowSubProc *Win32WindowSubProc::windows = NULL;
Note: See TracBrowser for help on using the repository browser.