Tooltips: Use Unicode Window Messages (Try 2)
Robert Shearman
rob at codeweavers.com
Thu Sep 16 14:56:17 CDT 2004
Hi,
Now incorporating a fix to the problem that Dmitry correctly noticed.
Changelog:
Use Unicode window messages.
-------------- next part --------------
Index: wine/dlls/comctl32/tooltips.c
===================================================================
RCS file: /home/wine/wine/dlls/comctl32/tooltips.c,v
retrieving revision 1.71
diff -u -p -r1.71 tooltips.c
--- wine/dlls/comctl32/tooltips.c 9 Sep 2004 00:26:13 -0000 1.71
+++ wine/dlls/comctl32/tooltips.c 16 Sep 2004 19:50:56 -0000
@@ -318,7 +318,7 @@ static void TOOLTIPS_GetDispInfoA(HWND h
ttnmdi.lParam = toolPtr->lParam;
TRACE("hdr.idFrom = %x\n", ttnmdi.hdr.idFrom);
- SendMessageA(toolPtr->hwnd, WM_NOTIFY,
+ SendMessageW(toolPtr->hwnd, WM_NOTIFY,
(WPARAM)toolPtr->uId, (LPARAM)&ttnmdi);
if (HIWORD((UINT)ttnmdi.lpszText) == 0) {
@@ -522,7 +522,7 @@ TOOLTIPS_Show (HWND hwnd, TOOLTIPS_INFO
hdr.hwndFrom = hwnd;
hdr.idFrom = toolPtr->uId;
hdr.code = TTN_SHOW;
- SendMessageA (toolPtr->hwnd, WM_NOTIFY,
+ SendMessageW (toolPtr->hwnd, WM_NOTIFY,
(WPARAM)toolPtr->uId, (LPARAM)&hdr);
TRACE("%s\n", debugstr_w(infoPtr->szTipText));
@@ -698,7 +698,7 @@ TOOLTIPS_Hide (HWND hwnd, TOOLTIPS_INFO
hdr.hwndFrom = hwnd;
hdr.idFrom = toolPtr->uId;
hdr.code = TTN_POP;
- SendMessageA (toolPtr->hwnd, WM_NOTIFY,
+ SendMessageW (toolPtr->hwnd, WM_NOTIFY,
(WPARAM)toolPtr->uId, (LPARAM)&hdr);
infoPtr->nCurrentTool = -1;
@@ -736,7 +736,7 @@ TOOLTIPS_TrackShow (HWND hwnd, TOOLTIPS_
hdr.hwndFrom = hwnd;
hdr.idFrom = toolPtr->uId;
hdr.code = TTN_SHOW;
- SendMessageA (toolPtr->hwnd, WM_NOTIFY,
+ SendMessageW (toolPtr->hwnd, WM_NOTIFY,
(WPARAM)toolPtr->uId, (LPARAM)&hdr);
TRACE("%s\n", debugstr_w(infoPtr->szTipText));
@@ -822,7 +822,7 @@ TOOLTIPS_TrackHide (HWND hwnd, TOOLTIPS_
hdr.hwndFrom = hwnd;
hdr.idFrom = toolPtr->uId;
hdr.code = TTN_POP;
- SendMessageA (toolPtr->hwnd, WM_NOTIFY,
+ SendMessageW (toolPtr->hwnd, WM_NOTIFY,
(WPARAM)toolPtr->uId, (LPARAM)&hdr);
SetWindowPos (hwnd, HWND_TOP, 0, 0, 0, 0,
@@ -936,7 +936,7 @@ TOOLTIPS_CheckTool (HWND hwnd, BOOL bSho
INT nTool;
GetCursorPos (&pt);
- hwndTool = (HWND)SendMessageA (hwnd, TTM_WINDOWFROMPOINT, 0, (LPARAM)&pt);
+ hwndTool = (HWND)SendMessageW (hwnd, TTM_WINDOWFROMPOINT, 0, (LPARAM)&pt);
if (hwndTool == 0)
return -1;
@@ -1048,7 +1048,7 @@ TOOLTIPS_AddToolA (HWND hwnd, WPARAM wPa
TRACE("subclassing installed!\n");
}
- nResult = (INT) SendMessageA (toolPtr->hwnd, WM_NOTIFYFORMAT,
+ nResult = (INT) SendMessageW (toolPtr->hwnd, WM_NOTIFYFORMAT,
(WPARAM)hwnd, (LPARAM)NF_QUERY);
if (nResult == NFR_ANSI) {
toolPtr->bNotifyUnicode = FALSE;
@@ -1138,7 +1138,7 @@ TOOLTIPS_AddToolW (HWND hwnd, WPARAM wPa
TRACE("subclassing installed!\n");
}
- nResult = (INT) SendMessageA (toolPtr->hwnd, WM_NOTIFYFORMAT,
+ nResult = (INT) SendMessageW (toolPtr->hwnd, WM_NOTIFYFORMAT,
(WPARAM)hwnd, (LPARAM)NF_QUERY);
if (nResult == NFR_ANSI) {
toolPtr->bNotifyUnicode = FALSE;
@@ -2415,7 +2415,7 @@ TOOLTIPS_NCHitTest (HWND hwnd, WPARAM wP
}
}
- return DefWindowProcA (hwnd, WM_NCHITTEST, wParam, lParam);
+ return DefWindowProcW (hwnd, WM_NCHITTEST, wParam, lParam);
}
@@ -2464,8 +2464,9 @@ TOOLTIPS_SetFont (HWND hwnd, WPARAM wPar
return 0;
}
+
/******************************************************************
- * TOOLTIPS_OnWMGetTextLength
+ * TOOLTIPS_GetTextLength
*
* This function is called when the tooltip receive a
* WM_GETTEXTLENGTH message.
@@ -2473,12 +2474,12 @@ TOOLTIPS_SetFont (HWND hwnd, WPARAM wPar
* lParam : not used
*
* returns the length, in characters, of the tip text
- ******************************************************************/
+ */
static LRESULT
-TOOLTIPS_OnWMGetTextLength(HWND hwnd, WPARAM wParam, LPARAM lParam)
+TOOLTIPS_GetTextLength(HWND hwnd, WPARAM wParam, LPARAM lParam)
{
TOOLTIPS_INFO *infoPtr = TOOLTIPS_GetInfoPtr (hwnd);
- return lstrlenW(infoPtr->szTipText);
+ return strlenW(infoPtr->szTipText);
}
/******************************************************************
@@ -2491,17 +2492,21 @@ TOOLTIPS_OnWMGetTextLength(HWND hwnd, WP
* the tip text
*
* returns the number of characters copied
- ******************************************************************/
+ */
static LRESULT
TOOLTIPS_OnWMGetText (HWND hwnd, WPARAM wParam, LPARAM lParam)
{
TOOLTIPS_INFO *infoPtr = TOOLTIPS_GetInfoPtr (hwnd);
+ LRESULT res;
+ LPWSTR pszText = (LPWSTR)lParam;
- if(!infoPtr || !(infoPtr->szTipText))
+ if(!infoPtr->szTipText || !wParam)
return 0;
- return WideCharToMultiByte(CP_ACP, 0, infoPtr->szTipText, -1,
- (LPSTR)lParam, wParam, NULL, NULL);
+ res = min(strlenW(infoPtr->szTipText)+1, wParam);
+ memcpy(pszText, infoPtr->szTipText, res*sizeof(WCHAR));
+ pszText[res-1] = '\0';
+ return res-1;
}
static LRESULT
@@ -2597,7 +2602,7 @@ TOOLTIPS_WindowProc (HWND hwnd, UINT uMs
{
TRACE("hwnd=%p msg=%x wparam=%x lParam=%lx\n", hwnd, uMsg, wParam, lParam);
if (!TOOLTIPS_GetInfoPtr(hwnd) && (uMsg != WM_CREATE) && (uMsg != WM_NCCREATE))
- return DefWindowProcA (hwnd, uMsg, wParam, lParam);
+ return DefWindowProcW (hwnd, uMsg, wParam, lParam);
switch (uMsg)
{
case TTM_ACTIVATE:
@@ -2741,7 +2746,7 @@ TOOLTIPS_WindowProc (HWND hwnd, UINT uMs
return TOOLTIPS_OnWMGetText (hwnd, wParam, lParam);
case WM_GETTEXTLENGTH:
- return TOOLTIPS_OnWMGetTextLength (hwnd, wParam, lParam);
+ return TOOLTIPS_GetTextLength (hwnd, wParam, lParam);
case WM_LBUTTONDOWN:
case WM_LBUTTONUP:
@@ -2777,7 +2782,7 @@ TOOLTIPS_WindowProc (HWND hwnd, UINT uMs
if ((uMsg >= WM_USER) && (uMsg < WM_APP))
ERR("unknown msg %04x wp=%08x lp=%08lx\n",
uMsg, wParam, lParam);
- return DefWindowProcA (hwnd, uMsg, wParam, lParam);
+ return DefWindowProcW (hwnd, uMsg, wParam, lParam);
}
return 0;
}
@@ -2786,18 +2791,18 @@ TOOLTIPS_WindowProc (HWND hwnd, UINT uMs
VOID
TOOLTIPS_Register (void)
{
- WNDCLASSA wndClass;
+ WNDCLASSW wndClass;
- ZeroMemory (&wndClass, sizeof(WNDCLASSA));
+ ZeroMemory (&wndClass, sizeof(WNDCLASSW));
wndClass.style = CS_GLOBALCLASS | CS_DBLCLKS | CS_SAVEBITS;
- wndClass.lpfnWndProc = (WNDPROC)TOOLTIPS_WindowProc;
+ wndClass.lpfnWndProc = TOOLTIPS_WindowProc;
wndClass.cbClsExtra = 0;
wndClass.cbWndExtra = sizeof(TOOLTIPS_INFO *);
- wndClass.hCursor = LoadCursorA (0, (LPSTR)IDC_ARROW);
+ wndClass.hCursor = LoadCursorW (0, (LPWSTR)IDC_ARROW);
wndClass.hbrBackground = 0;
- wndClass.lpszClassName = TOOLTIPS_CLASSA;
+ wndClass.lpszClassName = TOOLTIPS_CLASSW;
- RegisterClassA (&wndClass);
+ RegisterClassW (&wndClass);
hTooltipIcons[TTI_NONE] = NULL;
hTooltipIcons[TTI_INFO] = LoadImageW(COMCTL32_hModule,
@@ -2815,5 +2820,5 @@ TOOLTIPS_Unregister (void)
int i;
for (i = 0; i < TTI_ERROR+1; i++)
DeleteObject(hTooltipIcons[i]);
- UnregisterClassA (TOOLTIPS_CLASSA, NULL);
+ UnregisterClassW (TOOLTIPS_CLASSW, NULL);
}
More information about the wine-patches
mailing list