VC++ 中 CToolTipCtrl 应用
2014-05-05 11:45
253 查看
CToolTipCtrl
class CEmisDrawView : public CScrollView
{
protected: // create from serialization only
CEmisDrawView();
DECLARE_DYNCREATE(CEmisDrawView)
CToolTipCtrl m_ToolTip;
// 。。。。
};
int CEmisDrawView::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
if (CScrollView::OnCreate(lpCreateStruct) == -1)
return -1;
m_ToolTip.Create(this,TTS_ALWAYSTIP);
m_ToolTip.AddTool(this,"eMis_Draw");
EnableToolTips(TRUE);
return 0;
}
LRESULT CEmisDrawView::WindowProc(UINT message, WPARAM wParam, LPARAM lParam)
{
if(message == WM_MOUSEMOVE)
{
MSG msg;
msg.hwnd = m_hWnd;
msg.message = message;
msg.wParam = wParam;
msg.lParam = lParam;
m_ToolTip.RelayEvent(&msg);
}
return CScrollView::WindowProc(message, wParam, lParam);
}
BOOL CEmisDrawView::PreTranslateMessage(MSG* pMsg)
{
m_ToolTip.RelayEvent(pMsg);
return CScrollView::PreTranslateMessage(pMsg);
}
在你想更改的地方加上:
m_ToolTip.UpdateTipText("new string",this);
--------------------------------------------------------
Tooltip中由一个方法叫做SetMaxTipWidth,MSDN中的描述说是设定Tips窗口的最大宽度,然后就没了。
其实这个方法是使用SDK中的TTM_SETMAXTIPWIDTH 消息,查一下这个消息的描述,就会发现很多内容。
1. 这个方法是设定Tips窗口的最大宽度,in pixel;
2. 如果文字超过这个最大宽度,则control进行自动换行,以空格为换行标志;
3. 如果无法换行(没有空格或\r\n),则显示一行,宽度超过最大宽度。
还有很重要的一点,如果没有设定过宽度,则系统默认宽度为-1,这也是没有设定宽度就不能换行的原因。
试验结果:
1. 一旦设定宽度,\r\n和空格就会同时起作用,只是空格是在一行宽度超过设定宽度时起作用的。
--------------------------------------------------------
BOOL CTest_CToolTipCtrlDlg::OnInitDialog()
{
CDialog::OnInitDialog();
// Set the icon for this dialog. The framework does this automatically
// when the application's main window is not a dialog
SetIcon(m_hIcon, TRUE); // Set big icon
SetIcon(m_hIcon, FALSE); // Set small icon
RECT rect;
rect.left = 5;
rect.right = 5;
rect.top = 5;
rect.bottom = 5;
m_objToolTip.SetMaxTipWidth(180);
m_objToolTip.SetTipBkColor( RGB(165, 203, 247) );
m_objToolTip.SetTipTextColor( RGB(0, 102, 153) );
m_objToolTip.SetMargin( &rect );
m_objToolTip.AddTool( GetDlgItem(IDOK) , "this is a common button\nnamed \"ok\"\ntest done.");
m_objToolTip.AddTool( GetDlgItem(IDCANCEL) , "this is a common button\nnamed \"cancel\"\ntest done.");
// TODO: Add extra initialization here
return TRUE; // return TRUE unless you set the focus to a control
}
CToolTipCtrl
class CEmisDrawView : public CScrollView
{
protected: // create from serialization only
CEmisDrawView();
DECLARE_DYNCREATE(CEmisDrawView)
CToolTipCtrl m_ToolTip;
// 。。。。
};
int CEmisDrawView::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
if (CScrollView::OnCreate(lpCreateStruct) == -1)
return -1;
m_ToolTip.Create(this,TTS_ALWAYSTIP);
m_ToolTip.AddTool(this,"eMis_Draw");
EnableToolTips(TRUE);
return 0;
}
LRESULT CEmisDrawView::WindowProc(UINT message, WPARAM wParam, LPARAM lParam)
{
if(message == WM_MOUSEMOVE)
{
MSG msg;
msg.hwnd = m_hWnd;
msg.message = message;
msg.wParam = wParam;
msg.lParam = lParam;
m_ToolTip.RelayEvent(&msg);
}
return CScrollView::WindowProc(message, wParam, lParam);
}
BOOL CEmisDrawView::PreTranslateMessage(MSG* pMsg)
{
m_ToolTip.RelayEvent(pMsg);
return CScrollView::PreTranslateMessage(pMsg);
}
在你想更改的地方加上:
m_ToolTip.UpdateTipText("new string",this);
--------------------------------------------------------
Tooltip中由一个方法叫做SetMaxTipWidth,MSDN中的描述说是设定Tips窗口的最大宽度,然后就没了。
其实这个方法是使用SDK中的TTM_SETMAXTIPWIDTH 消息,查一下这个消息的描述,就会发现很多内容。
1. 这个方法是设定Tips窗口的最大宽度,in pixel;
2. 如果文字超过这个最大宽度,则control进行自动换行,以空格为换行标志;
3. 如果无法换行(没有空格或\r\n),则显示一行,宽度超过最大宽度。
还有很重要的一点,如果没有设定过宽度,则系统默认宽度为-1,这也是没有设定宽度就不能换行的原因。
试验结果:
1. 一旦设定宽度,\r\n和空格就会同时起作用,只是空格是在一行宽度超过设定宽度时起作用的。
--------------------------------------------------------
BOOL CTest_CToolTipCtrlDlg::OnInitDialog()
{
CDialog::OnInitDialog();
// Set the icon for this dialog. The framework does this automatically
// when the application's main window is not a dialog
SetIcon(m_hIcon, TRUE); // Set big icon
SetIcon(m_hIcon, FALSE); // Set small icon
RECT rect;
rect.left = 5;
rect.right = 5;
rect.top = 5;
rect.bottom = 5;
m_objToolTip.SetMaxTipWidth(180);
m_objToolTip.SetTipBkColor( RGB(165, 203, 247) );
m_objToolTip.SetTipTextColor( RGB(0, 102, 153) );
m_objToolTip.SetMargin( &rect );
m_objToolTip.AddTool( GetDlgItem(IDOK) , "this is a common button\nnamed \"ok\"\ntest done.");
m_objToolTip.AddTool( GetDlgItem(IDCANCEL) , "this is a common button\nnamed \"cancel\"\ntest done.");
// TODO: Add extra initialization here
return TRUE; // return TRUE unless you set the focus to a control
}
by 闻怡洋 http://vchelp.163.net
ToolTip是Win32中一个通用控件,MFC中为其生成了一个类CToolTipCtrl,总的说来其使用方法是较简单的,下面讲一下它的一般用法和高级用法。
一般用法步骤:
添加CToolTipCtrl成员变量 m_tt。
在父窗口中调用EnableToolTips(TRUE);
在窗口的OnCreate(或者其他适当的位置)中向ToolTip中添加需要显示Tip的子窗口,并同时指定相应的显示字串CToolTipCtrl::AddTool(pWnd,"string to display")。
重载父窗口的 BOOL PreTranslateMessage(MSG* pMsg) ,在函数中调用 m_tt.RelayEvent(pMsg)。
下面假设在窗口CWndYour中使用CToolTipCtrl
在类定义中添加变量说明:class CWndYour:xxx{ CToolTipCtrl m_tt;}在OnCreate中添加需要显示Tip的子窗口CWndYour::OnCreate(....){ EnableToolTips(TRUE); m_tt.Create(this); m_tt.Activate(TRUE); CWnd* pW=GetDlgItem(IDC_CHECK1);//得到窗口指针 m_tooltip.AddTool(pW,"Check1");//添加........}在BOOL PreTranslateMessage(MSG*
pMsg)中添加代码BOOL CWndYour::PreTranslateMessage(MSG* pMsg){ { m_tt.RelayEvent(pMsg); } return CParentClass::PreTranslateMessage(pMsg);}
这样当鼠标移动到相应的子窗口上时会显示出相应的ToolTip。
动态改变ToolTip的显示内容的方法及步骤:
上面所讲的1、2、4步骤。
在增加ToolTip时不指定显示的字串,而是使用LPSTR_TEXTCALLBACK。
在窗口中增加消息映射 ON_NOTIFY_EX( TTN_NEEDTEXT, 0, SetTipText )。
在窗口中增加一个函数用于动态提供显示内容,其原型为 BOOL SetTipText( UINT id, NMHDR * pTTTStruct, LRESULT * pResult ),下面的代码可以根据传入的参数判定应该显示的内容。
BOOL CWndYour::SetTipText( UINT id, NMHDR * pTTTStruct, LRESULT * pResult ){ TOOLTIPTEXT *pTTT = (TOOLTIPTEXT *)pTTTStruct; UINT nID =pTTTStruct->idFrom; //得到相应窗口ID,有可能是HWND if (pTTT->uFlags & TTF_IDISHWND) //表明nID是否为HWND { nID = ::GetDlgCtrlID((HWND)nID);//从HWND得到ID值,当然你也可以通过HWND值来判断
switch(nID) case(IDC_YOUR_CONTROL1) strcpy(pTTT->lpszText,your_string1);//设置 return TRUE; break; case(IDC_YOUR_CONTROL2) //设置相应的显示字串 return TRUE; break; } return(FALSE);}
ToolTip是Win32中一个通用控件,MFC中为其生成了一个类CToolTipCtrl,总的说来其使用方法是较简单的,下面讲一下它的一般用法和高级用法。
一般用法步骤:
添加CToolTipCtrl成员变量 m_tt。
在父窗口中调用EnableToolTips(TRUE);
在窗口的OnCreate(或者其他适当的位置)中向ToolTip中添加需要显示Tip的子窗口,并同时指定相应的显示字串CToolTipCtrl::AddTool(pWnd,"string to display")。
重载父窗口的 BOOL PreTranslateMessage(MSG* pMsg) ,在函数中调用 m_tt.RelayEvent(pMsg)。
下面假设在窗口CWndYour中使用CToolTipCtrl
在类定义中添加变量说明:class CWndYour:xxx{ CToolTipCtrl m_tt;}在OnCreate中添加需要显示Tip的子窗口CWndYour::OnCreate(....){ EnableToolTips(TRUE); m_tt.Create(this); m_tt.Activate(TRUE); CWnd* pW=GetDlgItem(IDC_CHECK1);//得到窗口指针 m_tooltip.AddTool(pW,"Check1");//添加........}在BOOL PreTranslateMessage(MSG*
pMsg)中添加代码BOOL CWndYour::PreTranslateMessage(MSG* pMsg){ { m_tt.RelayEvent(pMsg); } return CParentClass::PreTranslateMessage(pMsg);}
这样当鼠标移动到相应的子窗口上时会显示出相应的ToolTip。
动态改变ToolTip的显示内容的方法及步骤:
上面所讲的1、2、4步骤。
在增加ToolTip时不指定显示的字串,而是使用LPSTR_TEXTCALLBACK。
在窗口中增加消息映射 ON_NOTIFY_EX( TTN_NEEDTEXT, 0, SetTipText )。
在窗口中增加一个函数用于动态提供显示内容,其原型为 BOOL SetTipText( UINT id, NMHDR * pTTTStruct, LRESULT * pResult ),下面的代码可以根据传入的参数判定应该显示的内容。
BOOL CWndYour::SetTipText( UINT id, NMHDR * pTTTStruct, LRESULT * pResult ){ TOOLTIPTEXT *pTTT = (TOOLTIPTEXT *)pTTTStruct; UINT nID =pTTTStruct->idFrom; //得到相应窗口ID,有可能是HWND if (pTTT->uFlags & TTF_IDISHWND //表明nID是否为HWND { nID = ::GetDlgCtrlID((HWND)nID);//从HWND得到ID值,当然你也可以通过HWND值来判断
switch(nID) case(IDC_YOUR_CONTROL1) strcpy(pTTT->lpszText,your_string1);//设置 return TRUE; break; case(IDC_YOUR_CONTROL2) //设置相应的显示字串 return TRUE; break; } return(FALSE);}
ToolTip是Win32中一个通用控件,MFC中为其生成了一个类CToolTipCtrl,总的说来其使用方法是较简单的。一般用法步骤:
添加CToolTipCtrl成员变量 m_tt。
在父窗口中调用EnableToolTips(TRUE);
在窗口的OnCreate(或者其他适当的位置)中向ToolTip中添加需要显示Tip的子窗口,并同时指定相应的显示字串CToolTipCtrl::AddTool (pWnd,"string to display")。
重载父窗口的 BOOL PreTranslateMessage(MSG* pMsg) ,在函数中调用 m_tt.RelayEvent(pMsg)。
下面假设在窗口CWndYour中使用CToolTipCtrl
在类定义中添加变量说明:
class CWndYour:xxx
{
CToolTipCtrl m_tt;
}
在OnCreate中添加需要显示Tip的子窗口
CWndYour::OnCreate(....)
{
EnableToolTips(TRUE);
m_tt.Create(this);
m_tt.Activate(TRUE);
CWnd* pW=GetDlgItem(IDC_CHECK1);//得到窗口指针
m_tooltip.AddTool(pW,"Check1");//添加
........
}
在BOOL PreTranslateMessage(MSG* pMsg)中添加代码
BOOL CWndYour::PreTranslateMessage(MSG* pMsg)
{
{
m_tt.RelayEvent(pMsg);
}
return CParentClass::PreTranslateMessage(pMsg);
}
这样当鼠标移动到相应的子窗口上时会显示出相应的ToolTip。
动态改变ToolTip的显示内容的方法及步骤:
上面所讲的1、2、4步骤。
第3步在增加ToolTip时不指定显示的字串,而是使用LPSTR_TEXTCALLBACK。
在窗口中增加消息映射 ON_NOTIFY_EX( TTN_NEEDTEXT, 0, SetTipText )。
在窗口中增加一个函数用于动态提供显示内容,其原型为 BOOL SetTipText( UINT id, NMHDR * pTTTStruct, LRESULT * pResult ),下面的代码可以根据传入的参数判定应该显示的内容。
BOOL CWndYour::SetTipText( UINT id, NMHDR * pTTTStruct, LRESULT * pResult )
{
TOOLTIPTEXT *pTTT = (TOOLTIPTEXT *)pTTTStruct;
UINT nID =pTTTStruct->idFrom; //得到相应窗口ID,有可能是HWND
if (pTTT->uFlags & TTF_IDISHWND) //表明nID是否为HWND
nID = ::GetDlgCtrlID((HWND)nID);//从HWND得到ID值,当然你也可以通过HWND值来判断
switch(nID)
{
case(IDC_YOUR_CONTROL1)
strcpy(pTTT->lpszText,your_string1);//设置
return TRUE;
break;
case(IDC_YOUR_CONTROL2)
//设置相应的显示字串
return TRUE;
break;
}
return(FALSE);
}
另外一些小功能:
1、 使CToolTipCtrl增加换行功能,显示前增加函数调用
M_tt. SetMaxTipWidth(5); //使ToolTip最多可以支持5行
2、SetDelayTime函数用来设置显示时间。
3、SetMargin用来设置上下左右的空白距离。
class CEmisDrawView : public CScrollView
{
protected: // create from serialization only
CEmisDrawView();
DECLARE_DYNCREATE(CEmisDrawView)
CToolTipCtrl m_ToolTip;
// 。。。。
};
int CEmisDrawView::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
if (CScrollView::OnCreate(lpCreateStruct) == -1)
return -1;
m_ToolTip.Create(this,TTS_ALWAYSTIP);
m_ToolTip.AddTool(this,"eMis_Draw");
EnableToolTips(TRUE);
return 0;
}
LRESULT CEmisDrawView::WindowProc(UINT message, WPARAM wParam, LPARAM lParam)
{
if(message == WM_MOUSEMOVE)
{
MSG msg;
msg.hwnd = m_hWnd;
msg.message = message;
msg.wParam = wParam;
msg.lParam = lParam;
m_ToolTip.RelayEvent(&msg);
}
return CScrollView::WindowProc(message, wParam, lParam);
}
BOOL CEmisDrawView::PreTranslateMessage(MSG* pMsg)
{
m_ToolTip.RelayEvent(pMsg);
return CScrollView::PreTranslateMessage(pMsg);
}
在你想更改的地方加上:
m_ToolTip.UpdateTipText("new string",this);
--------------------------------------------------------
Tooltip中由一个方法叫做SetMaxTipWidth,MSDN中的描述说是设定Tips窗口的最大宽度,然后就没了。
其实这个方法是使用SDK中的TTM_SETMAXTIPWIDTH 消息,查一下这个消息的描述,就会发现很多内容。
1. 这个方法是设定Tips窗口的最大宽度,in pixel;
2. 如果文字超过这个最大宽度,则control进行自动换行,以空格为换行标志;
3. 如果无法换行(没有空格或\r\n),则显示一行,宽度超过最大宽度。
还有很重要的一点,如果没有设定过宽度,则系统默认宽度为-1,这也是没有设定宽度就不能换行的原因。
试验结果:
1. 一旦设定宽度,\r\n和空格就会同时起作用,只是空格是在一行宽度超过设定宽度时起作用的。
--------------------------------------------------------
BOOL CTest_CToolTipCtrlDlg::OnInitDialog()
{
CDialog::OnInitDialog();
// Set the icon for this dialog. The framework does this automatically
// when the application's main window is not a dialog
SetIcon(m_hIcon, TRUE); // Set big icon
SetIcon(m_hIcon, FALSE); // Set small icon
RECT rect;
rect.left = 5;
rect.right = 5;
rect.top = 5;
rect.bottom = 5;
m_objToolTip.SetMaxTipWidth(180);
m_objToolTip.SetTipBkColor( RGB(165, 203, 247) );
m_objToolTip.SetTipTextColor( RGB(0, 102, 153) );
m_objToolTip.SetMargin( &rect );
m_objToolTip.AddTool( GetDlgItem(IDOK) , "this is a common button\nnamed \"ok\"\ntest done.");
m_objToolTip.AddTool( GetDlgItem(IDCANCEL) , "this is a common button\nnamed \"cancel\"\ntest done.");
// TODO: Add extra initialization here
return TRUE; // return TRUE unless you set the focus to a control
}
CToolTipCtrl
class CEmisDrawView : public CScrollView
{
protected: // create from serialization only
CEmisDrawView();
DECLARE_DYNCREATE(CEmisDrawView)
CToolTipCtrl m_ToolTip;
// 。。。。
};
int CEmisDrawView::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
if (CScrollView::OnCreate(lpCreateStruct) == -1)
return -1;
m_ToolTip.Create(this,TTS_ALWAYSTIP);
m_ToolTip.AddTool(this,"eMis_Draw");
EnableToolTips(TRUE);
return 0;
}
LRESULT CEmisDrawView::WindowProc(UINT message, WPARAM wParam, LPARAM lParam)
{
if(message == WM_MOUSEMOVE)
{
MSG msg;
msg.hwnd = m_hWnd;
msg.message = message;
msg.wParam = wParam;
msg.lParam = lParam;
m_ToolTip.RelayEvent(&msg);
}
return CScrollView::WindowProc(message, wParam, lParam);
}
BOOL CEmisDrawView::PreTranslateMessage(MSG* pMsg)
{
m_ToolTip.RelayEvent(pMsg);
return CScrollView::PreTranslateMessage(pMsg);
}
在你想更改的地方加上:
m_ToolTip.UpdateTipText("new string",this);
--------------------------------------------------------
Tooltip中由一个方法叫做SetMaxTipWidth,MSDN中的描述说是设定Tips窗口的最大宽度,然后就没了。
其实这个方法是使用SDK中的TTM_SETMAXTIPWIDTH 消息,查一下这个消息的描述,就会发现很多内容。
1. 这个方法是设定Tips窗口的最大宽度,in pixel;
2. 如果文字超过这个最大宽度,则control进行自动换行,以空格为换行标志;
3. 如果无法换行(没有空格或\r\n),则显示一行,宽度超过最大宽度。
还有很重要的一点,如果没有设定过宽度,则系统默认宽度为-1,这也是没有设定宽度就不能换行的原因。
试验结果:
1. 一旦设定宽度,\r\n和空格就会同时起作用,只是空格是在一行宽度超过设定宽度时起作用的。
--------------------------------------------------------
BOOL CTest_CToolTipCtrlDlg::OnInitDialog()
{
CDialog::OnInitDialog();
// Set the icon for this dialog. The framework does this automatically
// when the application's main window is not a dialog
SetIcon(m_hIcon, TRUE); // Set big icon
SetIcon(m_hIcon, FALSE); // Set small icon
RECT rect;
rect.left = 5;
rect.right = 5;
rect.top = 5;
rect.bottom = 5;
m_objToolTip.SetMaxTipWidth(180);
m_objToolTip.SetTipBkColor( RGB(165, 203, 247) );
m_objToolTip.SetTipTextColor( RGB(0, 102, 153) );
m_objToolTip.SetMargin( &rect );
m_objToolTip.AddTool( GetDlgItem(IDOK) , "this is a common button\nnamed \"ok\"\ntest done.");
m_objToolTip.AddTool( GetDlgItem(IDCANCEL) , "this is a common button\nnamed \"cancel\"\ntest done.");
// TODO: Add extra initialization here
return TRUE; // return TRUE unless you set the focus to a control
}
CToolTipCtrl使用详细解说
by 闻怡洋 http://vchelp.163.netToolTip是Win32中一个通用控件,MFC中为其生成了一个类CToolTipCtrl,总的说来其使用方法是较简单的,下面讲一下它的一般用法和高级用法。
一般用法步骤:
添加CToolTipCtrl成员变量 m_tt。
在父窗口中调用EnableToolTips(TRUE);
在窗口的OnCreate(或者其他适当的位置)中向ToolTip中添加需要显示Tip的子窗口,并同时指定相应的显示字串CToolTipCtrl::AddTool(pWnd,"string to display")。
重载父窗口的 BOOL PreTranslateMessage(MSG* pMsg) ,在函数中调用 m_tt.RelayEvent(pMsg)。
下面假设在窗口CWndYour中使用CToolTipCtrl
在类定义中添加变量说明:class CWndYour:xxx{ CToolTipCtrl m_tt;}在OnCreate中添加需要显示Tip的子窗口CWndYour::OnCreate(....){ EnableToolTips(TRUE); m_tt.Create(this); m_tt.Activate(TRUE); CWnd* pW=GetDlgItem(IDC_CHECK1);//得到窗口指针 m_tooltip.AddTool(pW,"Check1");//添加........}在BOOL PreTranslateMessage(MSG*
pMsg)中添加代码BOOL CWndYour::PreTranslateMessage(MSG* pMsg){ { m_tt.RelayEvent(pMsg); } return CParentClass::PreTranslateMessage(pMsg);}
这样当鼠标移动到相应的子窗口上时会显示出相应的ToolTip。
动态改变ToolTip的显示内容的方法及步骤:
上面所讲的1、2、4步骤。
在增加ToolTip时不指定显示的字串,而是使用LPSTR_TEXTCALLBACK。
在窗口中增加消息映射 ON_NOTIFY_EX( TTN_NEEDTEXT, 0, SetTipText )。
在窗口中增加一个函数用于动态提供显示内容,其原型为 BOOL SetTipText( UINT id, NMHDR * pTTTStruct, LRESULT * pResult ),下面的代码可以根据传入的参数判定应该显示的内容。
BOOL CWndYour::SetTipText( UINT id, NMHDR * pTTTStruct, LRESULT * pResult ){ TOOLTIPTEXT *pTTT = (TOOLTIPTEXT *)pTTTStruct; UINT nID =pTTTStruct->idFrom; //得到相应窗口ID,有可能是HWND if (pTTT->uFlags & TTF_IDISHWND) //表明nID是否为HWND { nID = ::GetDlgCtrlID((HWND)nID);//从HWND得到ID值,当然你也可以通过HWND值来判断
switch(nID) case(IDC_YOUR_CONTROL1) strcpy(pTTT->lpszText,your_string1);//设置 return TRUE; break; case(IDC_YOUR_CONTROL2) //设置相应的显示字串 return TRUE; break; } return(FALSE);}
ToolTip是Win32中一个通用控件,MFC中为其生成了一个类CToolTipCtrl,总的说来其使用方法是较简单的,下面讲一下它的一般用法和高级用法。
一般用法步骤:
添加CToolTipCtrl成员变量 m_tt。
在父窗口中调用EnableToolTips(TRUE);
在窗口的OnCreate(或者其他适当的位置)中向ToolTip中添加需要显示Tip的子窗口,并同时指定相应的显示字串CToolTipCtrl::AddTool(pWnd,"string to display")。
重载父窗口的 BOOL PreTranslateMessage(MSG* pMsg) ,在函数中调用 m_tt.RelayEvent(pMsg)。
下面假设在窗口CWndYour中使用CToolTipCtrl
在类定义中添加变量说明:class CWndYour:xxx{ CToolTipCtrl m_tt;}在OnCreate中添加需要显示Tip的子窗口CWndYour::OnCreate(....){ EnableToolTips(TRUE); m_tt.Create(this); m_tt.Activate(TRUE); CWnd* pW=GetDlgItem(IDC_CHECK1);//得到窗口指针 m_tooltip.AddTool(pW,"Check1");//添加........}在BOOL PreTranslateMessage(MSG*
pMsg)中添加代码BOOL CWndYour::PreTranslateMessage(MSG* pMsg){ { m_tt.RelayEvent(pMsg); } return CParentClass::PreTranslateMessage(pMsg);}
这样当鼠标移动到相应的子窗口上时会显示出相应的ToolTip。
动态改变ToolTip的显示内容的方法及步骤:
上面所讲的1、2、4步骤。
在增加ToolTip时不指定显示的字串,而是使用LPSTR_TEXTCALLBACK。
在窗口中增加消息映射 ON_NOTIFY_EX( TTN_NEEDTEXT, 0, SetTipText )。
在窗口中增加一个函数用于动态提供显示内容,其原型为 BOOL SetTipText( UINT id, NMHDR * pTTTStruct, LRESULT * pResult ),下面的代码可以根据传入的参数判定应该显示的内容。
BOOL CWndYour::SetTipText( UINT id, NMHDR * pTTTStruct, LRESULT * pResult ){ TOOLTIPTEXT *pTTT = (TOOLTIPTEXT *)pTTTStruct; UINT nID =pTTTStruct->idFrom; //得到相应窗口ID,有可能是HWND if (pTTT->uFlags & TTF_IDISHWND //表明nID是否为HWND { nID = ::GetDlgCtrlID((HWND)nID);//从HWND得到ID值,当然你也可以通过HWND值来判断
switch(nID) case(IDC_YOUR_CONTROL1) strcpy(pTTT->lpszText,your_string1);//设置 return TRUE; break; case(IDC_YOUR_CONTROL2) //设置相应的显示字串 return TRUE; break; } return(FALSE);}
ToolTip是Win32中一个通用控件,MFC中为其生成了一个类CToolTipCtrl,总的说来其使用方法是较简单的。一般用法步骤:
添加CToolTipCtrl成员变量 m_tt。
在父窗口中调用EnableToolTips(TRUE);
在窗口的OnCreate(或者其他适当的位置)中向ToolTip中添加需要显示Tip的子窗口,并同时指定相应的显示字串CToolTipCtrl::AddTool (pWnd,"string to display")。
重载父窗口的 BOOL PreTranslateMessage(MSG* pMsg) ,在函数中调用 m_tt.RelayEvent(pMsg)。
下面假设在窗口CWndYour中使用CToolTipCtrl
在类定义中添加变量说明:
class CWndYour:xxx
{
CToolTipCtrl m_tt;
}
在OnCreate中添加需要显示Tip的子窗口
CWndYour::OnCreate(....)
{
EnableToolTips(TRUE);
m_tt.Create(this);
m_tt.Activate(TRUE);
CWnd* pW=GetDlgItem(IDC_CHECK1);//得到窗口指针
m_tooltip.AddTool(pW,"Check1");//添加
........
}
在BOOL PreTranslateMessage(MSG* pMsg)中添加代码
BOOL CWndYour::PreTranslateMessage(MSG* pMsg)
{
{
m_tt.RelayEvent(pMsg);
}
return CParentClass::PreTranslateMessage(pMsg);
}
这样当鼠标移动到相应的子窗口上时会显示出相应的ToolTip。
动态改变ToolTip的显示内容的方法及步骤:
上面所讲的1、2、4步骤。
第3步在增加ToolTip时不指定显示的字串,而是使用LPSTR_TEXTCALLBACK。
在窗口中增加消息映射 ON_NOTIFY_EX( TTN_NEEDTEXT, 0, SetTipText )。
在窗口中增加一个函数用于动态提供显示内容,其原型为 BOOL SetTipText( UINT id, NMHDR * pTTTStruct, LRESULT * pResult ),下面的代码可以根据传入的参数判定应该显示的内容。
BOOL CWndYour::SetTipText( UINT id, NMHDR * pTTTStruct, LRESULT * pResult )
{
TOOLTIPTEXT *pTTT = (TOOLTIPTEXT *)pTTTStruct;
UINT nID =pTTTStruct->idFrom; //得到相应窗口ID,有可能是HWND
if (pTTT->uFlags & TTF_IDISHWND) //表明nID是否为HWND
nID = ::GetDlgCtrlID((HWND)nID);//从HWND得到ID值,当然你也可以通过HWND值来判断
switch(nID)
{
case(IDC_YOUR_CONTROL1)
strcpy(pTTT->lpszText,your_string1);//设置
return TRUE;
break;
case(IDC_YOUR_CONTROL2)
//设置相应的显示字串
return TRUE;
break;
}
return(FALSE);
}
另外一些小功能:
1、 使CToolTipCtrl增加换行功能,显示前增加函数调用
M_tt. SetMaxTipWidth(5); //使ToolTip最多可以支持5行
2、SetDelayTime函数用来设置显示时间。
3、SetMargin用来设置上下左右的空白距离。
相关文章推荐
- vc绘图--单文档应用实例
- VC编程环境灵活应用1.1
- vC++文件输入输出流的综合应用
- 钩子技术、HOOK技术在VC编程中的应用
- 钩子技术、HOOK技术在VC编程中的应用
- 浅谈HOOK技术在VC编程中的应用
- VC++SDK编程——鼠标的应用示例
- MySQL数据库接口的VC实现与应用
- C++开源跨平台类库及在VC++.net中应用的配置
- VC:VxD技术及其在实时反病毒中的应用
- VC++的DLL应用(含Demo演示)
- Windows Gdi 应用-入门篇 (VC SDK)
- VC 使用CToolTipCtrl添加提示
- VC++ 中WM_COPYDATA 怎么样应用来实现两个进程间的数据传输
- BCG界面库在vc中的应用
- [转]浅谈HOOK技术在VC编程中的应用
- CToolTipCtrl控件应用
- 《数据结构》实验一:VC编程环境灵活应用
- 【vc】【多媒体编程应用】mciSendString的使用
- VC:VxD技术及其在实时反病毒中的应用