求助!发送消息TTM_ADDTOOL 给 tooltip返回失败,但GetLastError()返回0

longjing_g 2008-04-21 06:36:29
同样代码在我自己写的exe运行正常,但是改成BHO(一个ie状态栏的图标及其tooltip)就无法正常工作了,哪位帮帮忙!

// Create a ToolTip.
HWND hwndTT = CreateWindowEx(WS_EX_TOPMOST,
TOOLTIPS_CLASS, NULL,
WS_POPUP | TTS_NOPREFIX | TTS_ALWAYSTIP,
CW_USEDEFAULT, CW_USEDEFAULT,
CW_USEDEFAULT, CW_USEDEFAULT,
hwndParent, NULL, g_hInst,NULL);

SetWindowPos(hwndTT, HWND_TOPMOST,
0, 0, 0, 0,
SWP_NOMOVE | SWP_NOSIZE | SWP_NOACTIVATE);

// Set up "tool" information.
// In this case, the "tool" is the entire parent window.
TOOLINFO ti = { 0 };
ti.cbSize = sizeof(TOOLINFO);
ti.uFlags = 0;
ti.hwnd = hwndParent;
ti.hinst = NULL;
ti.uId = 123477;
ti.lpszText = TEXT("This is your ToolTip string.");;
GetClientRect (hwndParent, &ti.rect);

// Associate the ToolTip with the "tool" window.
if(!::SendMessage(hwndTT, TTM_ADDTOOL, 0, (LPARAM) (LPTOOLINFO) &ti))
{
DWORD dwErr = ::GetLastError();
ASSERT(0);
return NULL;
}
...全文
186 点赞 收藏 11
写回复
11 条回复
longjing_g 2008年05月06日
盼高手恢复。
楼上的介绍一个方法给你,自己实现一个窗口,模拟tooltip,我是这么做的,表面还是可以的。
很想找到真正的方案。。。。。。
回复 点赞
meiZiNick 2008年05月01日
我也想知道,正在找這方面的資料~~~~~
回复 点赞
UltraBejing 2008年04月30日
等待牛人来答.
回复 点赞
longjing_g 2008年04月28日
if(!::SendMessage(hwndTT, TTM_ADDTOOL, 0, (LPARAM) (LPTOOLINFO) &ti))

这个出错,在具体我就不用问了
回复 点赞
jameshooo 2008年04月23日
具体的问题现象还没有描述清楚,没说哪块出错
回复 点赞
longjing_g 2008年04月23日
我注册了bho,在setsite里面枚举到状态栏的窗口,然后创建的,hwnd应该是没问题的,我在上面加的图标可以显示,spy得到的句柄也是相同的
回复 点赞
cnzdgs 2008年04月22日
这段代码在什么时候执行?hwndParent的值会不会有问题?
回复 点赞
longjing_g 2008年04月22日
感谢极为,不过这些都不是
uid 改小也没用,线程也是在同一个下面的,我在创建的时候有判断
DWORD dwThreadID = ::GetWindowThreadProcessId(hwnd, NULL);
if (dwThreadID == ::GetCurrentThreadId())
回复 点赞
jameshooo 2008年04月21日
看看状态栏窗口所在线程是否与BHO所在线程相同
回复 点赞
cnzdgs 2008年04月21日
你把uId改小一些(65535以内)试试。
回复 点赞
cnzdgs 2008年04月21日
SendMessage失败是没有错误码的,所以执行GetLastError没有意义。
回复 点赞
发动态
发帖子
ATL
创建于2007-09-28

3026

社区成员

4.8w+

社区内容

ATL,Active Template Library活动(动态)模板库,是一种微软程序库,支持利用C++语言编写ASP代码以及其它ActiveX程序。
社区公告
暂无公告