首先 ,tooltips的创建:
HWND CDlgXXX::CreateToolTip(int toolID, PTSTR pszText)
{
if (!toolID || !pszText)
{
return FALSE;
}
HINSTANCE hinst = AfxGetInstanceHandle();
HWND hwndTip = CreateWindowEx(NULL, TOOLTIPS_CLASS, NULL,
WS_POPUP |TTS_ALWAYSTIP | TTS_BALLOON,
CW_USEDEFAULT, CW_USEDEFAULT,
CW_USEDEFAULT, CW_USEDEFAULT,
GetParent()->m_hWnd, NULL,
hinst, NULL);
if (!hwndTool || !hwndTip)
{
return (HWND)NULL;
}
TOOLINFO toolInfo = { 0 };
toolInfo.cbSize = sizeof(toolInfo);
toolInfo.hwnd = this->m_hWnd;
toolInfo.uFlags = TTF_SUBCLASS;
toolInfo.uId = toolID;
toolInfo.lpszText = pszText;
SendMessage(hwndTip, TTM_ADDTOOL, 0, (LPARAM)&toolInfo);
return hwndTip;
}
这里说明一下, CreateWindowEx 的参数,第二个参数代表这个CWND 是个 tooltips ,第四个参数设置了tooltips的几个情况,TTS_ALWAYSTIP 说明tooltips是经常显示(也就是鼠标移动到上面的时候,就进行显示),TTS_BALLOON 说明了提示框是个 泡泡形状 (语言难以描述,各位看客可以试下)。至于其他的参数可以忽略 。都是默认值.
填充TOOLINFO 结构体,通过 发送TTM_ADDTOOL这个消息进行添加tootips。
这里需要注意的是 TTF_SUBCLASS 这个参数,这个值是说,不用自己进行处理,系统会自动根据鼠标移动情况进行动态的显示TOOLTIPS 。
在这里另外一个比较重要的参数是 : TTF_IDISHWND
说这个参数之前先说两种 tooltips:
第一种: 控件tooltips ,通俗点说,就是给控件添加tooltips,tooltips 覆盖了整个控件。这种tooltips 是根据控件的句柄进行区分,TOOLINFO 中的rect 可以不用填写。
第二种: 区域tooltips,通俗点说,就是给某个特定的区域添加tooltips,tooltips覆盖了这个区域。这种tooltips 是根据填写的ID 进行区分,TOOLINFO 中的rect 可以必须进行填写。此时的uID 可以是定义的任意值,例:#define TOOLTIPS_ID 30000 ,但是要保证唯一性。
TTF_IDISHWND "ID is hWnd".
如果你指定了这个标志,就意味着你要使用第一种tooltips,则你必须用控件的句柄填充uId成员,
如果你不指定这个成员,就意味着你要使用第二种tooltips,客户区窗口的一方形区域.在这种情况下,你就必须以方形区域的大小填充rect成员.
之后 再说一下 TOOLINFO 中的lpszText 参数 。 这个参数 可以 填写 LPSTR_TEXTCALLBACK 这个值,用来进行实时更新tooltips 要显示的文字信息 。
填写LPSTR_TEXTCALLBACK之后,每次tooltips 需要显示的时候都会发送一个TTN_NEEDTEXT消息。 在TTN_NEEDTEXT 消息中可以进行修改显示的文字信息。
TTN_NEEDTEXT 的使用方法:
ON_NOTIFY_EX(TTN_NEEDTEXT,0,OnToolTip)
afx_msg BOOL OnToolTip(UINT id,NMHDR * pNMHDR,LRESULT * pResult);
BOOL CDlgxxxx::OnToolTip(UINT id,NMHDR * pNMHDR,LRESULT * pResult)
{
TOOLTIPTEXT * pTTT = (TOOLTIPTEXT *)pNMHDR;
UINT uID = pNMHDR->idFrom;
HWND hWnd = pNMHDR->hwndFrom;
if(uID == NULL) return FALSE;
switch(uID)
{
case xxx:
break;
}
return TRUE;
}
这里可以根据 hwnd 和uid 的不同进行 区分不同的tooltips;
另外在说说 其他的几个常用的指令 :
所有的指令中 cbSize 是必须填写的,填写后,在SendMessage 。否则会失败。
TTM_ADDTOOL
- wParam
- 0. lParam TOOLINFO 结构体指针。
添加一个tooltips ,需要注意的是 TTF_IDISHWND 指令
TTM_DELTOOL
wParam
删除一个tooltips ,这里根据 uid 和hwnd 来制定删除的tooltips 。
TTM_GETTOOLINFO : 得到当前的TOOLINFO 信息。
TTM_SETTOOLINFO : 在 发送 这个命令之前一定先 发送TTM_GETTOOLINFO 消息得到 TOOLINFO 之后再进行 发送 set
TTM_UPDATETIPTEXT : 更新 tipstext 的信息 ,注意穿进去的
lpszText 必须已经申请好空间。
剩下的比较懒 ,有时间 补齐。