VC语言

本类阅读TOP10

·VC++ 学习笔记(二)
·用Visual C++打造IE浏览器(1)
·每个开发人员现在应该下载的十种必备工具
·教你用VC6做QQ对对碰外挂程序
·Netmsg 局域网聊天程序
·Windows消息大全
·VC++下使用ADO编写数据库程序
·VC++学习笔记(四)
·非法探取密码的原理及其防范
·怎样在VC++中访问、修改注册表

分类导航
VC语言Delphi
VB语言ASP
PerlJava
Script数据库
其他语言游戏开发
文件格式网站制作
软件工程.NET开发
Dialog中加入一个工具栏如果让它有提示信息

作者:未知 来源:月光软件站 加入时间:2005-5-13 月光软件站

工具栏一般使用在SDI或是MDI里。

如果我们在一个Dialog里新建了一个工具栏,它的提示信息可能就没有办法出来了。

主要的原因是由于我们没有为这个工具栏写提示信息的消息映射函数。

如果要增加的话。就可以这样。

1.增加一个这样的函数处理函数

afx_msg BOOL OnToolTipText( UINT id, NMHDR * pNMHDR, LRESULT * pResult );

BOOL MyDialog::OnToolTipText( UINT id, NMHDR * pNMHDR, LRESULT * pResult )
{
 ASSERT(pNMHDR->code == TTN_NEEDTEXTA || pNMHDR->code == TTN_NEEDTEXTW);
 
 // allow top level routing frame to handle the message
 if (GetRoutingFrame() != NULL)
  return FALSE;
 
 // need to handle both ANSI and UNICODE versions of the message
 TOOLTIPTEXTA* pTTTA = (TOOLTIPTEXTA*)pNMHDR;
 TOOLTIPTEXTW* pTTTW = (TOOLTIPTEXTW*)pNMHDR;
 TCHAR szFullText[256];
 CString strTipText;
 UINT_PTR nID = (UINT_PTR)pNMHDR->idFrom;
 if (pNMHDR->code == TTN_NEEDTEXTA && (pTTTA->uFlags & TTF_IDISHWND) ||
  pNMHDR->code == TTN_NEEDTEXTW && (pTTTW->uFlags & TTF_IDISHWND))
 {
  // idFrom is actually the HWND of the tool
  nID = ((UINT_PTR)(WORD)::GetDlgCtrlID((HWND)nID));
 }
 
 if (nID != 0) // will be zero on a separator
 {
  AfxLoadString((UINT)nID, szFullText);
  // this is the command id, not the button index
  AfxExtractSubString(strTipText, szFullText, 1, '\n');
 }
#ifndef _UNICODE
 if (pNMHDR->code == TTN_NEEDTEXTA)
  lstrcpyn(pTTTA->szText, strTipText,
  (sizeof(pTTTA->szText)/sizeof(pTTTA->szText[0])));
 else
 {
  int n = MultiByteToWideChar(CP_ACP, 0, strTipText, -1, pTTTW->szText,
   sizeof(pTTTW->szText)/sizeof(pTTTW->szText[0]));
  if (n > 0)
   pTTTW->szText[n-1] = 0;
 }
#else
 if (pNMHDR->code == TTN_NEEDTEXTA)
 {
  int n = WideCharToMultiByte(CP_ACP, 0, strTipText, -1,
   pTTTA->szText, sizeof(pTTTA->szText)/sizeof(pTTTA->szText[0]),
   NULL, NULL);
  if (n > 0)
   pTTTA->szText[n-1] = 0;
 }
 else
  lstrcpyn(pTTTW->szText, strTipText,
  (sizeof(pTTTW->szText)/sizeof(pTTTW->szText[0])));
#endif
 *pResult = 0;
 
 // bring the tooltip window above other popup windows
 ::SetWindowPos(pNMHDR->hwndFrom, HWND_TOP, 0, 0, 0, 0,
  SWP_NOACTIVATE|SWP_NOSIZE|SWP_NOMOVE);
 
 return TRUE;    // message was handled
}

2.增加一个头文件

#include <afxpriv.h>

3.创建消息映射

 ON_NOTIFY_EX_RANGE(TTN_NEEDTEXTW, 0, 0xFFFF, OnToolTipText)
 ON_NOTIFY_EX_RANGE(TTN_NEEDTEXTA, 0, 0xFFFF, OnToolTipText)

这样就行了。




相关文章

相关软件