Question about ToolbarWindowProc

Guy L. Albertelli galberte at neo.lrun.com
Wed Feb 27 20:20:44 CST 2002


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






More information about the wine-devel mailing list