在MFC中几乎所有的控件都有信息提示,而惟有listbox却没有这样的一个功能,每当我们把鼠标移到listbox上控件时,啥玩意儿都没有是不是很气馁啊,所以我今天特地写了一个简单的有提示的listbox控件,来实现那样的效果.

思路比较简单:我们首先构造一个自己mylistbox来继承listbox控件,然后在自己的mylistbox里添加一个ctooltipctrl控件(显示信息的载体).这样我们必须提供一个接口来创建ctooltipctrl控件.其次呢,控件创建后,它需要一个设置信息的接口.然后呢,当我们的鼠标移动时,它随着鼠标所在位置的改变,而显示不同的内容,因此它需要一个鼠标移动事件,在鼠标移动的时候进行进行信息设置.代码如下:列出了cpp文件的代码

BOOL CTipListBox::CreateToolTip()
{
    if (NULL == m_toolTipMessage)
    {
        m_toolTipMessage = new CToolTipCtrl();
        if (m_toolTipMessage->Create(this, TTS_ALWAYSTIP|TTS_NOPREFIX))
        {
            m_toolTipMessage->Activate(TRUE);
            m_toolTipMessage->SetDelayTime(100);
            m_toolTipMessage->SetMaxTipWidth(500);
            m_toolTipMessage->AddTool(this);// 帮定控件tooltip

return TRUE;
        }
    }
    return FALSE;
}

void CTipListBox::SetTipMessage(CString &message)
{
    if (message.IsEmpty())
    {
        return ;
    }

if (m_toolTipMessage->GetSafeHwnd() != NULL)
    {
        m_toolTipMessage->UpdateTipText(message, this);  // 更新要显示的字符     
    }
    else
    {
        if (CreateToolTip())
        {
            m_toolTipMessage->AddTool(this, message);
        }
    }

m_toolTipMessage->Activate(TRUE);
}

void CTipListBox::OnMouseMove(UINT nFlags, CPoint point)
{
    CPoint pt;// 当前鼠标所在位置
    GetCursorPos(&pt);
    ScreenToClient(&pt);// 转化为客户区的坐标

CRect rect;// 控件的大小
    GetClientRect(&rect);
    BOOL inout;
    CString message;

if (rect.PtInRect(pt))
    {
        int select = ItemFromPoint(pt, inout);// 鼠标所在的哪一条信息
        GetText(select, message);
        SetTipMessage(message);
    }
}

BOOL CTipListBox::PreTranslateMessage(MSG* pMsg)
{
    if (m_toolTipMessage->GetSafeHwnd() != NULL)
    {
        if (pMsg->message == WM_MOUSEMOVE)
        {
            m_toolTipMessage->RelayEvent(pMsg);
            SendMessage(WM_MOUSEMOVE);
        }
    }

return CWnd::PreTranslateMessage(pMsg);
}

