source: trunk/src/user32/wndproc.cpp@ 96

Last change on this file since 96 was 96, checked in by phaller, 26 years ago

Add: added cvs variable $Id$ to source files.

File size: 37.8 KB
Line 
1/* $Id: wndproc.cpp,v 1.4 1999-06-10 16:50:37 phaller Exp $ */
2
3/*
4 *
5 * Project Odin Software License can be found in LICENSE.TXT
6 *
7 */
8/*
9 * Win32 window procedure class for OS/2
10 *
11 * Copyright 1998 Sander van Leeuwen
12 *
13 */
14#include <os2win.h>
15#include <dde.h>
16#include <stdio.h>
17#include <string.h>
18#include <stdarg.h>
19#include <assert.h>
20#include "misc.h"
21#include "user32.h"
22#include "wndproc.h"
23#include "wndsubproc.h"
24#include "wndclass.h"
25#include "dlgconvert.h"
26#include "hooks.h"
27
28#ifdef DEBUG
29char *GetMsgText(int Msg);
30#endif
31
32//******************************************************************************
33//******************************************************************************
34Win32WindowProc *SYSTEM CreateWindowProc(WNDPROC pUserCallback)
35{
36 return new Win32WindowProc(pUserCallback);
37}
38//******************************************************************************
39//******************************************************************************
40Win32WindowProc::Win32WindowProc(WNDPROC pUserCallback)
41 : hwnd(0), next(NULL), os2dlg(NULL), win32class(0)
42{
43 //Insert it in front of the rest
44 next = windows;
45 windows = this;
46 threadid = (DWORD)GetCurrentThreadId();
47
48 pCallback = pUserCallback;
49 fIsWindow = TRUE;
50}
51//******************************************************************************
52//******************************************************************************
53Win32WindowProc::Win32WindowProc(WNDPROC pUserCallback, DLGTEMPLATE *os2dlg)
54 : hwnd(0), next(NULL), os2dlg(NULL), win32class(0)
55{
56 //Insert it in front of the rest
57 next = windows;
58 windows = this;
59 threadid = (DWORD)GetCurrentThreadId();
60 this->os2dlg = os2dlg; //delete on destruction
61
62 pCallback = pUserCallback;
63 fIsWindow = FALSE;
64}
65//******************************************************************************
66//******************************************************************************
67Win32WindowProc::Win32WindowProc(HINSTANCE hinst, LPCSTR lpszClassName)
68 : hwnd(0), next(NULL), os2dlg(NULL)
69{
70 WNDCLASSA wc;
71
72 assert(GetClassInfoA(hinst, lpszClassName, &wc) == TRUE);
73// pCallback = Win32WindowClass::GetClassCallback(hinst, (LPSTR)wc.lpszClassName);
74 pCallback = Win32WindowClass::GetClassCallback((LPSTR)wc.lpszClassName);
75//test (8nov)
76 if(pCallback == NULL) {//system class
77 pCallback = (WNDPROC)wc.lpfnWndProc;
78 }
79// assert(pCallback != NULL);
80
81 //Insert it in front of the rest
82 next = windows;
83 windows = this;
84 threadid = (DWORD)GetCurrentThreadId();
85
86 fIsWindow = TRUE;
87
88 win32class = Win32WindowClass::FindClass((LPSTR)lpszClassName);
89
90}
91//******************************************************************************
92//******************************************************************************
93Win32WindowProc::~Win32WindowProc()
94{
95 Win32WindowProc *window = Win32WindowProc::windows;
96
97 /* @@@PH 98/07/13 what's this whole code good for ? */
98 if(window == this)
99 {
100 windows = next;
101 }
102 else
103 {
104 /* @@@PH 98/07/13 window can be NULL */
105 if (window != NULL)
106 while(window->next != NULL)
107 {
108 if(window->next == this)
109 {
110 window->next = next;
111 break;
112 }
113 window = window->next;
114 }
115 }
116
117 if(os2dlg)
118 {
119 DeleteWin32DlgTemplate(os2dlg);
120 os2dlg = NULL;
121 }
122}
123//******************************************************************************
124//******************************************************************************
125BOOL Win32WindowProc::FindWindowProc(Win32WindowProc *wndproc)
126{
127 Win32WindowProc *window = Win32WindowProc::windows;
128
129 while(window != NULL) {
130 if(window == wndproc) {
131 return(TRUE);
132 }
133 window = window->next;
134 }
135 return(FALSE);
136}
137//******************************************************************************
138//******************************************************************************
139WNDPROC_O32 Win32WindowProc::GetOS2Callback()
140{
141 return(WndCallback);
142}
143//******************************************************************************
144//******************************************************************************
145Win32WindowProc *Win32WindowProc::FindProc(HWND hwnd)
146{
147 Win32WindowProc *window = Win32WindowProc::windows;
148
149 while(window != NULL) {
150 if(window->hwnd == hwnd) {
151 return(window);
152 }
153 window = window->next;
154 }
155 dprintf(("Win32WindowProc::FindProc, can't find window %X!\n", hwnd));
156 return(NULL);
157}
158//******************************************************************************
159//******************************************************************************
160void Win32WindowProc::DeleteWindow(HWND hwnd)
161{
162 Win32WindowProc *window = FindProc(hwnd);
163
164#ifdef DEBUG
165 WriteLog("::DeleteWindow, destroy window/dialog %X!!\n", hwnd);
166#endif
167 if(window) {
168 delete(window);
169 return;
170 }
171#ifdef DEBUG
172 WriteLog("::DeleteWindow, can't find window %X!!\n", hwnd);
173#endif
174}
175//******************************************************************************
176//******************************************************************************
177DWORD MapOEMToRealKey(DWORD wParam, DWORD lParam)
178{
179 switch(wParam) {
180 case VK_PRIOR: //page up
181 lParam &= 0xFF00FFFF;
182 lParam |= 0x00510000;
183 break;
184 case VK_NEXT: //page down
185 lParam &= 0xFF00FFFF;
186 lParam |= 0x00490000;
187 break;
188 case VK_END:
189 lParam &= 0xFF00FFFF;
190 lParam |= 0x004F0000;
191 break;
192 case VK_HOME:
193 lParam &= 0xFF00FFFF;
194 lParam |= 0x00470000;
195 break;
196 case VK_UP:
197 lParam &= 0xFF00FFFF;
198 lParam |= 0x00480000;
199 break;
200 case VK_LEFT:
201 lParam &= 0xFF00FFFF;
202 lParam |= 0x004B0000;
203 break;
204 case VK_DOWN:
205 lParam &= 0xFF00FFFF;
206 lParam |= 0x00500000;
207 break;
208 case VK_RIGHT:
209 lParam &= 0xFF00FFFF;
210 lParam |= 0x004D0000;
211 break;
212 case VK_DELETE:
213 lParam &= 0xFF00FFFF;
214 lParam |= 0x00530000;
215 break;
216 case VK_INSERT:
217 lParam &= 0xFF00FFFF;
218 lParam |= 0x00520000;
219 break;
220 }
221 return(lParam);
222}
223//******************************************************************************
224//#undef DEBUG
225//#define DEBUG1
226//******************************************************************************
227LRESULT EXPENTRY_O32 WndCallback(HWND hwnd, UINT Msg, WPARAM wParam, LPARAM lParam)
228{
229 Win32WindowProc *curwnd = Win32WindowProc::windows;
230 LRESULT rc;
231
232 if(HkCBT::OS2HkCBTProc(hwnd, Msg, wParam, lParam) == TRUE) {//hook swallowed msg
233 return(0);
234 }
235 while(curwnd != NULL) {
236 if(curwnd->hwnd == hwnd) {
237 //SvL: Correct Open32 key mapping bug
238 if(Msg == WM_KEYDOWN || Msg == WM_KEYUP || Msg == WM_CHAR) {
239// dprintf(("WM_KEYDOWN %X %08X\n", wParam, lParam));
240 lParam = MapOEMToRealKey(wParam, lParam);
241 }
242#ifdef DEBUG
243 WriteLog("***************Message %s for window/dialog %X\n", GetMsgText(Msg), hwnd);
244#endif
245// if(Msg == WM_CREATE || Msg == WM_INITDIALOG) {//Open32 isn't sending WM_NCCREATE messages!!
246 if(Msg == WM_CREATE) {//Open32 isn't sending WM_NCCREATE messages!!
247#ifdef DEBUG1
248 WriteLog("WM_NCCREATE\n");
249#endif
250 if(curwnd->pCallback(hwnd, WM_NCCREATE, 0, lParam) == 0) {
251 dprintf(("WM_NCCREATE returned FALSE\n"));
252 return(-1); //don't create window
253 }
254//TODO
255#if 0
256 if(curwnd->pCallback(hwnd, WM_NCCALCSIZE, 0, lParam) == 0) {
257#ifdef DEBUG1
258 WriteLog("WM_NCCREATE returned FALSE\n");
259#endif
260 return(-1); //don't create window
261 }
262#endif
263#ifdef DEBUG1
264 WriteLog("WM_NCCREATE, continue window creation\n");
265#endif
266 }
267#if 1
268 if(Msg == WM_ACTIVATE && LOWORD(wParam) != WA_INACTIVE)
269 {//SvL: Bugfix, Open32 is NOT sending this to the window (messes up Solitaire)
270 HDC hdc = GetDC(hwnd);
271
272 curwnd->pCallback(hwnd, WM_ERASEBKGND, hdc, 0);
273 ReleaseDC(hwnd, hdc);
274 }
275#endif
276 rc = curwnd->pCallback(hwnd, Msg, wParam, lParam);
277#ifdef DEBUG1
278 WriteLog("***************Message processed rc = %d\n", rc);
279#endif
280 if(Msg == WM_NCDESTROY) {
281 dprintf(("WM_NCDESTROY received for window/dialog %X\n", curwnd->hwnd));
282 Win32WindowSubProc::DeleteSubWindow(hwnd); //if present
283 delete curwnd;
284 }
285 return rc;
286 }
287 curwnd = curwnd->next;
288 }
289 //Message for window/dialog that's just been created
290 //TODO: This should be thread safe, right?
291 DWORD threadid = (DWORD)GetCurrentThreadId();
292 curwnd = (Win32WindowProc *)Win32WindowProc::windows;
293 while(curwnd != NULL) {
294 if(curwnd->hwnd == 0 && curwnd->threadid == threadid) {
295#ifdef DEBUG1
296 WriteLog("***************First message %s for window/dialog %X\n", GetMsgText(Msg), hwnd);
297#endif
298 curwnd->SetWindowHandle(hwnd);
299// if(Msg == WM_CREATE || Msg == WM_INITDIALOG) {//Open32 isn't sending WM_NCCREATE messages!!
300 if(Msg == WM_CREATE) {//Open32 isn't sending WM_NCCREATE messages!!
301#ifdef DEBUG1
302 WriteLog("WM_NCCREATE\n");
303#endif
304 if(curwnd->pCallback(hwnd, WM_NCCREATE, 0, lParam) == 0) {
305 dprintf(("WM_NCCREATE returned FALSE\n"));
306 return(-1); //don't create window
307 }
308#ifdef DEBUG1
309 WriteLog("WM_NCCREATE, continue window creation\n");
310#endif
311 }
312 rc = curwnd->pCallback(hwnd, Msg, wParam, lParam);
313 if(Msg == WM_NCDESTROY) {
314 dprintf(("WM_NCDESTROY received for window/dialog %X\n", curwnd->hwnd));
315 Win32WindowSubProc::DeleteSubWindow(hwnd); //if present
316 delete curwnd;
317 }
318 return rc;
319 }
320 curwnd = curwnd->next;
321 }
322#ifdef DEBUG1
323 WriteLog("Dialog control??\n");
324#endif
325 //Could be a dialog control using a registered class, so check this:
326 char szClass[128];
327 Win32WindowClass *wclass;
328 Win32WindowProc *wnd;
329
330 if(GetClassNameA(hwnd, szClass, sizeof(szClass))) {
331 wclass = Win32WindowClass::FindClass(szClass);
332 if(wclass) {
333 wnd = new Win32WindowProc(wclass->GetClassCallback(szClass));
334 wnd->SetWindowHandle(hwnd);
335 return(WndCallback(hwnd, Msg, wParam, lParam));
336 }
337 }
338 dprintf(("wnd Callback, can't find window %X %d!!!!\n", hwnd, Msg));
339 return 0;
340}
341//******************************************************************************
342//******************************************************************************
343#ifdef DEBUG
344typedef struct
345{
346 LPSTR pszMsg;
347 UINT msg;
348 UINT Flags;
349} MSGDESC, *PMSGDESC;
350
351//
352// Message Table Flags
353//
354#define MTF_SELECTED 0x00000001
355
356#define MTF_TYPE_MOUSE 0x00010000
357#define MTF_TYPE_DDE 0x00020000
358#define MTF_TYPE_CLIP 0x00040000
359#define MTF_TYPE_NC 0x00080000
360#define MTF_TYPE_KEYBD 0x00100000
361#define MTF_TYPE_LB 0x00200000
362#define MTF_TYPE_BM 0x00400000
363#define MTF_TYPE_STM 0x00800000
364#define MTF_TYPE_CB 0x01000000
365#define MTF_TYPE_EM 0x02000000
366#ifdef FE_IME
367#define MTF_TYPE_IME 0x04000000
368#endif
369
370//
371// Message description table. Describes each message that can be spied on.
372// This table must be kept in sorted order.
373//
374MSGDESC gaMsgs[] =
375{
376 { "WM_NULL", WM_NULL, // 0x0000
377 0},
378 { "WM_CREATE", WM_CREATE, // 0x0001
379 0},
380 { "WM_DESTROY", WM_DESTROY, // 0x0002
381 0},
382 { "WM_MOVE", WM_MOVE, // 0x0003
383 0},
384 { "WM_SIZE", WM_SIZE, // 0x0005
385 0},
386 { "WM_ACTIVATE", WM_ACTIVATE, // 0x0006
387 0},
388 { "WM_SETFOCUS", WM_SETFOCUS, // 0x0007
389 0},
390 { "WM_KILLFOCUS", WM_KILLFOCUS, // 0x0008
391 0},
392 { "WM_ENABLE", WM_ENABLE, // 0x000A
393 0},
394 { "WM_SETREDRAW", WM_SETREDRAW, // 0x000B
395 0},
396 { "WM_SETTEXT", WM_SETTEXT, // 0x000C
397 0},
398 { "WM_GETTEXT", WM_GETTEXT, // 0x000D
399 0},
400 { "WM_GETTEXTLENGTH", WM_GETTEXTLENGTH, // 0x000E
401 0},
402 { "WM_PAINT", WM_PAINT, // 0x000F
403 0},
404 { "WM_CLOSE", WM_CLOSE, // 0x0010
405 0},
406 { "WM_QUERYENDSESSION", WM_QUERYENDSESSION, // 0x0011
407 0},
408 { "WM_QUIT", WM_QUIT, // 0x0012
409 0},
410 { "WM_QUERYOPEN", WM_QUERYOPEN, // 0x0013
411 0},
412 { "WM_ERASEBKGND", WM_ERASEBKGND, // 0x0014
413 0},
414 { "WM_SYSCOLORCHANGE", WM_SYSCOLORCHANGE, // 0x0015
415 0},
416 { "WM_ENDSESSION", WM_ENDSESSION, // 0x0016
417 0},
418 { "WM_SHOWWINDOW", WM_SHOWWINDOW, // 0x0018
419 0},
420 { "WM_WININICHANGE", WM_WININICHANGE, // 0x001A
421 0},
422 { "WM_DEVMODECHANGE", WM_DEVMODECHANGE, // 0x001B
423 0},
424 { "WM_ACTIVATEAPP", WM_ACTIVATEAPP, // 0x001C
425 0},
426 { "WM_FONTCHANGE", WM_FONTCHANGE, // 0x001D
427 0},
428 { "WM_TIMECHANGE", WM_TIMECHANGE, // 0x001E
429 0},
430 { "WM_CANCELMODE", WM_CANCELMODE, // 0x001F
431 0},
432 { "WM_SETCURSOR", WM_SETCURSOR, // 0x0020
433 MTF_TYPE_MOUSE},
434 { "WM_MOUSEACTIVATE", WM_MOUSEACTIVATE, // 0x0021
435 MTF_TYPE_MOUSE},
436 { "WM_CHILDACTIVATE", WM_CHILDACTIVATE, // 0x0022
437 0},
438 { "WM_QUEUESYNC", WM_QUEUESYNC, // 0x0023
439 0},
440 { "WM_GETMINMAXINFO", WM_GETMINMAXINFO, // 0x0024
441 0},
442 { "WM_PAINTICON", WM_PAINTICON, // 0x0026
443 0},
444 { "WM_ICONERASEBKGND", WM_ICONERASEBKGND, // 0x0027
445 0},
446 { "WM_NEXTDLGCTL", WM_NEXTDLGCTL, // 0x0028
447 0},
448 { "WM_SPOOLERSTATUS", WM_SPOOLERSTATUS, // 0x002A
449 0},
450 { "WM_DRAWITEM", WM_DRAWITEM, // 0x002B
451 0},
452 { "WM_MEASUREITEM", WM_MEASUREITEM, // 0x002C
453 0},
454 { "WM_DELETEITEM", WM_DELETEITEM, // 0x002D
455 0},
456 { "WM_VKEYTOITEM", WM_VKEYTOITEM, // 0x002E
457 MTF_TYPE_KEYBD},
458 { "WM_CHARTOITEM", WM_CHARTOITEM, // 0x002F
459 MTF_TYPE_KEYBD},
460 { "WM_SETFONT", WM_SETFONT, // 0x0030
461 0},
462 { "WM_GETFONT", WM_GETFONT, // 0x0031
463 0},
464 { "WM_SETHOTKEY", WM_SETHOTKEY, // 0x0032
465 MTF_TYPE_KEYBD},
466 { "WM_GETHOTKEY", WM_GETHOTKEY, // 0x0033
467 MTF_TYPE_KEYBD},
468 { "WM_QUERYDRAGICON", WM_QUERYDRAGICON, // 0x0037
469 0},
470 { "WM_COMPAREITEM", WM_COMPAREITEM, // 0x0039
471 0},
472 { "WM_COMPACTING", WM_COMPACTING, // 0x0041
473 0},
474 { "WM_WINDOWPOSCHANGING", WM_WINDOWPOSCHANGING, // 0x0046
475 0},
476 { "WM_WINDOWPOSCHANGED", WM_WINDOWPOSCHANGED, // 0x0047
477 0},
478 { "WM_POWER", WM_POWER, // 0x0048
479 0},
480 { "WM_COPYDATA", WM_COPYDATA, // 0x004A
481 0},
482 { "WM_CANCELJOURNAL", WM_CANCELJOURNAL, // 0x004B
483 0},
484 { "WM_NOTIFY", WM_NOTIFY, 0}, // 0x4E
485 { "WM_INPUTLANGCHANGEREQUEST", WM_INPUTLANGCHANGEREQUEST, 0}, //0x50
486 { "WM_INPUTLANGCHANGE", WM_INPUTLANGCHANGE, 0}, // 0x51
487 { "WM_TCARD", WM_TCARD, 0}, // 0x52
488 { "WM_HELP", WM_HELP, 0}, // 0x53
489 { "WM_USERCHANGED", WM_USERCHANGED, 0}, // 0x54
490 { "WM_NOTIFYFORMAT", WM_NOTIFYFORMAT, 0}, // 0x55
491 { "WM_NCCREATE", WM_NCCREATE, // 0x0081
492 MTF_TYPE_NC},
493 { "WM_NCDESTROY", WM_NCDESTROY, // 0x0082
494 MTF_TYPE_NC},
495 { "WM_NCCALCSIZE", WM_NCCALCSIZE, // 0x0083
496 MTF_TYPE_NC},
497 { "WM_NCHITTEST", WM_NCHITTEST, // 0x0084
498 MTF_TYPE_NC | MTF_TYPE_MOUSE},
499 { "WM_NCPAINT", WM_NCPAINT, // 0x0085
500 MTF_TYPE_NC},
501 { "WM_NCACTIVATE", WM_NCACTIVATE, // 0x0086
502 MTF_TYPE_NC},
503 { "WM_GETDLGCODE", WM_GETDLGCODE, // 0x0087
504 0},
505 { "WM_NCMOUSEMOVE", WM_NCMOUSEMOVE, // 0x00A0
506 MTF_TYPE_NC | MTF_TYPE_MOUSE},
507 { "WM_NCLBUTTONDOWN", WM_NCLBUTTONDOWN, // 0x00A1
508 MTF_TYPE_NC | MTF_TYPE_MOUSE},
509 { "WM_NCLBUTTONUP", WM_NCLBUTTONUP, // 0x00A2
510 MTF_TYPE_NC | MTF_TYPE_MOUSE},
511 { "WM_NCLBUTTONDBLCLK", WM_NCLBUTTONDBLCLK, // 0x00A3
512 MTF_TYPE_NC | MTF_TYPE_MOUSE},
513 { "WM_NCRBUTTONDOWN", WM_NCRBUTTONDOWN, // 0x00A4
514 MTF_TYPE_NC | MTF_TYPE_MOUSE},
515 { "WM_NCRBUTTONUP", WM_NCRBUTTONUP, // 0x00A5
516 MTF_TYPE_NC | MTF_TYPE_MOUSE},
517 { "WM_NCRBUTTONDBLCLK", WM_NCRBUTTONDBLCLK, // 0x00A6
518 MTF_TYPE_NC | MTF_TYPE_MOUSE},
519 { "WM_NCMBUTTONDOWN", WM_NCMBUTTONDOWN, // 0x00A7
520 MTF_TYPE_NC | MTF_TYPE_MOUSE},
521 { "WM_NCMBUTTONUP", WM_NCMBUTTONUP, // 0x00A8
522 MTF_TYPE_NC | MTF_TYPE_MOUSE},
523 { "WM_NCMBUTTONDBLCLK", WM_NCMBUTTONDBLCLK, // 0x00A9
524 MTF_TYPE_NC | MTF_TYPE_MOUSE},
525 { "EM_GETSEL", EM_GETSEL, // 0x00B0
526 MTF_TYPE_EM},
527 { "EM_SETSEL", EM_SETSEL, // 0x00B1
528 MTF_TYPE_EM},
529 { "EM_GETRECT", EM_GETRECT, // 0x00B2
530 MTF_TYPE_EM},
531 { "EM_SETRECT", EM_SETRECT, // 0x00B3
532 MTF_TYPE_EM},
533 { "EM_SETRECTNP", EM_SETRECTNP, // 0x00B4
534 MTF_TYPE_EM},
535 { "EM_SCROLL", EM_SCROLL, // 0x00B5
536 MTF_TYPE_EM},
537 { "EM_LINESCROLL", EM_LINESCROLL, // 0x00B6
538 MTF_TYPE_EM},
539 { "EM_SCROLLCARET", EM_SCROLLCARET, // 0x00B7
540 MTF_TYPE_EM},
541 { "EM_GETMODIFY", EM_GETMODIFY, // 0x00B8
542 MTF_TYPE_EM},
543 { "EM_SETMODIFY", EM_SETMODIFY, // 0x00B9
544 MTF_TYPE_EM},
545 { "EM_GETLINECOUNT", EM_GETLINECOUNT, // 0x00BA
546 MTF_TYPE_EM},
547 { "EM_LINEINDEX", EM_LINEINDEX, // 0x00BB
548 MTF_TYPE_EM},
549 { "EM_SETHANDLE", EM_SETHANDLE, // 0x00BC
550 MTF_TYPE_EM},
551 { "EM_GETHANDLE", EM_GETHANDLE, // 0x00BD
552 MTF_TYPE_EM},
553 { "EM_GETTHUMB", EM_GETTHUMB, // 0x00BE
554 MTF_TYPE_EM},
555 { "EM_LINELENGTH", EM_LINELENGTH, // 0x00C1
556 MTF_TYPE_EM},
557 { "EM_REPLACESEL", EM_REPLACESEL, // 0x00C2
558 MTF_TYPE_EM},
559 { "EM_GETLINE", EM_GETLINE, // 0x00C4
560 MTF_TYPE_EM},
561 { "EM_LIMITTEXT", EM_LIMITTEXT, // 0x00C5
562 MTF_TYPE_EM},
563 { "EM_CANUNDO", EM_CANUNDO, // 0x00C6
564 MTF_TYPE_EM},
565 { "EM_UNDO", EM_UNDO, // 0x00C7
566 MTF_TYPE_EM},
567 { "EM_FMTLINES", EM_FMTLINES, // 0x00C8
568 MTF_TYPE_EM},
569 { "EM_LINEFROMCHAR", EM_LINEFROMCHAR, // 0x00C9
570 MTF_TYPE_EM},
571 { "EM_SETTABSTOPS", EM_SETTABSTOPS, // 0x00CB
572 MTF_TYPE_EM},
573 { "EM_SETPASSWORDCHAR", EM_SETPASSWORDCHAR, // 0x00CC
574 MTF_TYPE_EM},
575 { "EM_EMPTYUNDOBUFFER", EM_EMPTYUNDOBUFFER, // 0x00CD
576 MTF_TYPE_EM},
577 { "EM_GETFIRSTVISIBLELINE", EM_GETFIRSTVISIBLELINE, // 0x00CE
578 MTF_TYPE_EM},
579 { "EM_SETREADONLY", EM_SETREADONLY, // 0x00CF
580 MTF_TYPE_EM},
581 { "EM_SETWORDBREAKPROC", EM_SETWORDBREAKPROC, // 0x00D0
582 MTF_TYPE_EM},
583 { "EM_GETWORDBREAKPROC", EM_GETWORDBREAKPROC, // 0x00D1
584 MTF_TYPE_EM},
585 { "EM_GETPASSWORDCHAR", EM_GETPASSWORDCHAR, // 0x00D2
586 MTF_TYPE_EM},
587 { "SBM_SETPOS", SBM_SETPOS, // 0x00E0
588 0},
589 { "SBM_GETPOS", SBM_GETPOS, // 0x00E1
590 0},
591 { "SBM_SETRANGE", SBM_SETRANGE, // 0x00E2
592 0},
593 { "SBM_GETRANGE", SBM_GETRANGE, // 0x00E3
594 0},
595 { "SBM_ENABLE_ARROWS", SBM_ENABLE_ARROWS, // 0x00E4
596 0},
597 { "SBM_SETRANGEREDRAW", SBM_SETRANGEREDRAW, // 0x00E6
598 0},
599 { "BM_GETCHECK", BM_GETCHECK, // 0x00F0
600 MTF_TYPE_BM},
601 { "BM_SETCHECK", BM_SETCHECK, // 0x00F1
602 MTF_TYPE_BM},
603 { "BM_GETSTATE", BM_GETSTATE, // 0x00F2
604 MTF_TYPE_BM},
605 { "BM_SETSTATE", BM_SETSTATE, // 0x00F3
606 MTF_TYPE_BM},
607 { "BM_SETSTYLE", BM_SETSTYLE, // 0x00F4
608 MTF_TYPE_BM},
609 { "WM_KEYDOWN", WM_KEYDOWN, // 0x0100
610 MTF_TYPE_KEYBD},
611 { "WM_KEYUP", WM_KEYUP, // 0x0101
612 MTF_TYPE_KEYBD},
613 { "WM_CHAR", WM_CHAR, // 0x0102
614 MTF_TYPE_KEYBD},
615 { "WM_DEADCHAR", WM_DEADCHAR, // 0x0103
616 MTF_TYPE_KEYBD},
617 { "WM_SYSKEYDOWN", WM_SYSKEYDOWN, // 0x0104
618 MTF_TYPE_KEYBD},
619 { "WM_SYSKEYUP", WM_SYSKEYUP, // 0x0105
620 MTF_TYPE_KEYBD},
621 { "WM_SYSCHAR", WM_SYSCHAR, // 0x0106
622 MTF_TYPE_KEYBD},
623 { "WM_SYSDEADCHAR", WM_SYSDEADCHAR, // 0x0107
624 MTF_TYPE_KEYBD},
625#ifdef FE_IME
626 { "WM_WNT_CONVERTREQUESTEX", WM_WNT_CONVERTREQUESTEX, // 0x0109
627 MTF_TYPE_IME},
628 { "WM_CONVERTREQUEST", WM_CONVERTREQUEST, // 0x010A
629 MTF_TYPE_IME},
630 { "WM_CONVERTRESULT", WM_CONVERTRESULT, // 0x010B
631 MTF_TYPE_IME},
632 { "WM_INTERIM", WM_INTERIM, // 0x010C
633 MTF_TYPE_IME},
634# define TMP_MTF_TYPE_IME MTF_TYPE_IME
635#else // not FE_IME
636# define TMP_MTF_TYPE_IME 0
637#endif
638 { "WM_IME_STARTCOMPOSITION", WM_IME_STARTCOMPOSITION, // 0x010D
639 TMP_MTF_TYPE_IME},
640 { "WM_IME_ENDCOMPOSITION", WM_IME_ENDCOMPOSITION, // 0x010E
641 TMP_MTF_TYPE_IME},
642 { "WM_IME_COMPOSITION", WM_IME_COMPOSITION, // 0x010F
643 TMP_MTF_TYPE_IME},
644 { "WM_INITDIALOG", WM_INITDIALOG, // 0x0110
645 0},
646 { "WM_COMMAND", WM_COMMAND, // 0x0111
647 0},
648 { "WM_SYSCOMMAND", WM_SYSCOMMAND, // 0x0112
649 0},
650 { "WM_TIMER", WM_TIMER, // 0x0113
651 0},
652 { "WM_HSCROLL", WM_HSCROLL, // 0x0114
653 0},
654 { "WM_VSCROLL", WM_VSCROLL, // 0x0115
655 0},
656 { "WM_INITMENU", WM_INITMENU, // 0x0116
657 0},
658 { "WM_INITMENUPOPUP", WM_INITMENUPOPUP, // 0x0117
659 0},
660 { "WM_MENUSELECT", WM_MENUSELECT, // 0x011F
661 0},
662 { "WM_MENUCHAR", WM_MENUCHAR, // 0x0120
663 0},
664 { "WM_ENTERIDLE", WM_ENTERIDLE, // 0x0121
665 0},
666 { "WM_CTLCOLORMSGBOX", WM_CTLCOLORMSGBOX, // 0x0132
667 0},
668 { "WM_CTLCOLOREDIT", WM_CTLCOLOREDIT, // 0x0133
669 0},
670 { "WM_CTLCOLORLISTBOX", WM_CTLCOLORLISTBOX, // 0x0134
671 0},
672 { "WM_CTLCOLORBTN", WM_CTLCOLORBTN, // 0x0135
673 0},
674 { "WM_CTLCOLORDLG", WM_CTLCOLORDLG, // 0x0136
675 0},
676 { "WM_CTLCOLORSCROLLBAR", WM_CTLCOLORSCROLLBAR, // 0x0137
677 0},
678 { "WM_CTLCOLORSTATIC", WM_CTLCOLORSTATIC, // 0x0138
679 0},
680 { "CB_GETEDITSEL", CB_GETEDITSEL, // 0x0140
681 MTF_TYPE_CB},
682 { "CB_LIMITTEXT", CB_LIMITTEXT, // 0x0141
683 MTF_TYPE_CB},
684 { "CB_SETEDITSEL", CB_SETEDITSEL, // 0x0142
685 MTF_TYPE_CB},
686 { "CB_ADDSTRING", CB_ADDSTRING, // 0x0143
687 MTF_TYPE_CB},
688 { "CB_DELETESTRING", CB_DELETESTRING, // 0x0144
689 MTF_TYPE_CB},
690 { "CB_DIR", CB_DIR, // 0x0145
691 MTF_TYPE_CB},
692 { "CB_GETCOUNT", CB_GETCOUNT, // 0x0146
693 MTF_TYPE_CB},
694 { "CB_GETCURSEL", CB_GETCURSEL, // 0x0147
695 MTF_TYPE_CB},
696 { "CB_GETLBTEXT", CB_GETLBTEXT, // 0x0148
697 MTF_TYPE_CB},
698 { "CB_GETLBTEXTLEN", CB_GETLBTEXTLEN, // 0x0149
699 MTF_TYPE_CB},
700 { "CB_INSERTSTRING", CB_INSERTSTRING, // 0x014A
701 MTF_TYPE_CB},
702 { "CB_RESETCONTENT", CB_RESETCONTENT, // 0x014B
703 MTF_TYPE_CB},
704 { "CB_FINDSTRING", CB_FINDSTRING, // 0x014C
705 MTF_TYPE_CB},
706 { "CB_SELECTSTRING", CB_SELECTSTRING, // 0x014D
707 MTF_TYPE_CB},
708 { "CB_SETCURSEL", CB_SETCURSEL, // 0x014E
709 MTF_TYPE_CB},
710 { "CB_SHOWDROPDOWN", CB_SHOWDROPDOWN, // 0x014F
711 MTF_TYPE_CB},
712 { "CB_GETITEMDATA", CB_GETITEMDATA, // 0x0150
713 MTF_TYPE_CB},
714 { "CB_SETITEMDATA", CB_SETITEMDATA, // 0x0151
715 MTF_TYPE_CB},
716 { "CB_GETDROPPEDCONTROLRECT", CB_GETDROPPEDCONTROLRECT, // 0x0152
717 MTF_TYPE_CB},
718 { "CB_SETITEMHEIGHT", CB_SETITEMHEIGHT, // 0x0153
719 MTF_TYPE_CB},
720 { "CB_GETITEMHEIGHT", CB_GETITEMHEIGHT, // 0x0154
721 MTF_TYPE_CB},
722 { "CB_SETEXTENDEDUI", CB_SETEXTENDEDUI, // 0x0155
723 MTF_TYPE_CB},
724 { "CB_GETEXTENDEDUI", CB_GETEXTENDEDUI, // 0x0156
725 MTF_TYPE_CB},
726 { "CB_GETDROPPEDSTATE", CB_GETDROPPEDSTATE, // 0x0157
727 MTF_TYPE_CB},
728 { "CB_FINDSTRINGEXACT", CB_FINDSTRINGEXACT, // 0x0158
729 MTF_TYPE_CB},
730 { "CB_SETLOCALE", CB_SETLOCALE, // 0x0159
731 MTF_TYPE_CB},
732 { "CB_GETLOCALE", CB_GETLOCALE, // 0x015A
733 MTF_TYPE_CB},
734 { "STM_SETICON", STM_SETICON, // 0x0170
735 MTF_TYPE_STM},
736 { "STM_GETICON", STM_GETICON, // 0x0171
737 MTF_TYPE_STM},
738 { "LB_ADDSTRING", LB_ADDSTRING, // 0x0180
739 MTF_TYPE_LB},
740 { "LB_INSERTSTRING", LB_INSERTSTRING, // 0x0181
741 MTF_TYPE_LB},
742 { "LB_DELETESTRING", LB_DELETESTRING, // 0x0182
743 MTF_TYPE_LB},
744 { "LB_SELITEMRANGEEX", LB_SELITEMRANGEEX, // 0x0183
745 MTF_TYPE_LB},
746 { "LB_RESETCONTENT", LB_RESETCONTENT, // 0x0184
747 MTF_TYPE_LB},
748 { "LB_SETSEL", LB_SETSEL, // 0x0185
749 MTF_TYPE_LB},
750 { "LB_SETCURSEL", LB_SETCURSEL, // 0x0186
751 MTF_TYPE_LB},
752 { "LB_GETSEL", LB_GETSEL, // 0x0187
753 MTF_TYPE_LB},
754 { "LB_GETCURSEL", LB_GETCURSEL, // 0x0188
755 MTF_TYPE_LB},
756 { "LB_GETTEXT", LB_GETTEXT, // 0x0189
757 MTF_TYPE_LB},
758 { "LB_GETTEXTLEN", LB_GETTEXTLEN, // 0x018A
759 MTF_TYPE_LB},
760 { "LB_GETCOUNT", LB_GETCOUNT, // 0x018B
761 MTF_TYPE_LB},
762 { "LB_SELECTSTRING", LB_SELECTSTRING, // 0x018C
763 MTF_TYPE_LB},
764 { "LB_DIR", LB_DIR, // 0x018D
765 MTF_TYPE_LB},
766 { "LB_GETTOPINDEX", LB_GETTOPINDEX, // 0x018E
767 MTF_TYPE_LB},
768 { "LB_FINDSTRING", LB_FINDSTRING, // 0x018F
769 MTF_TYPE_LB},
770 { "LB_GETSELCOUNT", LB_GETSELCOUNT, // 0x0190
771 MTF_TYPE_LB},
772 { "LB_GETSELITEMS", LB_GETSELITEMS, // 0x0191
773 MTF_TYPE_LB},
774 { "LB_SETTABSTOPS", LB_SETTABSTOPS, // 0x0192
775 MTF_TYPE_LB},
776 { "LB_GETHORIZONTALEXTENT", LB_GETHORIZONTALEXTENT, // 0x0193
777 MTF_TYPE_LB},
778 { "LB_SETHORIZONTALEXTENT", LB_SETHORIZONTALEXTENT, // 0x0194
779 MTF_TYPE_LB},
780 { "LB_SETCOLUMNWIDTH", LB_SETCOLUMNWIDTH, // 0x0195
781 MTF_TYPE_LB},
782 { "LB_ADDFILE", LB_ADDFILE, // 0x0196
783 MTF_TYPE_LB},
784 { "LB_SETTOPINDEX", LB_SETTOPINDEX, // 0x0197
785 MTF_TYPE_LB},
786 { "LB_GETITEMRECT", LB_GETITEMRECT, // 0x0198
787 MTF_TYPE_LB},
788 { "LB_GETITEMDATA", LB_GETITEMDATA, // 0x0199
789 MTF_TYPE_LB},
790 { "LB_SETITEMDATA", LB_SETITEMDATA, // 0x019A
791 MTF_TYPE_LB},
792 { "LB_SELITEMRANGE", LB_SELITEMRANGE, // 0x019B
793 MTF_TYPE_LB},
794 { "LB_SETANCHORINDEX", LB_SETANCHORINDEX, // 0x019C
795 MTF_TYPE_LB},
796 { "LB_GETANCHORINDEX", LB_GETANCHORINDEX, // 0x019D
797 MTF_TYPE_LB},
798 { "LB_SETCARETINDEX", LB_SETCARETINDEX, // 0x019E
799 MTF_TYPE_LB},
800 { "LB_GETCARETINDEX", LB_GETCARETINDEX, // 0x019F
801 MTF_TYPE_LB},
802 { "LB_SETITEMHEIGHT", LB_SETITEMHEIGHT, // 0x01A0
803 MTF_TYPE_LB},
804 { "LB_GETITEMHEIGHT", LB_GETITEMHEIGHT, // 0x01A1
805 MTF_TYPE_LB},
806 { "LB_FINDSTRINGEXACT", LB_FINDSTRINGEXACT, // 0x01A2
807 MTF_TYPE_LB},
808 { "LB_SETLOCALE", LB_SETLOCALE, // 0x01A5
809 MTF_TYPE_LB},
810 { "LB_GETLOCALE", LB_GETLOCALE, // 0x01A6
811 MTF_TYPE_LB},
812 { "LB_SETCOUNT", LB_SETCOUNT, // 0x01A7
813 MTF_TYPE_LB},
814 { "WM_MOUSEMOVE", WM_MOUSEMOVE, // 0x0200
815 MTF_TYPE_MOUSE},
816 { "WM_LBUTTONDOWN", WM_LBUTTONDOWN, // 0x0201
817 MTF_TYPE_MOUSE},
818 { "WM_LBUTTONUP", WM_LBUTTONUP, // 0x0202
819 MTF_TYPE_MOUSE},
820 { "WM_LBUTTONDBLCLK", WM_LBUTTONDBLCLK, // 0x0203
821 MTF_TYPE_MOUSE},
822 { "WM_RBUTTONDOWN", WM_RBUTTONDOWN, // 0x0204
823 MTF_TYPE_MOUSE},
824 { "WM_RBUTTONUP", WM_RBUTTONUP, // 0x0205
825 MTF_TYPE_MOUSE},
826 { "WM_RBUTTONDBLCLK", WM_RBUTTONDBLCLK, // 0x0206
827 MTF_TYPE_MOUSE},
828 { "WM_MBUTTONDOWN", WM_MBUTTONDOWN, // 0x0207
829 MTF_TYPE_MOUSE},
830 { "WM_MBUTTONUP", WM_MBUTTONUP, // 0x0208
831 MTF_TYPE_MOUSE},
832 { "WM_MBUTTONDBLCLK", WM_MBUTTONDBLCLK, // 0x0209
833 MTF_TYPE_MOUSE},
834 { "WM_PARENTNOTIFY", WM_PARENTNOTIFY, // 0x0210
835 MTF_TYPE_MOUSE},
836 { "WM_ENTERMENULOOP", WM_ENTERMENULOOP, // 0x0211
837 0},
838 { "WM_EXITMENULOOP", WM_EXITMENULOOP, // 0x0212
839 0},
840 { "WM_MDICREATE", WM_MDICREATE, // 0x0220
841 0},
842 { "WM_MDIDESTROY", WM_MDIDESTROY, // 0x0221
843 0},
844 { "WM_MDIACTIVATE", WM_MDIACTIVATE, // 0x0222
845 0},
846 { "WM_MDIRESTORE", WM_MDIRESTORE, // 0x0223
847 0},
848 { "WM_MDINEXT", WM_MDINEXT, // 0x0224
849 0},
850 { "WM_MDIMAXIMIZE", WM_MDIMAXIMIZE, // 0x0225
851 0},
852 { "WM_MDITILE", WM_MDITILE, // 0x0226
853 0},
854 { "WM_MDICASCADE", WM_MDICASCADE, // 0x0227
855 0},
856 { "WM_MDIICONARRANGE", WM_MDIICONARRANGE, // 0x0228
857 0},
858 { "WM_MDIGETACTIVE", WM_MDIGETACTIVE, // 0x0229
859 0},
860 { "WM_MDISETMENU", WM_MDISETMENU, // 0x0230
861 0},
862 { "WM_ENTERSIZEMOVE", WM_ENTERSIZEMOVE, // 0x0231
863 0},
864 { "WM_EXITSIZEMOVE", WM_EXITSIZEMOVE, // 0x0232
865 0},
866 { "WM_DROPFILES", WM_DROPFILES, // 0x0233
867 0},
868 { "WM_MDIREFRESHMENU", WM_MDIREFRESHMENU, // 0x0234
869 0},
870#ifdef FE_IME
871 { "WM_IME_REPORT", WM_IME_REPORT, // 0x0280
872 MTF_TYPE_IME},
873#endif
874 { "WM_IME_SETCONTEXT", WM_IME_SETCONTEXT, // 0x0281
875 TMP_MTF_TYPE_IME},
876 { "WM_IME_NOTIFY", WM_IME_NOTIFY, // 0x0282
877 TMP_MTF_TYPE_IME},
878 { "WM_IME_CONTROL", WM_IME_CONTROL, // 0x0283
879 TMP_MTF_TYPE_IME},
880 { "WM_IME_COMPOSITIONFULL", WM_IME_COMPOSITIONFULL, // 0x0284
881 TMP_MTF_TYPE_IME},
882 { "WM_IME_SELECT", WM_IME_SELECT, // 0x0285
883 TMP_MTF_TYPE_IME},
884 { "WM_IME_CHAR", WM_IME_CHAR, // 0x0286
885 TMP_MTF_TYPE_IME},
886#ifdef FE_IME
887 { "WM_IMEKEYDOWN", WM_IMEKEYDOWN, // 0x0290
888 MTF_TYPE_IME},
889 { "WM_IMEKEYUP", WM_IMEKEYUP, // 0x0291
890 MTF_TYPE_IME},
891#endif
892 { "WM_CUT", WM_CUT, // 0x0300
893 MTF_TYPE_CLIP},
894 { "WM_COPY", WM_COPY, // 0x0301
895 MTF_TYPE_CLIP},
896 { "WM_PASTE", WM_PASTE, // 0x0302
897 MTF_TYPE_CLIP},
898 { "WM_CLEAR", WM_CLEAR, // 0x0303
899 MTF_TYPE_CLIP},
900 { "WM_UNDO", WM_UNDO, // 0x0304
901 MTF_TYPE_CLIP},
902 { "WM_RENDERFORMAT", WM_RENDERFORMAT, // 0x0305
903 MTF_TYPE_CLIP},
904 { "WM_RENDERALLFORMATS", WM_RENDERALLFORMATS, // 0x0306
905 MTF_TYPE_CLIP},
906 { "WM_DESTROYCLIPBOARD", WM_DESTROYCLIPBOARD, // 0x0307
907 MTF_TYPE_CLIP},
908 { "WM_DRAWCLIPBOARD", WM_DRAWCLIPBOARD, // 0x0308
909 MTF_TYPE_CLIP},
910 { "WM_PAINTCLIPBOARD", WM_PAINTCLIPBOARD, // 0x0309
911 MTF_TYPE_CLIP},
912 { "WM_VSCROLLCLIPBOARD", WM_VSCROLLCLIPBOARD, // 0x030A
913 MTF_TYPE_CLIP},
914 { "WM_SIZECLIPBOARD", WM_SIZECLIPBOARD, // 0x030B
915 MTF_TYPE_CLIP},
916 { "WM_ASKCBFORMATNAME", WM_ASKCBFORMATNAME, // 0x030C
917 MTF_TYPE_CLIP},
918 { "WM_CHANGECBCHAIN", WM_CHANGECBCHAIN, // 0x030D
919 MTF_TYPE_CLIP},
920 { "WM_HSCROLLCLIPBOARD", WM_HSCROLLCLIPBOARD, // 0x030E
921 MTF_TYPE_CLIP},
922 { "WM_QUERYNEWPALETTE", WM_QUERYNEWPALETTE, // 0x030F
923 0},
924 { "WM_PALETTEISCHANGING", WM_PALETTEISCHANGING, // 0x0310
925 0},
926 { "WM_PALETTECHANGED", WM_PALETTECHANGED, // 0x0311
927 0},
928 { "WM_HOTKEY", WM_HOTKEY, // 0x0312
929 MTF_TYPE_KEYBD},
930 { "WM_DDE_INITIATE", WM_DDE_INITIATE, // 0x03E0
931 MTF_TYPE_DDE},
932 { "WM_DDE_TERMINATE", WM_DDE_TERMINATE, // 0x03E1
933 MTF_TYPE_DDE},
934 { "WM_DDE_ADVISE", WM_DDE_ADVISE, // 0x03E2
935 MTF_TYPE_DDE},
936 { "WM_DDE_UNADVISE", WM_DDE_UNADVISE, // 0x03E3
937 MTF_TYPE_DDE},
938 { "WM_DDE_ACK", WM_DDE_ACK, // 0x03E4
939 MTF_TYPE_DDE},
940 { "WM_DDE_DATA", WM_DDE_DATA, // 0x03E5
941 MTF_TYPE_DDE},
942 { "WM_DDE_REQUEST", WM_DDE_REQUEST, // 0x03E6
943 MTF_TYPE_DDE},
944 { "WM_DDE_POKE", WM_DDE_POKE, // 0x03E7
945 MTF_TYPE_DDE},
946 { "WM_DDE_EXECUTE", WM_DDE_EXECUTE, // 0x03E8
947 MTF_TYPE_DDE}
948};
949
950INT gcMessages = sizeof(gaMsgs) / sizeof(MSGDESC);
951
952
953char *GetMsgText(int Msg)
954{
955 static char msgtxt[64];
956 int i;
957
958 for(i=0;i<gcMessages;i++) {
959 if(gaMsgs[i].msg == Msg)
960 return(gaMsgs[i].pszMsg);
961 }
962 sprintf(msgtxt, "%s %X ", "Unknown Message ", Msg);
963 return(msgtxt);
964}
965#endif
966//******************************************************************************
967//******************************************************************************
968Win32WindowProc *Win32WindowProc::windows = NULL;
Note: See TracBrowser for help on using the repository browser.