[C]可在任意位置弹出的BalloonTip(2)

简介: 以前写过一篇文章,是用 C# 的自绘制窗口做了一个 Balloon Tip 。这里由于讲的还是 BalloonTip ,所以作为前文的后续。不同的是,这一次是用 windows sdk 的 API  函数直接创建一个 ToolTip 窗口,然后我们就得到了 ToolTip 的窗口句柄,然后可以把 ToolTip 定位到屏幕任意的位置自然就是很简单的事。

          以前写过一篇文章,是用 C# 的自绘制窗口做了一个 Balloon Tip 。这里由于讲的还是 BalloonTip ,所以作为前文的后续。不同的是,这一次是用 windows sdk 的 API  函数直接创建一个 ToolTip 窗口,然后我们就得到了 ToolTip 的窗口句柄,然后可以把 ToolTip 定位到屏幕任意的位置自然就是很简单的事。还是借用上次演示MSN式浮出通知窗口的例子,只是加入了 ToolTip 的相关代码。效果如下:

          

 

          代码比较简单,详见附件中的tooltip.h , tooltip.c。

          创建tooltip窗口用的是 CreateWindow, 窗口类名是“Tooltips_Class32”。 第一个参数 isBalloon 指定创建 ToolTip 的形状,如果为 TRUE 则创建的是“balloon”型的 ToolTip,也就是类似卡通画里的会话气泡,则显示时的位置坐标(x,y)是气泡的箭头指向点的坐标。否则创建的是普通的矩形ToolTip,显示时的位置坐标(x,y)是ToolTip窗口的某个端点(例如左上角)的坐标。

img_1c53668bcee393edac0d7b3b3daff1ae.gif img_405b18b4b6584ae338e0f6ecaf736533.gif Code_CreateToolTip
//创建ToolTip窗口
HWND CreateToopTip(BOOL isBalloon, int maxWidth)
{
    
if (!m_hWndToolTip)
    {
        m_hWndToolTip 
= CreateWindow(
            
"Tooltips_Class32",        //TOOLTIPS_CLASS, 
            NULL,
            WS_POPUP 
| TTS_NOPREFIX | TTS_ALWAYSTIP | (isBalloon? TTS_BALLOON : 0) ,
            CW_USEDEFAULT, CW_USEDEFAULT,
            CW_USEDEFAULT, CW_USEDEFAULT,
            NULL, NULL, 
            NULL, 
//m_hInst,
            NULL);

        
if (m_hWndToolTip) 
        {
            
// set the version so we can have non buggy mouse event forwarding
            
//SendMessage(m_hWndToolTip, CCM_SETVERSION, COMCTL32_VERSION, 0);
            SendMessage(m_hWndToolTip, TTM_SETMAXTIPWIDTH, 0, (LPARAM)maxWidth);
        }
    }
    
return m_hWndToolTip;
}

 

 

          显示ToolTip时,设置标题,文本,指向位置,是通过给窗口发送属于 ToolTip 的以 “TTM_” 为前缀的消息来完成的。然后我们通过一个定时器设置ToolTip在屏幕上显示的时间。  

