网站导航免费论文 原创论文 论文搜索 原创论文 网学软件 学术大家 资料中心 会员中心 问题解答 原创论文 论文素材 设计下载 最新论文 下载排行 论文上传 在线投稿 联系我们
返回网学首页
网学联系
最新论文 推荐专题 热门论文 素材专题
当前位置: 网学 > 编程文档 > VC++ > 正文
VC中给树形控件的图标加上工具提示
来源:Http://myeducs.cn 联系QQ:点击这里给我发消息 作者: 用户投稿 来源: 网络 发布时间: 12/10/15
下载{$ArticleTitle}原创论文样式

我从没有在任何一个应用程序中看到过图标的工具提示。有时候查遍了整个帮助
文档也没有明白某个图标是什么意思。如果能在自己的程序中为图标加上工具提
示,一定会使界面的友好性大大增加。本文中以树形控件为例,详细介绍了在VC
中使用MFC提供的机制来实现图标工具提示的方法。

---- 第一步:使控件可以显示工具提示

---- 调用EnableToolTips(TRUE)使一个窗口可以显示工具提示。在什么地方插入
这条代码最好呢?在类的PreSubclassWindow()中。因为不管一个控件如何被创建
,MFC都会调用此函数。而其他的函数则不一定会被调用。以OnCreate()为例,如
果调用Create()或CreateEx()创建一个控件,OnCreate()会被调用,而如果一个
控件是从对话框资源创建,OnCreate()就不会被调用。

实现代码如下:
void CTreeCtrlX::PreSubclassWindow()
{
CTreeCtrl::PreSubclassWindow();

EnableToolTips(TRUE);
}

---- 第二步:重载虚函数OnToolHitTest()
---- MFC调用函数来确定在某个点是否应该显示工具提示。MSDN建议如果鼠标落
在应该显示工具提示的点上,返回值1。这并不完全正确。这个函数应该返回不同
的值来区分窗口中不同的应该显示提示的区域。

---- 在这个函数中,本文只处理鼠标落在节点图标或节点状态图标上的情况。读
者可以按照自己的情况向树的其他元素上添加工具提示。在两种情况下,都要计
算图标的区域,并且把TOOLINFO的uID设为鼠标所在点的树节点的句柄。注意,尽
管对于节点图标和节点状态图标,使用了相同的id,但返回值并不相同。不同的
返回值迫使MFC更新工具提示。

---- 虽然我们可以在此函数中给出工具提示,但因为鼠标的每次移动都会调用此
函数,太多的处理并不是一个好注意,所以我们在其他的函数中处理应该显示什
么提示的问题

类声明中的代码如下所示:
// Overrides
// ClassWizard generated
virtual function overrides
//{{AFX_VIRTUAL(CTreeCtrlX)
protected:

virtual int OnToolHitTest
( CPoint point, TOOLINFO* pTI ) const;
//}}AFX_VIRTUAL

实现代码如下所示:
int CTreeCtrlX::OnToolHitTest
(CPoint point, TOOLINFO * pTI) const
{
RECT rect;

UINT nFlags;
HTREEITEM hitem = HitTest( point, &nFlags );
if( nFlags & TVHT_ONITEMICON )
{
CImageList *pImg = GetImageList( TVSIL_NORMAL );
IMAGEINFO imageinfo;
pImg- >GetImageInfo( 0, &imageinfo );

GetItemRect( hitem, &rect, TRUE );
rect.right = rect.left - 2;
rect.left -= (imageinfo.rcImage.right + 2);

pTI- >hwnd = m_hWnd;
pTI- >uId = (UINT)hitem;
pTI- >lpszText = LPSTR_TEXTCALLBACK;
pTI- >rect = rect;
return pTI- >uId;
}
else if( nFlags & TVHT_ONITEMSTATEICON )
{
CImageList *pImg = GetImageList( TVSIL_NORMAL );
IMAGEINFO imageinfo;
pImg- >GetImageInfo( 0, &imageinfo );

GetItemRect( hitem, &rect, TRUE );
rect.right = rect.left -
(imageinfo.rcImage.right + 2);

pImg = GetImageList( TVSIL_STATE );
rect.left = rect.right - imageinfo.rcImage.right ;

pTI- >hwnd = m_hWnd;
pTI- >uId = (UINT)hitem;
pTI- >lpszText = LPSTR_TEXTCALLBACK;
pTI- >rect = rect;

// 返回与节点图标不同的值
return pTI- >uId*2;
}
return -1;
}

---- 第三步:处理TTN_NEEDTEXT消息;
---- 加入一个函数处理TTN_NEEDTEXT消息通知。当工具处理控制需要知道应该显
示什么信息时,这条消息被发出。由于上一步中我们给TOOLINFO的lpszText赋值
为LPSTR_TEXTCALLBACK,所以我们要处理这个消息VC的ClassWizard并不支持这条
消息被映射,所以只有我们自己加入这条消息的映射机制加入到MESS
  • 上一篇资讯: 提取网页所有链接
  • 网学推荐

    免费论文

    原创论文

    浏览:
    设为首页 | 加入收藏 | 论文首页 | 论文专题 | 设计下载 | 网学软件 | 论文模板 | 论文资源 | 程序设计 | 关于网学 | 站内搜索 | 网学留言 | 友情链接 | 资料中心
    版权所有 QQ:3710167 邮箱:3710167@qq.com 网学网 [Myeducs.cn] 您电脑的分辨率是 像素
    Copyright 2008-2015 myeducs.Cn www.myeducs.Cn All Rights Reserved
    湘ICP备09003080号