返回首页


简介
当我张贴了一篇文章,讨论的主题放置,丹尼尔卡明斯基指出,不显示工具提示。
所以我坐了下来,并放置在我的对话框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,只是仅举几例?快乐的复制和粘贴。

回答

评论会员:loverc 时间:2011/11/29
当我尝试下载的演示代码,我觉得我只得到净页面。
我怎样才能获得的演示?
提前感谢!

热爱生活的
评论会员:zilnus 时间:2011/11/29
您好,感谢您的意见,但是这个代码没有在我的childframe工作。你能帮助我吗?另外,为什么你放弃

SetWindowPos(pNMHDR -> hwndFrom,HWND_TOP,0,0,0,0,
SWP_NOACTIVATE | SWP_NOSIZE | SWP_NOMOVE | SWP_NOOWNERZORDER);

从你的代码吗?

我这样的代码

如果(m_wndToolBar.Create(本)| |
!m_wndToolBar.LoadToolBar(IDR_TOOLBAR_​​MAP))
{
TRACE0("未能创建工具栏\ n");
返回-1; / /未能创建
}
m_wndToolBar.SetBarStyle(m_wndToolBar.GetBarStyle()| CBRS_TOOLTIPS | CBRS_FLYBY) EnableToolTips(TRUE);
其他与旅游代码相同。谢谢。

评论会员:tododay 时间:2011/11/29
如何创建一个非矩形工具栏感谢#12290; ^ ^

今天是最后一天,所以... ...
评论会员:Tzoockee 时间:2011/11/29
您好,
我需要创建一个ActiveX控件中的一个工具栏(工具提示ofcourse)。在这种情况下,你的解决方案不起作用。我需要做任何更多的ActiveX控件,因为它是从COleControl派生?

在此先感谢,
Sarat。
评论会员:康拉德Windszus 时间:2011/11/29
创建一个ActiveX控件,您需要首先创建一个框架中的工具栏。因此,派生出一个类,从CMiniFrameWnd和框架内的创建工具栏。
评论会员:Josema 时间:2011/11/29
我有一个CDialog内的工具栏。这CDialog的是一个孩子一个CFormView。工具提示正常工作,但在状态,我想有相应的文字,也
我该怎么办呢?
到目前为止,在状态栏中,只有文本工具栏的ID显示,但不关于工具栏上的单一按钮的文本。任何提示,在法状态栏文字信息处理呢?

在此先感谢,
康拉德
评论会员:Josema 时间:2011/11/29
非常有趣的了解MFC的内部
我在这样的小问题。我在我的CMDIChildWnd的方式插入一个字符串表中的工具栏的"状态栏字符串\ ntooltip字符串",状态栏文本正确显示,但工具提示没有。你知不知道我能做些什么呢?
评论会员:igor1960 时间:2011/11/29
。好了,我不敢肯定,是否我可以帮你
首先,你检查你的CMDIChildWnd创造?
其次,你禁用工具提示,即调用EnableToolTips(假)
的提示和工具共享相同的ID?

你看,很多的问题。

关于

G. Steudtel
评论会员:igor1960 时间:2011/11/29
我发现问题出在哪里

我的框架窗口正确的,但我在CView窗口覆盖
OnToolTipNotify消息,因为我从文件中获得的工具提示文本,
根据选择languaje。这工作得很好,我对所有的控制
在视图中。

所以,我当我看到消息到达OnToolTipNotify功能
把正确的ID工具栏鼠标。在这种情况下,我
返回FALSE(文档中说,这意味着"信息处理"),但
消息不自动传播到框架窗口。

你有什么建议吗?{B​​R}
感谢

评论会员:Nishant小号 时间:2011/11/29
您好,
尝试一个CMyDerivedVersionOfFrameWindow:OnTooltipNotify (....)?{ BR}
G. Steudtel
评论会员:armentage 时间:2011/11/29
为什么不直接使用CFrameWnd的... ...与CFormView的???...