ToolTip p = new ToolTip()
p.ShowAlways = true
p.SetToolTip(this.button1, "要显示的文字")
不懂再问。。。
前提:自定义button类 classMyButton : publicCBitmapButton假设自定义button类名为:mybutton 可以在类中加入成员变量 CToolTipCtrl m_ToolTip然后重载 PreSubClass(), PreTranslateMessage() 最后加入成员函数 SetToolTipText() 具体实现如下: mybutton.h classMyButton : publicCBitmapButton { ...... protected: static CToolTipCtrl m_ToolTip...... public: //set tooltip virtualvoidPreSubclassWindow()virtualBOOLPreTranslateMessage(MSG* pMsg)void SetToolTipText(LPCTSTR lpszToolTipText)..... }mybutton.cpp //CToolTipCtrl mybutton::m_ToolTipvoid mybutton::PreSubclassWindow() { if(!m_ToolTip.GetSafeHwnd()) m_ToolTip.Create(this)m_ToolTip.AddTool(this)CButton::PreSubclassWindow()} BOOL mybutton::PreTranslateMessage(MSG* pMsg) { m_ToolTip.RelayEvent(pMsg)return CButton::PreTranslateMessage(pMsg)} void mybutton::SetToolTipText(LPCTSTR lpszToolTipText) { m_ToolTip.UpdateTipText(lpszToolTipText, this)} 例如在一个dlg中设置button的tooltip,则实现如下:xxxDlg.h 中#include "MyButton.h" protected: MyButton m_btnTestxxxDlg.cpp 中BOOLxxxDlg::OnInitDialog(){ CDialog::OnInitDialog()。。。。。。。。。。m_btnTest.SetToolTipText(L"Test")。。。。。。。。。returnTRUE} 使用上面的方法,在普通dialog上是好使的,但是如果在ActiveX控件内的Button上使用,还要多加一些代码。1.上面的方法中不用重载PreTranslateMessage(),因为在ActiveX控件中根本就不会执行这个函数。2.在自定义的Button类中添加OnMouseMove事件处理函数。然后在OnMouseMove函数中生成一个MSG对象,然后调用m_ToolTip.RelayEvent(&pMsg)代码如下:MyButton.h 中//添加函数声明afx_msgvoidOnMouseMove(UINTnFlags, CPointpoint)MyButton.cpp 中 BEGIN_MESSAGE_MAP(MyButton, CBitmapButton) //添加OnMouseMove事件触发 ON_WM_MOUSEMOVE()END_MESSAGE_MAP() //添加OnMouseMove函数定义voidMyButton::OnMouseMove(UINTnFlags, CPointpoint) { // TODO: Add your message handler code here and/or call default if (m_ToolTip.m_hWnd != NULL) { //构造一个MSG MSG msgmsg.hwnd = m_hWndmsg.message = WM_MOUSEMOVEmsg.wParam = LOWORD(point.x)msg.lParam = LOWORD(point.y)msg.time = 0msg.pt.x = LOWORD(point.y)msg.pt.y = HIWORD(point.y)m_ToolTip.RelayEvent(&msg)} CBitmapButton::OnMouseMove(nFlags, point)} OK,大功告成,写一个程序,调用这个ActiveX控件,ToolTip一下就出来了。欢迎分享,转载请注明来源:内存溢出
评论列表(0条)