windowsAPI popup trace tip(toolTip)
class UIHELPER_EXPORT ToolTipWindow : public chMessageHandler
{
DECLARE_PROCESS_OBJECT(ToolTipWindow);
public:
bool updateTipText(const chConstStringA text);
private:
bool initTipsWindowsBywinAPI();
void AddWindowTool(HWND hwndTip);
bool ShowTipWindow();
bool HideTipWindow();
BOOL onProcessMessage(msgObject& objMessage);
public:
virtual BOOL TryThreadMessage(msgObject& objMessage);
public:
ToolTipWindow();
~ToolTipWindow();
private:
HWND hwndTip;
TOOLINFOW toolInfo;
chStringW m_strText;
};
#if defined _M_IX86
#pragma comment(linker,"/manifestdependency:\"type='win32' name='Microsoft.Windows.Common-Controls' version='6.0.0.0' processorArchitecture='x86' publicKeyToken='6595b64144ccf1df' language='*'\"")
#elif defined _M_IA64
#pragma comment(linker,"/manifestdependency:\"type='win32' name='Microsoft.Windows.Common-Controls' version='6.0.0.0' processorArchitecture='ia64' publicKeyToken='6595b64144ccf1df' language='*'\"")
#elif defined _M_X64
#pragma comment(linker,"/manifestdependency:\"type='win32' name='Microsoft.Windows.Common-Controls' version='6.0.0.0' processorArchitecture='amd64' publicKeyToken='6595b64144ccf1df' language='*'\"")
#else
#pragma comment(linker,"/manifestdependency:\"type='win32' name='Microsoft.Windows.Common-Controls' version='6.0.0.0' processorArchitecture='*' publicKeyToken='6595b64144ccf1df' language='*'\"")
#endif
#include <commctrl.h>
#pragma comment(lib, "comctl32.lib")
IMPLEMENT_PROCESS_OBJECT(ToolTipWindow);
bool ToolTipWindow::initTipsWindowsBywinAPI()
{
chASSERT(hwndTip == NULL);
hwndTip = CreateWindowEx(NULL,
TOOLTIPS_CLASS,
NULL,
WS_POPUP | TTS_NOPREFIX | TTS_ALWAYSTIP,
CW_USEDEFAULT,
CW_USEDEFAULT,
CW_USEDEFAULT,
CW_USEDEFAULT,
NULL,
NULL,
NULL,
NULL
);
::SetWindowPos(hwndTip, HWND_TOPMOST,0, 0, 0, 0, SWP_NOMOVE | SWP_NOSIZE | SWP_NOACTIVATE);
AddWindowTool(hwndTip);
return true;
}
void ToolTipWindow::AddWindowTool(HWND hwndTip)
{
memset(&toolInfo, 0, sizeof(TOOLINFO));
toolInfo.cbSize = sizeof(TOOLINFO);
toolInfo.uFlags = TTF_IDISHWND | TTF_TRACK;
toolInfo.uId = NULL;//(UINT_PTR)hParrent;
toolInfo.lpszText = NULL;
::SendMessage(hwndTip, TTM_ADDTOOL, 0, (LPARAM) (LPTOOLINFO) &toolInfo);
}
bool ToolTipWindow::updateTipText(const chConstStringA text)
{
chASSERT(hwndTip != NULL);
m_strText = chUTF82W(text);
toolInfo.lpszText = (LPWSTR)m_strText.c_str();
::SendMessage(hwndTip, TTM_UPDATETIPTEXTW, 0, (LPARAM)&toolInfo);
return true;
}
bool ToolTipWindow::ShowTipWindow()
{
POINT currentPoint;
GetCursorPos(¤tPoint);
SYZ_TRACE("getCursorPos x==[%d], y==[%d]", currentPoint.x, currentPoint.y);
::SendMessage(hwndTip, TTM_TRACKPOSITION, 0, (LPARAM) MAKELONG(currentPoint.x + 5, currentPoint.y + 10));
::SendMessage(hwndTip, TTM_TRACKACTIVATE,(WPARAM)TRUE,(LPARAM)&toolInfo);
return TRUE;
}
bool ToolTipWindow::HideTipWindow()
{
::SendMessage(hwndTip, TTM_TRACKACTIVATE,(WPARAM)FALSE,(LPARAM)&toolInfo);
return TRUE;
}
BOOL ToolTipWindow::onProcessMessage(msgObject& objMessage)
{
switch(objMessage.message)
{
case TOOLTIPWINDOWS_UPDATETIPTEXT:
updateTipText(chStringA((LPCSTR)objMessage.GetExtraData(), objMessage.GetExtraSize()));
break;
case TOOLTIPWINDOWS_SHOWTIPWINDOW:
ShowTipWindow();
break;
case TOOLTIPWINDOWS_HIDETIPWINDOW:
HideTipWindow();
break;
default:
break;
}
return TRUE;
}
BOOL ToolTipWindow::TryThreadMessage(msgObject& objMessage)
{
switch(objMessage.message)
{
case TOOLTIPWINDOWS_UPDATETIPTEXT:
updateTipText((LPCSTR)objMessage.GetExtraData());
break;
case TOOLTIPWINDOWS_SHOWTIPWINDOW:
ShowTipWindow();
break;
case TOOLTIPWINDOWS_HIDETIPWINDOW:
HideTipWindow();
break;
default:
break;
}
return TRUE;
}
ToolTipWindow::ToolTipWindow()
{
hostThread().AddMessageHandler(this);
hwndTip = NULL;
initTipsWindowsBywinAPI();
msgJoinMessageGroup(szToolTipWindowsGroupName, MSG_METHOD(this, ToolTipWindow::onProcessMessage));
}
ToolTipWindow::~ToolTipWindow()
{
if (hwndTip != NULL)
{
::SendMessage(hwndTip, WM_DESTROY, 0, 0);
::DestroyWindow(hwndTip);
hwndTip = NULL;
}
}
windowsAPI popup trace tip(toolTip)的更多相关文章
- [转载]ExtJs4 笔记(7) Ext.tip.ToolTip 提示
作者:李盼(Lipan)出处:[Lipan] (http://www.cnblogs.com/lipan/)版权声明:本文的版权归作者与博客园共有.转载时须注明本文的详细链接,否则作者将保留追究其法律 ...
- ExtJs4 笔记(7) Ext.tip.ToolTip 提示
本篇介绍提示控件,ExtJs支持两种方式定义提示,可以支持普通html元素和一般的ExtJs UI控件. 一.基本提示 Ext.tip.ToolTip 1.最简单的提示 下面通过代码定义一个最简单的提 ...
- Javascript - ExtJs - ToolTip组件
一个浮动的提示信息组件…… Ext, //可选 指定箭头的位置 anchor: 'buttom', ...
- qml 设置tooltip,Customizing ToolTip
Button { id: btn text: "Tip" anchors.horizontalCenter: pa ...
- jQuery Plugin Poshy Tip 使用 统一提示信息
项目到了后期,发现前端的提示信息不统一,解决思路如下: 1.回顾系统中tip出现的场景:表单验证提示信息.数据列表中随填随显 2.确定问题域:多条提示信息层叠.信息显示风格不统一 3.结论:找出一款合 ...
- Bootstrap Tooltip源码分析
/* ======================================================================== * Bootstrap: tooltip.js ...
- WPF drag过程中显示ToolTip.
原文:WPF drag过程中显示ToolTip. 在drag/drop过程中,我们在判断出over的元素上是否可以接受drag的东西之后,通常是通过鼠标的样式简单告诉用户这个元素不接受现在drag的内 ...
- 基于jsp+servlet图书管理系统之后台万能模板
前奏: 刚开始接触博客园写博客,就是写写平时学的基础知识,慢慢发现大神写的博客思路很清晰,知识很丰富,非常又价值,反思自己写的,顿时感觉非常low,有相当长一段时间没有分享自己的知识.于是静下心来钻研 ...
- ExtJs4之Grid详细
ExtJs博客前奏 由于这段时间事情比较杂乱,博客就主要以项目中例子来说明编写. ExtJs4中的Grid非常强大,有展示,选中,搜索,排序,编辑,拖拽等基本功能,这篇博客我就这几个功能做写累述. 1 ...
随机推荐
- 开发技巧-Java通过HttpProxy实现穿越
需求描述 在正常的项目开发需求中,连接远程服务器的场景一般有二: 1 自家实现的http服务器,api接口都已经约定好: 2 开发平台服务,通常如新浪.百度云等平台提供的r ...
- 034. asp.netWeb用户控件之三通过用户控件实现用户注册和登录
用户控件login.ascx代码: <%@ Control Language="C#" AutoEventWireup="true" CodeFile=& ...
- [转]SQLServer2008日志文件无法收缩处理方法
问题描述 发现有的数据库日志文件太大,无论如何收缩执行几次SQL语句都不行.事务日志达30+G,而且使用常规的截断.收缩方法均无法减小日志物理文件的尺寸,经过一番寻找,终于找到了解决方法. 查 ...
- Nim游戏变种——取纽扣游戏
(2017腾讯实习生校招笔试题)Calvin和David正在玩取纽扣游戏,桌上一共有16个纽扣,两人轮流来取纽扣,每人每次可以选择取1个或3个或6个(不允许不取),谁取完最后的纽扣谁赢.Cavin和D ...
- bzoj1837: [CROATIAN2009]cavli 凸包1
Description 给你N个点,请循环完成下列任务 1:求出这N个点的凸包的面积 2:拿掉最左或最右或最上或最下的一个点,当点的个数不足三个时停止 Input 第一行,一个数字N 接下来N行,每行 ...
- Objective-C中的@property和@synthesize用法
@代表“Objective-C”的标志,证明您正在使用Objective-C语言 Objective-C语言关键词,@property与@synthesize配对使用. 功能:让编译好器自动编写一个与 ...
- Aspose.Words 的使用 Aspose.Total_for_.NET
最近在做有个业务需要Word做好模版,数据库取出业务数据在写入Word模版里面,然后生成PDF给客户端的业务人员 之前找了半天,没有找到用微软的Microsoft.Office.Interop.Wor ...
- 移动端UC浏览器和QQ浏览器的部分私有meta属性
UC浏览器 1.设置屏幕横屏还是竖屏 <meta name="screen-orientation" content="portrait | landscape&q ...
- java 代码判断图片格式后缀名称
/** * 图片判断 */ private static String getFormatName(Object o) { try { // Create an image input stream ...
- 【转】对抗拖库 ―― Web 前端慢加密
0×00 前言 天下武功,唯快不破.但密码加密不同.算法越快,越容易破. 0×01 暴力破解 密码破解,就是把加密后的密码还原成明文密码.似乎有不少方法,但最终都得走一条路:暴力穷举.也许你会说还可以 ...