简介
当我张贴了一篇文章,讨论的主题放置,丹尼尔卡明斯基指出,不显示工具提示。
所以我坐了下来,并放置在我的对话框OnInitDialog函数的线EnableToolTips()。什么我告诉你,它没有工作。每个对话和每个视图显示的工具栏,但没有工具提示,或偶尔只有很奇怪的弹出。
看看有帮助,有人说:简单地调用EnableToolTips是不够的,以显示工具提示为您的孩子控制,除非父窗口是从CFrameWnd派生。
和一个CDialog或CView的,因为不是一个CFrameWnd的后代不会得到显示的工具提示。但一个解决方案,也是在这篇文章的底部,这是我没有进一步的思考实施。它运作良好的事实,它表明是这样的:"你的鼠标悬停控制的ID 1234"的除外。这是我从来没有使用工具提示文本。因为我想要的文字,存储在所显示的工具栏的资源,我看了一下MFC本身的源代码。
这里所提供的解决方案是完全从微软的人。我唯一的创作的一部分,是复制的地方!(1)
创建一个工具栏,并将它附加到您的对话。使用常规的方法,创建一个CToolBar类型的变量... (或看源)。在创建过程期间的OnInit ...(),确保酒吧风格的标志CBRS_TOOLTIPS是set.m_wndToolBar.SetBarStyle(CBRS_ALIGN_ANY | CBRS_TOOLTIPS | CBRS_FLYBY);
然后调用EnableToolTips(TRUE);如果你现在编译,并运行应用程序,你可以看到工具提示,无法正常工作。第二步:
现在来打字的一部分。在CPP - file.ON_NOTIFY_EX_RANGE(TTN_NEEDTEXTW,0,为0xFFFF,OnToolTipNotify)创建一个消息映射项ON_NOTIFY_EX_RANGE(TTN_NEEDTEXTA,0,为0xFFFF,OnToolTipNotify)
之前END_MESSAGE_MAP()在您的对话框CPP文件或复制这两行。
根据文档,你必须创建一个TTN_NEEDTEXTW TTN_NEEDTEXTA通知入境。
在头文件中声明一个函数原型为OnToolTipNotify:AFX_MSG BOOL OnToolTipNotify(ID UINT,NMHDR * pNMHDR,LRESULT * pResult);
或复制此行之前DECLARE_MESSAGE_MAP()在您的对话框h文件。
如果你现在编译时,编译器会告诉你,它需要一个函数命名OnToolTipNotify。第3步
现在到了副本的一部分。写一个新的线在你的对话框执行文件(*. CPP):布尔CMyDlgOrView:OnToolTipNotify(UINT,NMHDR * pNMHDR,LRESULT * pResult)
打开WINFRM.CPP MFC的源代码目录。 BOOL CFrameWnd的功能齐全的身体:OnToolTipText(UINT,NMHDR * pNMHDR,LRESULT * pResult)复制并粘贴它只是写在您的对话/视图实现文件下的新线。不要编译!
我告诉你,不!添加#包括LT; afxpriv.hgt;无论是在对话框头文件或其他地方在stdafx.h的开头。因此AfxExtractSubString和AfxLoadString功能是众所周知的。在AFXISAPI.H以下几行(MFC - GT;包括源目录)#IFNDEF _countof#定义_countof(数组)(SIZEOF(数组)/ SIZEOF(数组[0]))#ENDIF
和它们粘贴到stdafx.h中。
编译和工具提示的工作。Extroduction
如果你没有访问的MFC来源,打开的演示项目的来源。我已经没有复制和粘贴。如果我理解正确的,是在文档中表示,这将任何CWnd - 窗口工作。 CDialogs一样,CViews,CStatics,CTreeCtrls,只是仅举几例?快乐的复制和粘贴。