非 CFrameWnd 派生的窗口中的工具提示
来源:百度文库 编辑:神马文学网 时间:2024/07/07 07:57:57
本系列文章介绍如何为包含在不是 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 CodeBOOL 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 Codetypedef 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 成员。