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

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

More message changes

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