首页 Soft PlugIn RAN乱 Dev开发 Info资料 English WAP 留言 登陆 注册
-
Posted by Yippee | 评论(0) | 引用(0) | 阅读4128次
为LISTBOX增加TOOLTIP

      为LISTBOX增加TOOLTIP
TOOLTIP功能可以实现当光标移动于一个控件上时出现一层浮动的文字讯息,而界面制作中经常使用LISTBOX控件显示各种项目列表,有时我们希望用户鼠标在LISTBOX控件中移动的时候针对每一个项目显示不同的提示信息,使界面更加友好,。
首先,我们新建一个基于http://www.shengfang.org/对话框名为TEST的VC EXE工程文件;在对话框中添加一个LISTBOX控件,默认ID:IDC_LIST1;按下“CTRL+W”组合键,在“MFC CLASSWIZARD”中选择“MEMBER VARIABLES”属性页,在控件列表中选择IDC_LIST1,点击右侧的“ADD VARIABLE”按钮为控件添加变量:“Member variable name”输入m_list、“Category”选择“Control”,这时“Variable type”将会显示为ClistBox,确认后我们就已经为LISTBOX控件绑定了一个名为m_list的ClistBox类变量。
现在我们初始化LISTBOX控件,增加一些项目列表并且增加基本的TOOLTIP支持:
在testdlg.h文件,为CtestDlg增加变量:
CToolTipCtrl m_tooltip; //定义一个TOOTLTIP控件
在testdlg.cpp文件,在CTestDlg::OnInitDialog()事件中增加如下代码:
  m_l.AddString ("Item 1");
 m_l.AddString ("Item 2");
  m_l.AddString ("Item 3");
 m_l.AddString ("Item 4"); //在列表框中增加项目

  m_tooltip.Create(this);  //将TOOLTIP控件与父窗口绑定
  m_tooltip.Activate(TRUE); //激活TOOLTIP控件
 m_tooltip.AddTool (GetDlgItem(IDC_LIST1),"LISTBOX"); //将TOOLTIP控件与LISTBOX控件进行关联,这样当鼠标移动在LISTBOX控件时显示LISTBOX提示信息。
使用Class Wizard为CtestDlg增加PreTranslateMessage映射,在testdlg.cpp中编辑如下代码:
BOOL CTestDlg::PreTranslateMessage(MSG* pMsg)
{
  // TODO: Add your specialized code here and/or call the base class
 m_tooltip.RelayEvent(pMsg); //让TOOLTIP控件能够处理鼠标消息
  return CDialog::PreTranslateMessage(pMsg);
}
这样我们就已经为LISTBOX控件http://www.shengfang.org/增加了TOOLTIP支持,但是无论鼠标移动在哪个项目上,都是显示的“LISTBOX”提示信息,现在我们必须自己拦截LISTBOX的鼠标信息,让鼠标移动到每一个项目显示不同的提示信息。
BOOL CTestDlg::PreTranslateMessage(MSG* pMsg)
{
 // TODO: Add your specialized code here and/or call the base class
 m_tooltip.RelayEvent(pMsg);
 
 CPoint point;
 CString strTxt;
 GetCursorPos(&point); //取得当前鼠标的坐标
 if (::WindowFromPoint(point)==m_l) //从当前鼠标的坐标获得鼠标所在窗口的句柄,并判断是否为LISTBOX控件
 {
  m_l.ScreenToClient(&point); //由 于GetCursorPos函数返回的是相对于整个屏幕的坐标值,因此需要把这个坐标值转换成相对于ListBox 的坐标.
  BOOL bIn;
  int nNindex=m_l.ItemFromPoint (point  ,bIn);//从鼠标坐标获得鼠标目前所在的LISTBOX项目索引
  if (!bIn)
  {
   if (nNindex==0)
    m_tooltip.UpdateTipText("ITEM 1",GetDlgItem(IDC_LIST1) ); 
   if (nNindex==1)
    m_tooltip.UpdateTipText("ITEM 2",GetDlgItem(IDC_LIST1) );
   if (nNindex==2)
    m_tooltip.UpdateTipText("ITEM 3",GetDlgItem(IDC_LIST1) );
   if (nNindex==3)
    m_tooltip.UpdateTipText("ITEM 4",GetDlgItem(IDC_LIST1) );
   //分别判断项目索引,http://www.shengfang.org/更新对应的提示信息
   }
  else
   m_tooltip.UpdateTipText("",GetDlgItem(IDC_LIST1) );
  }

 return CDialog::PreTranslateMessage(pMsg);
}
 这样,通过增加TOOLTIP支持,拦截窗口的鼠标信息,我们就能够在LISTBOX控件中针对每一个项目作出不同的提示信息,以上代码在http://www.shengfang.org/ VC6以及WIN98/WIN2K中调试通过。


字体:

Permanant URI永久地址 http://www.shengfang.org/blog/p/listboxtooltip.php
Trackback URI引用地址 http://www.shengfang.org/blog/tb.php?tb_id=1112347227

2005年4月1日17:20星期五  [Dev开发] 追踪此文的RSS
提示:
此文还没有评论。

称呼:    登陆   注册
   不注册,但记住我的信息
邮件:
(非必须)
评论: [UBB代码帮助]
粗体 斜体 下划线 链接 水平线 引用



验证码: 请输入你看见的数字
关闭UBB      提交时自动将内容复制到剪贴板

公告





统计信息
[Yippee]||[统计]||日志:2143
在线: 9||用户: 2635 [列表]
今日:872||到访:3654657
Rss:||评论:1668

最新日志

最新评论

友情链接

日历
342009 - 0734
   1234
567891011
12131415161718
19202122232425
262728293031 

最新引用
搜索

归档

杂项
Get RSS Feed (Version 2.0)
Get Atom Feed (Version 0.3)
编码:  UTF-8