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 ...
随机推荐
- Python copy and deepcopy
Python中的对象之间赋值时是按引用传递的,如果需要拷贝对象,需要使用标准库中的copy模块. 1. copy.copy 浅拷贝 只拷贝父对象,不会拷贝对象的内部的子对象. 2. copy.deep ...
- 转载:使用命令行启动VirtualBox虚拟机
使用命令行启动VirtualBox虚拟机 装上VirtualBox就琢磨着如何让它开机自动启动,又或者能够通过命令行的形式直接启动指定的虚拟机. 看了下VirtualBox的官方文档,发现有一个命令可 ...
- 4、java中有专门的的函数对数组进行排序
在java.util包中的Arrays提供了众多的排序算法可以应用.
- [cross compile]cygwin和mingw
转自:http://blog.csdn.net/embededvc/article/details/6829010 1. MinGW和CygWin/gcc概念 Unix下编译通过的C代码,在win32 ...
- mfc_Demo
内涵图
- VS2010快捷键大全
VS2010版快捷键 Ctrl+E,D ----格式化全部代码 Ctrl+E,F ----格式化选中的代码 CTRL + SHIFT + B生成解决方案 CTRL + F7 生成编译 CTRL + O ...
- 初识C++的类
//Sales_item.h#ifndef SALESITEM_H #define SALESITEM_H #include <iostream> #include<string&g ...
- Unity3D使用Assetbundle打包加载(Prefab、场景)
之前有一篇文章中我们相惜讨论了Assetbundle的原理,如果对原理还不太了解的朋友可以看这一篇文章:Unity游戏开发使用Assetbundle加载场景的原理 本篇文章我们将说说assetbund ...
- 每天一个 Linux 命令(7):mv命令
mv命令是move的缩写,可以用来移动文件或者将文件改名(move (rename) files),是Linux系统下常用的命令,经常用来备份文件或者目录. 1.命令格式: mv [选项] 源文件或目 ...
- 使用jQuery清空file文件域的解决方案(转)
对一个文件域(input type=file)使用了验证后,我们总会希望把文件域中的值给清空了,在IE中,由于安全设置的原因,是不允许更改文件域的值的(也就是不能使用val("") ...