编写有提示的listbox控件 2008-06-29 17:13的更多相关文章

  1. MATLAB GUI程序设计中ListBox控件在运行期间消失的原因及解决方法

    在运行期间,ListBox控件突然消失,同时给出如下错误提示: Warning: single-selection listbox control requires that Value be an ...

  2. c# ListBox控件

    ListBox控件可以一次呈现多个项,并且语序对控件中的选项进行选择操作,ListBox类公开Items属性,它是一个集合,类型为ListBox.ObjectCollection,是ListBox的一 ...

  3. C# LIstbox 解决WinForm下ListBox控件“设置DataSource属性后无法修改项集合”的问题

    解决WinForm下ListBox控件“设置DataSource属性后无法修改项集合”的问题 分类: winform2008-05-24 02:33 2592人阅读 评论(11) 收藏 举报 winf ...

  4. asp.net中的ListBox控件添加双击事件

    问题:在Aspx页里的ListBox A中添加双击事件,将选中项添加到另一个ListBox B中,双击ListBox B中的选中项,删除当前选中项 页面: <asp:ListBox ID=&qu ...

  5. 编写可编辑的List控件

    今天由于项目的需要,要编写个能编辑的List控件,即双击List控件的表项能修改其中的内容.由于MFC自带的List控件是不能编辑的,所以在网上找了下怎样编写可编辑的CListCtrl控件,基本上都是 ...

  6. WPF中ListBox控件在选择模式(SelectionMode)为Single时仍然出现多个Item被选中的问题

    最近在学习WPF过程中使用到了ListBox控件,在使用时遇到下面的奇怪问题: 代码如下: listBox.Items.Add("绘图"); listBox.Items.Add(& ...

  7. MFC中Listbox控件的简单使用

    MFC中listbox控件是为了显示一系列的文本,每个文本占一行.   Listbox控件可以设置属性为: LBS_CHILD   :(默认)子窗口 LBS_Visible :(默认)可视 LBS_M ...

  8. 异步方式向WPF ListBox控件中一条一条添加记录

    向ListBox绑定数据源时,如果数据量过大,可能会使得程序卡死,这是就需要一条一条的向ListBox的数据源中添加记录了,下面是个小Demo: 1.前台代码,就是一个ListBox控件 <Wi ...

  9. asp.net Listbox控件用法

    2008-02-18 19:56 来源: 作者: ListBox(列表框)控件可以显示一组项目的列表,用户可以根据需要从中选择一个或多个选项.列表框可以为用户提供所有选项的列表.虽然也可设置列表框为多 ...

随机推荐

  1. CentOS7上安装Hadoop

    设置sshssh-keygen -t rsa -P ''cat id_rsa.pub >> authorized_keys 查看slaves节点的id_rsa.pub文件,将文件内容复制到 ...

  2. 程序员肺被切掉一块还得去加班... 再谈“工作996,生病ICU”

    如题,为什么要说再谈“工作996,生病ICU”,因为996问题早已不是一个新问题,在我最近刚出版的新书<SOD框架“企业级”应用数据架构实战>写作期间,爆发了一次程序员“起义”,出现了一个 ...

  3. DDD之5限界上下文-定义领域边界的利器

    上图是一张普通地图,最刺眼的就是边界? 非常好奇地图绘制工程师是如何描绘如此弯曲多变的边界的?强制行政区域还是人群历史原因自然的人以群分? 我们再换个视角,对工程师或者架构师来说,微服务的边界如何划分 ...

  4. Java代码片段

    type 为Java中的任意数据类型,包括基本类型和组合类型,arrayName为数组名,必须是一个合法的标识符,[ ] 指明该变量是一个数组类型变量.例如: 这两种形式没有区别,使用效果完全一样,读 ...

  5. vue学习(十五) 过滤器简单实用

    vue过滤器: 概念:vue.js允许你自定义过滤器可被用作一些常见文本的格式化.过滤器可以用在两个地方:插值表达式   v-bind表达式  由管道符指示 //过滤器调用时候的格式 {{ name ...

  6. pycharm 退出虚拟环境

    pycharm 内置虚拟环境 venv 如果要退出就直接 deactivate 命令就行 运行的话直接在命令行输python3  文件名

  7. PHP sha1_file() 函数

    实例 计算文本文件 "test.txt" 的 SHA-1 散列: <?php高佣联盟 www.cgewang.com$filename = "test.txt&qu ...

  8. bzoj 3782 上学路线 卢卡斯定理 容斥 中国剩余定理 dp

    LINK:上学路线 从(0,0)走到(n,m)每次只能向上或者向右走 有K个点不能走求方案数,对P取模. \(1\leq N,M\leq 10^10 0\leq T\leq 200\) p=10000 ...

  9. 埋在MySQL数据库应用中的17个关键问题!

    作者:扎瓦陈序元 来源:https://blog.csdn.net/weixin_42882439 MySQL的使用非常普遍,跟MySQL有关的话题也非常多,如性能优化.高可用性.强一致性.安全.备份 ...

  10. 从SpringBoot源码分析 配置文件的加载原理和优先级

    本文从SpringBoot源码分析 配置文件的加载原理和配置文件的优先级     跟入源码之前,先提一个问题:   SpringBoot 既可以加载指定目录下的配置文件获取配置项,也可以通过启动参数( ...