在菜单条上添加泡泡提示[2]

[入库:2005年8月18日] [更新:2007年3月24日]

本文简介:选择自 woyaojinqu 的 blog

 m_htooltip = ::createwindow(tooltips_class, text(""),
        ws_popup| dwstyle,
        cw_usedefault, cw_usedefault,
        cw_usedefault, cw_usedefault,
        null, (hmenu)null, hinstance,
        null);

 // 设置控件的一些初始参数
 ti.cbsize = sizeof(toolinfo);
 ti.uflags = ttf_idishwnd | ttf_transparent | ttf_track | ttf_absolute;//ttf_centertip
 ti.hwnd   = hparent;
 ti.uid    = (uint)hparent;
 ti.hinst  = hinstance;
 ti.lpsztext  = const_cast<lptstr>(scztiptext);
 if(scztiptext != lpstr_textcallback) {
  //以下设定缺省提示文本
  if(scztiptext) {//如果当前菜单存在提示文本,则将其存放到m_szdefault
   _tcscpy(m_szdefault, scztiptext);
  }
  else {//如果不存在提示文本,则显示以下字符串
   _tcscpy(m_szdefault, _t("no text associated"));
  }
 }

 ti.rect.left = ti.rect.top = ti.rect.bottom = ti.rect.right = 0;

 //把提示添加到控件中
 ::sendmessage(m_htooltip,ttm_addtool,0,(lparam)&ti);

 ::sendmessage(m_htooltip, ttm_setmaxtipwidth, 0, 300);
 if(scztiptitle) {
  ::sendmessage(m_htooltip, ttm_settitle, 1, (lparam)scztiptitle);
 }
}

inline //以下内联函数设定在选定菜单时所做的操作
void cmenutooltip::onmenuselect(uint nitemid, uint nflags, hmenu hsubmenu)
{
 if(nflags & mf_popup
  || (nflags == 0xffff && hsubmenu == null)) { // 菜单关闭时不出现提示
  showtooltip(false);
 }

 if(!(nflags & mf_popup)) {
  
  // 设置提示的位置
  settooltipposition(hsubmenu, nitemid);

  // 更新提示的文本
  tchar szbuff[256];//定义一个存放提示文本的字符数组
  szbuff[0] = 0;
  //将指定的提示文本存放到预先设定的缓冲区中
  int nret = ::loadstring(m_hinstance, nitemid, szbuff, 256);
#if 0
  for(int i = 0; i < nret; i++)
  {
   if(szbuff[i] == _t('\n'))
   {
    szbuff[i] = 0;
    break;
   }
  }
#endif  
  //以下部分主要用于更新提示文本,否则文本是固定的
  if(szbuff[0] != 0) {
   updatetooltiptext(szbuff);
  }
  else {
   updatetooltiptext(m_szdefault);
  }
  showtooltip(true);//设定需要显示提示
 }
}

#endif _menu_tooltip
上面的注释写的比较详细了,您可以在相应的地方做修改,以更改提示的位置和内容,将上面的代码存为一个名为menutooltip.h的头文件,将其加入到您的工程当中,然后在需要处理提示信息的类的初始函数(如对话框的oninitdialog函数或者是类的构造函数)中添加如下语句:
 mymenutooltip.create(m_hwnd, _t("sample menu text"), afxgetresourcehandle()
   ,tts_noprefix | tts_balloon
   , _t("my best tool tip title")
   );
同时在相应的类中创建onmenuselect函数如下:
void cmenuitemtooltipdlg::onmenuselect(uint nitemid, uint nflags, hmenu hsubmenu)
{
 mymenutooltip.onmenuselect(nitemid, nflags, hsubmenu);
 cwnd::onmenuselect(nitemid, nflags, hsubmenu);
}
同时不要忘了加入上述头文件,并定义一个提示信息类的变量
#include "menutooltip.h"
cmenutooltip mymenutooltip;
最后在消息循环中加入on_wm_menuselect()
一切ok了。

本文关键:在菜单条上添加泡泡提示
 

本站最佳浏览方式为 分辨率 1024x768 IE 6.0(或更高版本的 IE浏览器)

go top