tooltip的触发问题。

baiyizhujian 2010-07-17 10:06:54


BOOL CTestDlg::PreTranslateMessage(MSG* pMsg)
{

// TODO: Add your specialized code here and/or call the base class
if ( pMsg-> message==WM_KEYDOWN&&pMsg-> wParam==87)
{
if( GetFocus() == GetDlgItem(IDC_EDIT2))
// AfxMessageBox("w字符不能输入");
{

//m_tt.RelayEvent(pMsg);怎么去调用tooltip的显示
}
//检测到特殊字符直接返回
return TRUE;
}

return CDialog::PreTranslateMessage(pMsg);
}

BOOL CTestDlg::OnInitDialog()
{
CDialog::OnInitDialog();
EnableToolTips(TRUE);
m_tt.Create(this);
m_tt.Activate(TRUE);

CWnd* pW=GetDlgItem(IDC_EDIT2);//得到窗口指针
m_tt.AddTool(pW,"w字符不能输入");//添加
m_tt.SetTipTextColor(RGB(0,0,255));
m_tt.SetDelayTime(500);
// m_tt.SetToolInfo(TTF_SUBCLASS );
UpdateData(TRUE);

// TODO: Add extra initialization here

return TRUE; // return TRUE unle



本人想在edit控件中检测到特殊字符,只要一检测到那个特殊字符,想弹出tooltip的提示信息。
但是tooltip好像是响应鼠标消息的。大家有什么好的办法?是否添加自定义消息改写tooltip?
或者大家有其他的什么思路?
...全文
773 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
_JeffreyWu 2010-07-20
  • 打赏
  • 举报
回复
ShowWindow(SW_SHOW)不行吗?
我看CToolTipCtrl是从CWnd继承过来的
你试试
zamesking 2010-07-20
  • 打赏
  • 举报
回复
没有反应了?
zamesking 2010-07-18
  • 打赏
  • 举报
回复
MFC用的比较少,我的思路如下,仅供参考:

1. tooltip 如果只响应鼠标消息的话,你可以通过设置鼠标的位置 SetCursorPosition 把鼠标移动到TextBox上面。那么tooltip就会响应。 通过如果你可以通过SendMessage发送个MouseOver的消息到指定的TextBox上面也可以。
2. .NET里面的tooltip 可以编程去主动显示。 比如在TextChanged事件的处理方法中,调用showtooltip方法,因此你可以考虑 写一个winform的控件,然后嵌入到你的MFC 窗体里面。

3. 自己写个扩展 实现 类似showtooltip的方法。

/////////////////////////////////////////////////////////////////////////////
// Copyright:
// Uwe Kotyczka < XXXX@XXXXX.COM >
// created: April 2004
//
// based on a sample of
// Zarembo Maxim < XXXX@XXXXX.COM >
//
/////////////////////////////////////////////////////////////////////////////
// ToolTipExtra.h : Header-Datei
//
/////////////////////////////////////////////////////////////////////////////

#if !defined(AFX_TOOLTIPEXTRA_H__4F97955F_DC40_4273_B33E_A4E6673C4656__INCLUDED_)
#define AFX_TOOLTIPEXTRA_H__4F97955F_DC40_4273_B33E_A4E6673C4656__INCLUDED_

#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000

/////////////////////////////////////////////////////////////////////////////
// Fenster CToolTipExtra

class AFX_EXT_CLASS_SPECIAL CToolTipExtra : public CWnd
{
// Konstruktion
public:
CToolTipExtra();

// Attribute
protected:
CWnd* m_pParent;
TOOLINFO m_ti;
CString m_strText;

// Operationen
public:

// erschreibungen
// Vom Klassen-Assistenten generierte virtuelle
Funktionserschreibungen
//{{AFX_VIRTUAL(CToolTipExtra)
//}}AFX_VIRTUAL

// Implementierung
protected:
void ShowTip(const POINT& pt);
public:
void ShowTip(const POINT& pt, LPCTSTR lpszText);
void ShowTip(const POINT& pt, UINT nID);
void HideTip();
void PreSetParent(CWnd* pParent);
virtual ~CToolTipExtra();

// Generierte Nachrichtenzuordnungsfunktionen
protected:
//{{AFX_MSG(CToolTipExtra)
// HINWEIS - Der Klassen-Assistent ft hier Member-Funktionen ein
und entfernt diese.
//}}AFX_MSG
DECLARE_MESSAGE_MAP()
};

/////////////////////////////////////////////////////////////////////////////

//{{AFX_INSERT_LOCATION}}
// Microsoft Visual C++ ft unmittelbar vor der vorhergehenden Zeile
zuszliche Deklarationen ein.

#endif // AFX_TOOLTIPEXTRA_H__4F97955F_DC40_4273_B33E_A4E6673C4656__INCLUDED_




/////////////////////////////////////////////////////////////////////////////
// Copyright:
// Uwe Kotyczka < XXXX@XXXXX.COM >
// created: April 2004
//
// based on a sample of
// Zarembo Maxim < XXXX@XXXXX.COM >
//
/////////////////////////////////////////////////////////////////////////////
// ToolTipExtra.cpp: Implementierungsdatei
//

#include "StdAfx.h"
#include "ToolTipExtra.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

/////////////////////////////////////////////////////////////////////////////
// CToolTipExtra

CToolTipExtra::CToolTipExtra()
{
m_pParent = NULL;
}

CToolTipExtra::~CToolTipExtra()
{
}


BEGIN_MESSAGE_MAP(CToolTipExtra, CWnd)
//{{AFX_MSG_MAP(CToolTipExtra)
// HINWEIS - Der Klassen-Assistent ft hier Zuordnungsmakros ein
und entfernt diese.
//}}AFX_MSG_MAP
END_MESSAGE_MAP()


/////////////////////////////////////////////////////////////////////////////
// Behandlungsroutinen f Nachrichten CToolTipExtra

void CToolTipExtra::ShowTip(const POINT& pt)
{
// create a tooltip window
if (!IsWindow(m_hWnd))
{
DWORD dwStyle = TTS_ALWAYSTIP;

ASSERT(m_pParent == NULL || IsWindow(m_pParent->GetSafeHwnd()));
if (IsWindow(m_pParent->GetSafeHwnd()))
dwStyle |= WS_CHILD;

VERIFY(CreateEx(WS_EX_TOPMOST, TOOLTIPS_CLASS, NULL, dwStyle,
CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT,
m_pParent->GetSafeHwnd(), NULL, NULL));
}

// initialize members of the TOOLINFO structure
m_ti.cbSize = sizeof(TOOLINFO);
m_ti.uFlags = TTF_TRACK;
m_ti.hwnd = NULL;
/*if (AfxIsValidString(lpszText))*/
m_ti.hinst = NULL;
m_ti.uId = 0;
m_ti.lpszText = (LPTSTR)(LPCTSTR)m_strText;

// tooltip control will cover the whole window
m_ti.rect.left = 0;
m_ti.rect.top = 0;
m_ti.rect.right = 0;
m_ti.rect.bottom = 0;

if (IsWindow(m_hWnd))
{
// send an TTM_ADDTOOL message to the tooltip control window
::SendMessage(m_hWnd, TTM_ADDTOOL, 0, (LPARAM)&m_ti);

// multiline support
::SendMessage(m_hWnd, TTM_SETMAXTIPWIDTH, 0, SHRT_MAX);

::SendMessage(m_hWnd, TTM_TRACKPOSITION, 0, (LPARAM)MAKELONG(pt.x,
pt.y));
::SendMessage(m_hWnd, TTM_TRACKACTIVATE, TRUE, (LPARAM)&m_ti);
}
}

void CToolTipExtra::ShowTip(const POINT& pt, LPCTSTR lpszText)
{
m_strText = lpszText;
ShowTip(pt);
}

void CToolTipExtra::ShowTip(const POINT& pt, UINT nIDText)
{
// This would restrict the tooltip to 80 characters.
/*m_ti.hinst = AfxFindResourceHandle(MAKEINTRESOURCE((nIDText>>4)+1),
RT_STRING);
ASSERT(m_ti.hinst != NULL);

ShowTip(pt, MAKEINTRESOURCE(nIDText));*/

m_strText.LoadString(nIDText);
ShowTip(pt);
}

void CToolTipExtra::HideTip()
{
if (IsWindow(m_hWnd))
{
::SendMessage(m_hWnd, TTM_TRACKACTIVATE, FALSE, (LPARAM)&m_ti);

// send an TTM_DELTOOL message to the tooltip control window
::SendMessage(m_hWnd, TTM_DELTOOL, 0, (LPARAM)&m_ti);
}
}

void CToolTipExtra::PreSetParent(CWnd* pParent)
{
ASSERT(pParent == NULL || IsWindow(pParent->GetSafeHwnd()));
m_pParent = pParent;
}



代码From:http://www.mofeel.net/958-microsoft-public-vc-mfc/19708.aspx

4.自己做个自定义的 窗体模仿tooltip,用个定时器 检查 有没有特殊字符,并决定是否显示tooltip,也就是你自定义的窗体。

baiyizhujian 2010-07-18
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 fishion 的回复:]
你还是自己添加一个控件或者窗口来表示成一个tooltip吧,这样比较好控制
[/Quote]

你的意思是 自己 写一个 形如tooptip的东西?
fishion 2010-07-18
  • 打赏
  • 举报
回复
你还是自己添加一个控件或者窗口来表示成一个tooltip吧,这样比较好控制

15,978

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 界面
社区管理员
  • 界面
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