----- Original Message ----- From: "Jeremy Shaw" <jeremy(a)lindows.com> To: "Wine Devel" <wine-devel(a)winehq.com> Sent: Wednesday, February 27, 2002 7:30 PM Subject: Re: Question about ToolbarWindowProc
Now, If I use the WindomsME comctl32.dll BUT modify SendMessageA to block the Favorites menu from receiving message 0x463, then the Favorites menu reverts to only being 8 pixel tall.
Jeremy, I do believe I have been totally wrong about toolbar message [0463]. 0806f388:trace:message:SPY_EnterMessage (00010044) L"Menu" message [043a] TB_GETBUTTONSIZE sent from self wp=00000000 lp=00000000 0806f388:trace:message:SPY_ExitMessage (00010044) L"Menu" message [043a] TB_GETBUTTONSIZE returned 001500a5 0806f388:trace:message:SPY_EnterMessage (00010044) L"Menu" message [0463] WM_USER+0063 sent from self wp=00000001 lp=405243ac 0806f388:trace:message:SPY_ExitMessage (00010044) L"Menu" message [0463] WM_USER+0063 returned 00000000 0806f388:trace:message:SPY_EnterMessage (00010046) L"{ToolbarWindow}" message [043a] TB_GETBUTTONSIZE sent from self wp=00000000 lp=00000000 0806f388:trace:message:SPY_ExitMessage (00010046) L"{ToolbarWindow}" message [043a] TB_GETBUTTONSIZE returned 00150173 0806f388:trace:message:SPY_EnterMessage (00010046) L"{ToolbarWindow}" message [0463] WM_USER+0063 sent from self wp=00000001 lp=405243ac 0806f388:trace:message:SPY_ExitMessage (00010046) L"{ToolbarWindow}" message [0463] WM_USER+0063 returned 00000000 ... 0806f388:Call user32.AdjustWindowRectEx(4052463c,86400000,00000000,00000088) ret=7113f8d6 0806f388:trace:win:InflateRect r (-3,-3)-(374,4) 0806f388:Ret user32.AdjustWindowRectEx() retval=00000001 ret=7113f8d6 The above trace is from work I've been doing on IE5.5. It shows the entries just before the first known point of failure. If I fudge AdjustWindowRectEx and force the rectangle to be deeper (larger y value), it displays the Favorites "menu" window. Note that the app code touches, with both TB_GETBUTTONSIZE and [0463], both toolbars that are part of the rebar just before the call. Based on your note, I added some code (bottom) to toolbar.c to display the data pointed to by the lParam of the [0463] message. I chose 2 dwords after looking at memory with the debugger. The third and fourth dwords are the stack pointer and return address, so the max size of the data must be 2 dwords. The trace below shows the values displayed. Then I guessed that the code in native probably sets the second word. AND THAT STARTED TO WORK!!!! No, not correctly, but it is definitely bigger. err:toolbar:ToolbarWindowProc [0463] lParam 0x40523c70 -> 0x000000a5 0x00000000 err:toolbar:ToolbarWindowProc [0463] lParam 0x40523c68 -> 0x00000173 0x00000000 case 0x0463: { LPDWORD hoho = (LPDWORD)lParam; ERR("[0463] lParam 0x%08lx -> 0x%08lx 0x%08lx\n", lParam, *hoho, *(hoho+1)); /* guess - level 1 */ if (!*(hoho+1)) { *(hoho+1) = *hoho; /* set second word to first */ } return 0; /* really should be 1 */ } BTW, The interior windowproc is the "real" toolbar windowproc. You can check the windowproc addresses by running the ControlSpy samples with "+relay,+message" and noting which addresses are used for which window classes. I really think we are closer. If we add another case to windows/spy.c to trap the [0463] message and dump the two dwords at the lParam on entry and exit, I think we can understand what this thing really does. Guy