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

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

FS changes for msg callbacks & OS2/Open32 apis

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