WIN32SDK自绘Tooltip
支持文字和图片穿插,可设置位,置字体颜色,字体,背景色
效果图:
用法你懂的。
看源码吧,注释里写的很清楚:
函数Polygon(...)使用参数轮廓点示意图
******************************************************************************************
tipinfo.class.h文件
******************************************************************************************//
// 信息提示类--cTooltip
//
#pragma once
#include "stdafx.h"
#include "main.h"
// 提示信息数据类型
#define TIPINFO_DATATYPE_TXT 0
#define TIPINFO_DATATYPE_BMP 1
/*
* 数据原型
*/
class INFODATA{
public:
INFODATA(unsigned dataid) :m_dataid(dataid) {}
virtual int getid() = 0;
// 友元声明
friend bool operator == (const INFODATA&, const INFODATA&);
friend bool operator != (const INFODATA&, const INFODATA&);
protected:
// 数据类型
// 0: bmp
// 1: txt
unsigned m_dataid;
};
/*
* INFODATA 的 == 重载
*/
inline bool operator == (const INFODATA &a, const INFODATA &b)
{ return a.m_dataid == b.m_dataid; }
/*
* INFODATA 的 != 重载
*/
inline bool operator != (const INFODATA &a, const INFODATA &b)
{ return a.m_dataid != b.m_dataid; }
/*
* 图像提示信息
*/
class INFOBMP :public INFODATA {
public:
struct BMPDATA{
HBITMAP bmp;
int destw, desth;
int srcw, srch;
};
public:
/*
* @bmp: 位图句柄
* @destw: 希望图像显示的宽度
* @desth: 希望图像显示的高度
* @srcw: 原始宽度
* @srch: 原始高度
* 注意:如果 w 或 h 一者为0将显示为一个字体方块哦尺寸(和一个汉字一样大小)
*/
INFOBMP(HBITMAP bmp, int destw = 0, int desth = 0, int srcw = 0, int srch = 0)
:INFODATA(TIPINFO_DATATYPE_BMP), m_bmp(BMPDATA{ bmp, destw, desth , srcw, srch})
{}
public:
int getid() { return m_dataid; } // 返回数据类型
BMPDATA getbmp() { return m_bmp; } // 返回数据
BMPDATA m_bmp; // 图像数据
};
/*
* 文本提示信息
*/
class INFOTXT :public INFODATA {
public:
INFOTXT(char* txt)
:INFODATA(TIPINFO_DATATYPE_TXT)
, m_txt(txt)
{
m_size = strlen(txt);
}
public:
int getid() { return m_dataid; } // 返回数据类型
char* m_txt; // 文本数据
int m_size;
};
/*
* 提示信息
* vector<INFODATA*>的数组
* 为了断行方便每行数据(图片,文本)放到同一个数组vector<INFODATA*>之中
*/
struct TIPINFO{
public:
vector<vector<INFODATA*>> m_infos;
};
******************************************************************************************
tooltip.class.cpp文件
//
// 信息数据类--cTooltip
//
#include "stdafx.h"
#include "main.h"
#include "tipinfo.class.h"
******************************************************************************************
tooltip.class.h文件
******************************************************************************************
//
// 信息提示类--cTooltip
//
// <cTooltip class>
// 提示信息类,通过气泡形状圆角窗口显示包括文本和图片的提示信息
//
// <总览>
// 方法:bool lock() 锁定提示信息(只有提示信息锁定之后下列所有函数的操作才会有效)
// 当前类调用 lock 会将会将上一个调用过lock函数的提示信息类改变为未锁定状态,
// 即:同一时刻只能有一个提示信息类处于锁定状态
// 方法:bool unlock() 解锁提示信息
// 方法:bool settipinfo(TIPINFO tipinfo) 设置提示信息的内容
// 方法:bool setshowposition(unsigned sp) 设置提示信息窗口相对于"父窗口(注释1)"的
// 相对位置,避免遮挡或提示信息窗口显示在桌面以外的位置。
// 方法:bool setshowposition(POINT ltanchor) 指定锚点坐标
// 方法:bool showtip(HWND hparent, bool isshow) 显示或者隐藏提示信息窗口
// 方法:bool setbkcolor(COLORREF color) 设置背景颜色,默认为RGB(45. 45, 45)
// 方法:bool settxtcolor(COLORREF color) 设置字体颜色,默认为RGB(150, 150, 150)
// 方法:bool setoutlinecolor(COLORREF color) 设置轮廓颜色
// 方法:bool setfont(HFONT font) 设置字体,默认使用CreateFont(12, 6, 0, 0, 500,
// 0, 0, 0, GB2312_CHARSET, 0, 0, 0, 0, "新宋体")参数
//
// 效果示例:
//
#pragma once
#include "stdafx.h"
#include "main.h"
#include "tipinfo.class.h"
#pragma region 自定义消息
// 锁定提示信息
// @wparam: cTooltip指针
#define WMAPP_TT_LOCK (WM_APP + 2)
// 解锁
#define WMAPP_TT_UUNLOCK (WM_APP + 3)
// 显示隐藏 tooltip 消息
#define WMAPP_TT_SHOW (WM_APP + 4)
#define WMAPP_TT_HIDE (WM_APP + 5)
#pragma endregion 自定义消息
// 显示位置宏
#define SP_LEFT 0 // 左
#define SP_RIGHT 1 // 右
#define SP_TOP 2 // 上
#define SP_BOTTOM 3 // 下
/*
* 信息提示类
*/
class cTooltip{
public:
cTooltip(TIPINFO tipinfo, HWND hparent);
~cTooltip() { this->__release(); }
public:
bool lock(); // 锁定提示信息
bool unlock(); // 解锁提示信息
bool settipinfo(TIPINFO tipinfo); // 设置提示信息
bool setshowposition(unsigned sp); // 设置显示位置(相对于父窗口来说)
bool setshowposition(POINT ltanchor); // 指定锚点坐标
bool showtip(HWND hparent, b