img_1c53668bcee393edac0d7b3b3daff1ae.gif img_405b18b4b6584ae338e0f6ecaf736533.gif Code_ShowToolTip
//弹出tooltip
void ShowToolTip(HWND hWnd, char* content, char* title, int x, int y, int icon, int mSeconds)
{
    
//获取前景窗口
    HWND m_curForeWnd = GetForegroundWindow();

    
if(!m_hWndToolTip)
    {
        
//默认情况下是balloontip
        CreateToopTip(TRUE, 300); 
    }

    
if (m_hWndToolTip)
    {
        TOOLINFO ti 
= {0};
        ti.cbSize 
= sizeof(ti);
        ti.uFlags 
= /*TTF_IDISHWND |*/  TTF_TRACK | TTF_TRANSPARENT /*| TTF_CENTERTIP*/;
        ti.hwnd 
= hWnd;
        ti.uId 
= 0;
        
//ti.lpszText = NULL;
        SendMessage(m_hWndToolTip, TTM_ADDTOOL, 0, (LPARAM)(LPTOOLINFO)&ti);
        
//隐藏tooltip
        SendMessage(m_hWndToolTip, TTM_TRACKACTIVATE, (WPARAM)FALSE, (LPARAM)0);

        
//设置文本
        ti.lpszText = content;
        SendMessage(m_hWndToolTip, TTM_UPDATETIPTEXT, 
0, (LPARAM)&ti);

        
//设置标题和icon
        SendMessage(m_hWndToolTip, TTM_SETTITLEA, icon, (LPARAM)title);

        
//设置指向位置
        SendMessage(m_hWndToolTip, TTM_TRACKPOSITION, 0, MAKELONG(x, y));

        
//set z-order
        SetWindowPos(m_hWndToolTip, HWND_TOPMOST, 0000, SWP_NOSIZE|SWP_NOMOVE);

        
//显示tooltip
        SendMessage(m_hWndToolTip, TTM_TRACKACTIVATE, (WPARAM)TRUE, (LPARAM)&ti);

        
//安装timeout定时器
        KillTimer(hWnd, TIMERID_TOOLTIP);
        
if(mSeconds > 0)
        {
            SetTimer(hWnd, TIMERID_TOOLTIP, mSeconds, (TIMERPROC)ToolTipTimerProc);
        }
    }
    
//复原前景窗口
    SetForegroundWindow(m_curForeWnd);
}

 

 

          最后是源代码下载链接(和前文下载链接一致):

          http://files.cnblogs.com/hoodlum1980/NotifyWndDemo2.rar

目录
相关文章
|
存储 前端开发 安全
webhook是什么 与API的区别在哪里
webhooks是一个api概念,是微服务api的使用范式之一,也被成为反向api,即:前端不主动发送请求,完全由后端推送。 举个常用例子,比如你的好友发了一条朋友圈,后端将这条消息推送给所有其他好友的客户端,就是 Webhooks 的典型场景。
webhook是什么 与API的区别在哪里
|
网络协议 API 开发者
Python中的会话管理:requests.Session深度解析
Python中的会话管理:requests.Session深度解析
|
SQL 存储 分布式计算
Hive学习---1、Hive入门、Hive 安装(二)
Hive学习---1、Hive入门、Hive 安装(二)
|
机器学习/深度学习 数据采集 PyTorch
机器学习 —— MNIST手写体识别(上)
机器学习 —— MNIST手写体识别
225 2
|
Python
Python中使用`requests`库进行异常处理与调试
【4月更文挑战第12天】在Python的网络编程中,使用`requests`库发送HTTP请求时,经常会遇到各种异常情况,如网络连接错误、请求超时、服务器错误等。为了确保程序的健壮性和稳定性,我们需要对这些异常进行妥善处理,并进行必要的调试。本文将详细介绍如何在Python中使用`requests`库进行异常处理与调试。
1346 2
|
UED Python
python使用 requests 设置读取超时时间
python使用 requests 设置读取超时时间
637 0
|
网络虚拟化 数据安全/隐私保护 内存技术
H3C无线接入器WA4320-ACN-SI之FIT转FAT(瘦版本转胖版本)
H3C无线接入器WA4320-ACN-SI之FIT转FAT(瘦版本转胖版本)
2019 1
H3C无线接入器WA4320-ACN-SI之FIT转FAT(瘦版本转胖版本)
|
物联网 开发工具 芯片
nrf52840开发环境搭建
nRF52840是NORDIC公司基于ARM Cortex-M4 CPU和浮点计算单元(FPU)设计的单片机,具有1MB闪存和256kB RAM。主频速率可以达到64MHz
752 0
|
XML Java 应用服务中间件
tomcat默认端口号(三个tomcat端口号)
tomcat默认端口号(三个tomcat端口号)
561 0
|
监控 NoSQL Redis
【Zabbix】Zabbix微信告警配置演示
Zabbix微信告警配置演示
838 0