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

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

Spy updates

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