非 CFrameWnd 派生的窗口中的工具提示

来源:百度文库 编辑:神马文学网 时间:2024/07/07 07:57:57
非 CFrameWnd 派生的窗口中的工具提示Visual C++ 概念:添加功能非 CFrameWnd 派生的窗口中的工具提示

本系列文章介绍如何为包含在不是 CFrameWnd 派生的窗口中的控件启用工具提示。文章工具栏工具提示提供关于 CFrameWnd 中的控件的工具提示信息。

本系列文章涉及的主题包括:

  • 启用工具提示
  • 处理工具提示的 TTN_NEEDTEXT 通知
  • TOOLTIPTEXT 结构

对于包含在 CFrameWnd 派生的父窗口中的按钮或其他控件,工具提示自动显示。这是因为 CFrameWnd 有一个用于 TTN_GETDISPINFO 通知的默认处理程序,该程序处理来自与控件关联的工具提示 (ToolTip) 控件的 TTN_NEEDTEXT 通知。

但是,当 TTN_NEEDTEXT 通知从一个与非 CFrameWnd 窗口中的控件(如对话框或者窗体视图上的控件)关联的工具提示 (ToolTip) 控件中发出时,该默认处理程序并不被调用。因此,有必要为 TTN_NEEDTEXT 通知消息提供一个处理函数,以便为子控件显示工具提示。

由 CWnd::EnableToolTips 为窗口提供的默认工具提示并不包含与窗口关联的文本。为检索要显示的工具提示文本,在即将显示工具提示窗口之前,TTN_NEEDTEXT 通知被发送到工具提示 (ToolTip) 控件的父窗口。如果这条消息的处理程序没有将一些值分配给 TOOLTIPTEXT 结构的 pszText 成员,工具提示将没有文本可显示。

请参见

工具提示 工具提示Visual C++ 概念:添加功能工具提示

此过程专门用于将工具提示添加到包含在 MFC 类 CFrameWnd 派生的窗口和非 CFrameWnd 派生的窗口的控件中。

您想进一步了解什么?

下列窗口中控件的工具提示:

  • 工具栏工具提示(从 CFrameWnd 派生)
  • Windows 中不是从 CFrameWnd 派生的工具提示

请参见

添加功能 | 用户界面 处理工具提示的 TTN_NEEDTEXT 通知Visual C++ 概念:添加功能处理工具提示的 TTN_NEEDTEXT 通知

作为启用工具提示的一部分,通过向所有者窗口的消息映射中添加下列项来处理 TTN_NEEDTEXT 消息:

ON_NOTIFY_EX( TTN_NEEDTEXT, 0, memberFxn )
memberFxn
当此按钮需要文本时要调用的成员函数。

注意:工具提示的 ID 总是为 0。

在类定义中声明处理函数,如下所示:

BOOL CMyClass::memberFxn( UINT id, NMHDR * pTTTStruct, LRESULT * pResult );

其中的斜体参数为:

id
发出通知的控件的标识符。未使用。控件标识符取自 NMHDR 结构。
pTTTStruct
指向 NMTTDISPINFO 结构的指针。这种结构在 TOOLTIPTEXT 结构中也有进一步的讨论。
pResult
指向可以在返回之前设置的结果代码的指针。TTN_NEEDTEXT 处理程序可以忽略 pResult 参数。

以一个窗体视图通知处理程序为例:

Copy Code
BOOL CMyFormView::OnToolTipNotify( UINT id, NMHDR * pNMHDR, LRESULT * pResult );{TOOLTIPTEXT *pTTT = (TOOLTIPTEXT *)pNMHDR;UINT nID =pNMHDR->idFrom;if (pTTT->uFlags & TTF_IDISHWND){// idFrom is actually the HWND of the toolnID = ::GetDlgCtrlID((HWND)nID);if(nID){pTTT->lpszText = MAKEINTRESOURCE(nID);pTTT->hinst = AfxGetResourceHandle();return(TRUE);}}return(FALSE);}void CTestView::OnInitialUpdate(){CMyFormView::OnInitialUpdate();EnableToolTips(TRUE);}

请参见

非 CFrameWnd 派生的窗口中的工具提示 TOOLTIPTEXT 结构Visual C++ 概念:添加功能TOOLTIPTEXT 结构

当编写工具提示通知处理程序时,需要使用 TOOLTIPTEXT 结构。TOOLTIPTEXT 结构的成员有:

Copy Code
typedef struct {NMHDR     hdr;        // required for all WM_NOTIFY messagesLPTSTR    lpszText;   // see belowWCHAR     szText[80]; // buffer for tool tip textHINSTANCE hinst;      // see belowUINT      uflags;     // flag indicating how to interpret the// idFrom member of the NMHDR structure// that is included in the structure} TOOLTIPTEXT, FAR *LPTOOLTIPTEXT;
hdr
标识需要文本的工具。您在该结构中可能需要的唯一成员是控件的命令 ID。控件的命令 ID 将在 NMHDR 结构的 idFrom 成员中,通过 hdr.idFrom 语法访问。有关 NMHDR 结构成员的讨论,请参见 NMHDR
lpszText
接收工具文本的字符串地址。
szText
接收工具提示文本的缓冲区。应用程序可将文本复制到该缓冲区,以此代替指定字符串地址。
hinst
包含将用作工具提示文本的字符串资源的实例句柄。如果 lpszText 是工具提示文本的地址,则该成员为 NULL

当处理 TTN_NEEDTEXT 通知消息时,指定将以下列几种方式之一显示的字符串:

  • 将文本复制到 szText 成员指定的缓冲区。
  • 将包含文本的缓冲区的地址复制到 lpszText 成员。
  • 将字符串资源的标识符复制到 lpszText 成员,并将包含资源的实例句柄复制到 hinst 成员。