编写有提示的listbox控件 2008-06-29 17:13
在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的更多相关文章
- MATLAB GUI程序设计中ListBox控件在运行期间消失的原因及解决方法
在运行期间,ListBox控件突然消失,同时给出如下错误提示: Warning: single-selection listbox control requires that Value be an ...
- c# ListBox控件
ListBox控件可以一次呈现多个项,并且语序对控件中的选项进行选择操作,ListBox类公开Items属性,它是一个集合,类型为ListBox.ObjectCollection,是ListBox的一 ...
- C# LIstbox 解决WinForm下ListBox控件“设置DataSource属性后无法修改项集合”的问题
解决WinForm下ListBox控件“设置DataSource属性后无法修改项集合”的问题 分类: winform2008-05-24 02:33 2592人阅读 评论(11) 收藏 举报 winf ...
- asp.net中的ListBox控件添加双击事件
问题:在Aspx页里的ListBox A中添加双击事件,将选中项添加到另一个ListBox B中,双击ListBox B中的选中项,删除当前选中项 页面: <asp:ListBox ID=&qu ...
- 编写可编辑的List控件
今天由于项目的需要,要编写个能编辑的List控件,即双击List控件的表项能修改其中的内容.由于MFC自带的List控件是不能编辑的,所以在网上找了下怎样编写可编辑的CListCtrl控件,基本上都是 ...
- WPF中ListBox控件在选择模式(SelectionMode)为Single时仍然出现多个Item被选中的问题
最近在学习WPF过程中使用到了ListBox控件,在使用时遇到下面的奇怪问题: 代码如下: listBox.Items.Add("绘图"); listBox.Items.Add(& ...
- MFC中Listbox控件的简单使用
MFC中listbox控件是为了显示一系列的文本,每个文本占一行. Listbox控件可以设置属性为: LBS_CHILD :(默认)子窗口 LBS_Visible :(默认)可视 LBS_M ...
- 异步方式向WPF ListBox控件中一条一条添加记录
向ListBox绑定数据源时,如果数据量过大,可能会使得程序卡死,这是就需要一条一条的向ListBox的数据源中添加记录了,下面是个小Demo: 1.前台代码,就是一个ListBox控件 <Wi ...
- asp.net Listbox控件用法
2008-02-18 19:56 来源: 作者: ListBox(列表框)控件可以显示一组项目的列表,用户可以根据需要从中选择一个或多个选项.列表框可以为用户提供所有选项的列表.虽然也可设置列表框为多 ...
随机推荐
- 浅谈Python中的深浅拷贝的区别
深.浅拷贝总结 深拷贝 拷贝可变数据类型,如列表容器: a = [1, 2, [3, 4]] b = copy.deepcopy(a) a 与 b 所指的列表容器的空间地址不一致,即 id(a) != ...
- 一起学Blazor WebAssembly 开发(1)
最近blazor的WebAssembly 正式版出来了,正好手头有一个项目采用的前后端分离模式做的,后端用的abp vnext(.net core 的一个很著名的框架)框架开发的,其实前端之前考虑的使 ...
- blog only to u
2020/7/16 属于我的第一个博客正式上线,以后我将在此更新我的笔记和我的知识积累还有我那阔爱的小仙女!
- ath10k MAC地址
使用openwrt下ath10k驱动QCA9880修改其MAC地址方式 1. 使用artGUI修改9880寄存器方法(该方法有严重后遗症,目前还没有找到修改回去的方法) 2. 使用preinit修改其 ...
- 监督学习-KNN最邻近分类算法
分类(Classification)指的是从数据中选出已经分好类的训练集,在该训练集上运用数据挖掘分类的技术建立分类模型,从而对没有分类的数据进行分类的分析方法. 分类问题的应用场景:用于将事物打上一 ...
- Java 匿名对象、内部类
一.匿名对象 1.概念 匿名对象是指创建对象时,只有创建对象的语句,却没有把对象地址值赋值给某个变量. public class Person{ public void eat(){ System.o ...
- 关于android的监听器
import androidx.appcompat.app.AppCompatActivity; import android.content.Intent; import android.os.Bu ...
- 线程_gevent实现多个视频下载及并发下载
from gevent import monkey import gevent import urllib.request #有IO操作时,使用patch_all自动切换 monkey.patch_a ...
- 10-9 重要的内置函数(zip、filter、map、sorted)
reverse----reversed l = [1,2,3,4,5,6] l.reverse() #不会保留原列表 print(l) l =[1,2,3,4,5,6] l2 = reversed(l ...
- PHP array_push() 函数
实例 向数组尾部插入 "blue" 和 "yellow": <?php$a=array("red","green" ...