Thorsten Kani wrote:
...now with screenshots included.
Hi, I took a look at the Startmenu. It does its job except for the following minor problems:
-Keyboard input is completely ignored -Icon Backgrounds are white instead of grey -All the Icons were drawn a few pixels below where they belong, wich makes them a bit overdrawn by the Icon below. -The Strings above the seperator were drawn next to the* *_left_ border wich makes them partially overdrawn by the Buttons Icon.
Thanks. Could you try the attached patch which should fix the white background issue? Also, could you try setting both OFFSET_X and OFFSET_Y to 0 in wine/dlls/comctl32/toolbar.c The strings being in the wrong position is a bigger issue. If you are interested, the problem is that we recalculate and redraw our toolbar control too much so that the code to create the Start Menu expects that it won't be refreshed until it has finished setting the various properties of the toolbar. I have some unfinished work in the toolbar control at the moment, but I plan to use controlspy to see which messages should cause a redraw and which shouldn't.
Rob
Index: wine/dlls/comctl32/toolbar.c =================================================================== RCS file: /home/wine/wine/dlls/comctl32/toolbar.c,v retrieving revision 1.195 diff -u -p -r1.195 toolbar.c --- wine/dlls/comctl32/toolbar.c 18 Oct 2004 19:39:22 -0000 1.195 +++ wine/dlls/comctl32/toolbar.c 19 Oct 2004 16:17:42 -0000 @@ -707,7 +707,7 @@ TOOLBAR_DrawImage(TOOLBAR_INFO *infoPtr, BOOL draw_masked = FALSE; INT index; INT offset = 0; - UINT draw_flags = ILD_NORMAL; + UINT draw_flags = ILD_TRANSPARENT;
if (tbcd->nmcd.uItemState & (CDIS_DISABLED | CDIS_INDETERMINATE)) { @@ -5370,7 +5434,6 @@ TOOLBAR_Create (HWND hwnd, WPARAM wParam infoPtr->nOldHit = -1; infoPtr->nHotItem = -1; infoPtr->hwndNotify = ((LPCREATESTRUCTW)lParam)->hwndParent; - infoPtr->bUnicode = IsWindowUnicode (infoPtr->hwndNotify); infoPtr->bBtnTranspnt = (dwStyle & (TBSTYLE_FLAT | TBSTYLE_LIST)); infoPtr->dwDTFlags = (dwStyle & TBSTYLE_LIST) ? DT_LEFT | DT_VCENTER | DT_SINGLELINE | DT_END_ELLIPSIS: DT_CENTER | DT_END_ELLIPSIS; infoPtr->bAnchor = FALSE; /* no anchor highlighting */ @@ -5388,7 +5451,8 @@ TOOLBAR_Create (HWND hwnd, WPARAM wParam infoPtr->dwStyle = dwStyle; infoPtr->tbim.iButton = -1; GetClientRect(hwnd, &infoPtr->client_rect); - TOOLBAR_NotifyFormat(infoPtr, (WPARAM)hwnd, (LPARAM)NF_REQUERY); + infoPtr->bUnicode = infoPtr->hwndNotify && + (NFR_UNICODE == SendMessageW(hwnd, WM_NOTIFYFORMAT, (WPARAM)hwnd, (LPARAM)NF_REQUERY));
SystemParametersInfoA (SPI_GETICONTITLELOGFONT, 0, &logFont, 0); infoPtr->hFont = infoPtr->hDefaultFont = CreateFontIndirectA (&logFont); @@ -6385,25 +6434,24 @@ TOOLBAR_NotifyFormatFake(HWND hwnd, WPAR static LRESULT TOOLBAR_NotifyFormat(TOOLBAR_INFO *infoPtr, WPARAM wParam, LPARAM lParam) { - INT i; + LRESULT format;
TRACE("wParam = 0x%x, lParam = 0x%08lx\n", wParam, lParam);
- if ((lParam == NF_QUERY) && ((HWND)wParam == infoPtr->hwndToolTip)) + if (lParam == NF_QUERY) return NFR_UNICODE;
if (lParam == NF_REQUERY) { - i = SendMessageW(infoPtr->hwndNotify, + format = SendMessageW(infoPtr->hwndNotify, WM_NOTIFYFORMAT, (WPARAM)infoPtr->hwndSelf, NF_QUERY); - if ((i < NFR_ANSI) || (i > NFR_UNICODE)) { - ERR("wrong response to WM_NOTIFYFORMAT (%d), assuming ANSI\n", - i); - i = NFR_ANSI; + if ((format != NFR_ANSI) && (format != NFR_UNICODE)) { + ERR("wrong response to WM_NOTIFYFORMAT (%ld), assuming ANSI\n", + format); + format = NFR_ANSI; } - infoPtr->bNtfUnicode = (i == NFR_UNICODE) ? 1 : 0; - return (LRESULT)i; + return format; } - return (LRESULT)((infoPtr->bUnicode) ? NFR_UNICODE : NFR_ANSI); + return 0; }