----- Original Message ----- From: "Jeremy Shaw" jeremy@lindows.com To: "Wine Devel" wine-devel@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