I have the following code for a tootip from a toolbar. For me all seems to be correct but the tooltip is not displayed. Can anyone help me. Thanks.
(https://xvqoag-dm2306.files.1drv.com/y4mdpF3djsu9PwJNqeft9pG9SGyGSbkrZaluhtUhG7BNoZnlzqiy0A_A87YhQUS5MpMf6ME3F3H1JPSbjLe-4BpTGQElfbBJesK2Qg_bYHaEsMODGijxAVhRxJbsFlL_7GsfDeOaLqZuTh15hRISK2uJjgz6CQA7qkZ4GL_VZC2kqAuYpk7TPoq7pOmg0qGGzlYgc3pgHe8oPf4TqwFyTKXQw?width=1382&height=744&cropmode=none)
I have found!
@GetDispInfos :
mov rdx,[r9].NMTTDISPINFO.hdr.idFrom
or [r9].NMTTDISPINFO.uFlags,TTF_DI_SETITEM or TTF_IDISHWND
mov [r9].NMTTDISPINFO.hinst,0
mov rax,OFFSET hInstance
lea r8,[r9].NMTTDISPINFO.szText
mov rcx,[rax]
mov [r9].NMTTDISPINFO.lpszText,r8
mov r9,80
call LoadStringA
xor rax,rax
ret
The problem was caused by this line :OR [r9].NMTTDISPINFO.uFlags,TTF_DI_SETITEM or TTF_IDISHWNDQuote
TTF_IDISHWNDIf this flag is set, idFrom is the tool's handle. Otherwise, it is the tool's identifier. |
Toolbar can load string from resource in this way too:void OnNotify(HWND hwnd, int idCtrl, NMHDR* pNMHdr)
{
switch (pNMHdr->code)
{
case TTN_NEEDTEXT:
{
((LPTOOLTIPTEXT)pNMHdr)->hinst = hInst;
((LPTOOLTIPTEXT)pNMHdr)->lpszText = MAKEINTRESOURCE(((LPTOOLTIPTEXT)pNMHdr)->hdr.idFrom);
return;
}
}
}
178: void OnNotify(HWND hwnd, int idCtrl, NMHDR* pNMHdr)
OnNotify:
179: {
180: switch (pNMHdr->code)
[00000000000004F0] 41817810F8FDFFFF cmp dword ptr [r8+10],FFFFFDF8
[00000000000004F8] 7517 jne 0000000000000511
181: {
182: case TTN_NEEDTEXT:
183: {
184: ((LPTOOLTIPTEXT)pNMHdr)->hinst = hInst;
[00000000000004FA] 488B0500000000 mov rax,qword ptr [hInst]
[0000000000000501] 49894070 mov qword ptr [r8+70],rax
185:
186: ((LPTOOLTIPTEXT)pNMHdr)->lpszText = MAKEINTRESOURCE(((LPTOOLTIPTEXT)pNMHdr)->hdr.idFrom);
[0000000000000505] 418B4008 mov eax,dword ptr [r8+8]
[0000000000000509] 480FB7C0 movzx rax,ax
[000000000000050D] 49894018 mov qword ptr [r8+18],rax
187: return;
[0000000000000511] C3 ret
TTN_GETDISPINFO = TTN_NEEDTEXT