关键词不能为空

当前您在: 主页 > 英语 >

TTN_NEEDTEXT一般用法和高级用法(OnToolTip函数)

作者:高考题库网
来源:https://www.bjmy2z.cn/gaokao
2021-02-13 18:05
tags:

-

2021年2月13日发(作者:glove是什么意思)


TTN_NEEDTEXT


一般用法和高级用法




2011-10-14 13:30 28


人阅读



评论


(0)


收藏



举报




ToolTip


< br>Win32


中一个通用控件,


MFC

中为其生成了一个类


CToolTipCtrl


,总的说来 其使用方法是较简


单的,下面讲一下它的一般用法和高级用法。







一般用法步骤:







添加


CToolTipCtrl< /p>


成员变量



m_tt








在父窗口中调用


EnableToolTips(TRUE);






在窗口的


OnCreate


(或者其他适当的位置)中向


ToolTip


中添加需要显示


Tip


的子窗口,并同时指定相


应的显示字串


CToolTipCtrl::AddTool(pWnd,


to


display








重载父窗口的



BOOL


PreTranslateMessage(MSG*


pMsg)


,在函数中调




m_vent(pMsg)








下面假设在窗口


CWndYour


中使用


CToolTipCtrl






在类定义中添加变量说明:





class


CWndYour:xxx




{




CToolTipCtrl


m_tt;




}





O nCreate


中添加需要显示


Tip


的子窗口





CWndYour::OnCreate(....)




{




EnableToolTips(TRUE);




m_(this);




m_te(TRUE);






CWnd*


pW=GetD lgItem(IDC_CHECK1);//


得到窗口指针





m_l(pW,


添加




........




}





BOOL


PreTranslateMessage(MSG*


pMsg)


中添加代码





BOOL


CWndYour::PreTranslateMessage(MSG*


pMsg)




{




{




m_vent(pMsg);




}




return


CParentClass::PreTr anslateMessage(pMsg);




}






这样当鼠标移动到相应的子窗 口上时会显示出相应的


ToolTip








动态改变


ToolTip


的显示内容的方法及步骤:







上面所讲的


1



2

< br>、


4


步骤。







在增加


ToolTip

< p>
时不指定显示的字串,而是使用


LPSTR_TEXTCALLBACK< /p>








在窗口中增加消息映射



ON_NOTIFY_EX(


TTN_NEEDTEXT,


0,


SetTipText


)








在窗口中增加一个函数用于动态提供显示内容,其原型




BOOL


SetTipText(


UINT


id,


NMHDR


*


pTTTStruct,


LRESULT


*


pResult


)


,下面的


代码可以根据传入的参数判定应该显示的内容。

< p>






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


是否为


HW ND




{




nID


=


::GetDl gCtrlID((HWND)nID);//



HWND


得到


ID


值,当然你也可以通过

< p>
HWND


值来


判断





switch(nID)




case(IDC_YOUR_CONTROL1)




strcpy(pTTT-> lpszText,your_string1);//


设置





return


TRUE;




break;




case(IDC_YOUR_CONTROL2)




//


设置相应的显示字串





return


TRUE;




break;




}




return(FALSE);




}





我用


VC



TOOL TIP


很多次了


,


但每次都要再研究一遍


.


虽然说学而时习


,


应该的


,


但主要还 是由于自己懒


.


今天一定要记下来


.< /p>


以后再用的时候


,


就是参考


.


也请阅读此文的朋友记下来


,

将来查阅用


.




VC


实现


TOOL TIP.


比较复杂


,


其实也简单


,

< p>


MFC


帮助一些窗口实现


,


而另一些窗口又不实现


,


倒搞得复


杂了


.


最开始我用

WM_MOUSEMOVE


消息


,


然后用


CToolTipCtrl::Pop,


这个方法太笨< /p>


.


不建议用


.


除 非需要自


定义


.



MFC



TOOL TIP

< p>
的支持不错的


.


缺省情况


CFrameWnd


支持很好


.


然后是


CWnd.


主要体现在


TTN_NEE DTEXT


消息的支持和


OnToolHitTest


的支持


.TTN_NEEDTEXT


是在


CFrameWnd


中支持



.OnToolHitTest


是在


CWnd


中支持的


.


有了这些支持


,


可以在框架窗口中很好实现


ToolBar



TIP.


和在一


个对话框中 很好实现一个控件的


TOOL TIP.


< br>举例


.


在对话框中实现


TOOL TIP.



ToolTips( TRUE )


是不可少的


.


建议在


:CD ialog::OnInitDialog


调用吧


.



_NOTIFY_EX( TTN_NEEDTEXT, 0, OnNeedText ).OnNeedText


实现了


TOOL TIP

< p>
的文字


.


传入的参



idFrom


是控件的


ID,


根据控件


ID


得到相应的


T IP


文字




就这么简单的两步


,


就实现了对话框中的


TOOL TIP.


其实不只对话框


,


任何窗口都可以用上面的方法实现自


己的子窗口控件的


TIP .


但前提是必须是


CWnd


的派生类< /p>


.



这就看出了


MFC



TOOL TIP


的支持很厉害




但这一切都是


MFC


实现的我们简单描述一下它的实 现原理


,


这样看得更清楚




CWnd


本身就带有一个

< p>
CToolTipCtrl


对象


,


是放在


pThreadState


中的这个不说了


,


知道


CWnd


有 就行了




CWnd

< br>负责创建它


,


然后在


PreTr anslateMessage


中调用了


FilterTool TipMessage,


这个函数的作用是处理


WM_MOUS EMOVE,WM_NCMOUSEMOVE


等消息


,



CToolTipCtrl


一个机会


,


判断鼠标是否在需要显示


TIP


的窗口上


,


如果是


,


就显示


.FilterToolTipMessage


先从


CWnd::OnToolHitTest


得到< /p>


TOOLINFO:


中的数据


,


比如哪个控件需要


TIP


等信息


,


然后利用


ADDTOOL


消 息把这个需要


TIP


的控制加入到


CT oolTipCtrl



TOOL


列表 中


,


然后将鼠标移动的消息转给


CTo olTipCtrl


处理


.


如果这个< /p>


TIP


的文字需要用回调函数来获得


,< /p>


就用


WM_NOTIFY



TTN_NEEDTEXT



CToolTipCt rl


的父窗口获取


.


这个过程就是


CToolTipCtrl


判断是


否要显示


TIP,


到获得文字并显示


TIP


的全过程




这样 一分析


,


就知道原来


CWnd


帮助实现了控件子窗口的


TIP


其实就是实现了


OnToolHitTest


这个函数


,



后在


PreTranslateM essage


中转发消息


,


帮助


CToolTipCtrl


正确显示


TIP.




CFrameWnd


是实现了


TTN_NEEDTEXT


的响应


,


帮助子窗口实现


TIP.



其实我们也可以不要这些缺省实现


,


自己用


CToolTipCtrl


搞定


,


做法一样


:



ipCtrl::Create


创建


Tool Tip



l


增加一个


TOOL,


这里的


TOOL


就是需要显示


TIP


的一个区 域或一个子窗口


.


如果对


AddToo l


使


用有不清楚的地方


,


建议查看源程序


.


可能会觉得直接使用


TTM_ADDTOOL


更方便


.



3.



Pr eTranslateMessage


中调用


CToolTip Ctrl::RelayMessage



4.


如果在


AddTool



,


文字是用回调函数实现


,


那就要处理< /p>


TTN_NEEDTEXT


消息


.



其实自己创建


CToolTipCt rl



MFC


做的一样


.


只是不需要在


OnToolHitTest


中给出需要显示


TIP


的窗口或


者区域


.



如果给子窗口用


TIP.


就用


MFC

< br>最简单


.


如果给自己呢


?



设置


TOOLINFO


中的


uFlags = TTF_IDISHWND,


然后设置


uId


为窗口句柄


,hWn d


为窗口句柄就可以了


.



写了这么多


,


有不对的地方还请和我联系一下< /p>


,


帮助我改正错误


.



只是有个问题还没搞明白


.


就是为什么


MFC



C ToolTipCtrl


放在了


pThreadState



.


难道是为了用一个

TOOL TIP


为该线程的所有窗口服务吗


?

< p>
难道是一种节约资源的表现


.


这点还需要研究


.


如果哪位朋友知道答


< br>,


还希望能不吝赐教


.


谢谢


.






VC


实现


TOOL TIP2008-03-17 13:57


按照下面的步骤去做:



1


、先为


static


设置一个


ID


,如


ID_TIP;


2


、在


CDialogBar


的头文件中的


AFX_MSG


内加入一行申明

< br>


afx_msg BOOL OnToolTip(UINT id,NMHDR * pNMHDR,LRESULT * pResult);


3


、在


CDialogBar



CPP


文件中的


AFX_MSG_MAP


内加入一行



ON_NOTIFY_EX(TTN_NEEDTEXT,0,OnToolTip)


4


、在


CDialogBar



CPP


文件中的


On InitDialog()


函数内加入



EnableToolTips(TRUE);


5


、在


CDialogBar


< br>CPP


文件中添加


OnToolTip

< br>函数



BOOL CDialogBar::OnToolTip(UINT id,NMHDR * pNMHDR,LRESULT * pResult)


{


TOOLTIPTEXT * pTTT=(TOOLTIPTEXT *)pNMHDR;


UINT uID = pNMHDR->idFrom;


if(pTTT->uFlags & TTF_IDISHWND)


uID = ::GetDlgCtrlID((HWND)uID);


if(uID == NULL) return FALSE;


switch(uID)


{


case IDC_TIP:


pTTT->lpszTex t=


添加你的提示内容



break;


}


return TRUE;


}


这样就可以了。


< p>
其实,上面的方法可以为任何控件添加


tip


提示 。





用< /p>


VC


实现


TOOL TIP.

< p>
比较复杂


,


其实也简单


,



MFC


帮助一些窗口实现

< p>
,


而另一些窗口又不实现


,


倒搞得复


杂了


.


最开始我用


WM_MOUSEMOVE


消息


,


然后用


CToolTipCtrl::Pop,


这个 方法太笨


.


不建议用


.


除非需要自


定义


.



MFC



TOOL TIP

< p>
的支持不错的


.


缺省情况


CFrameWnd


支持很好


.


然后是


CWnd.


主要体现在


TTN_NEE DTEXT


消息的支持和


OnToolHitTest


的支持


.TTN_NEEDTEXT


是在


CFrameWnd


中支持



.OnToolHitTest


是在


CWnd


中支持的


.


有了这些支持


,


可以在框架窗口中很好实现


ToolBar



TIP.


和在一


个对话框中 很好实现一个控件的


TOOL TIP.


< br>举例


.


在对话框中实现


TOOL TIP.



ToolTips( TRUE )


是不可少的


.


建议在


:CD ialog::OnInitDialog


调用吧


.



_NOTIFY_EX( TTN_NEEDTEXT, 0, OnNeedText ).OnNeedText


实现了


TOOL TIP

< p>
的文字


.


传入的参



idFrom


是控件的


ID,


根据控件


ID


得到相应的


T IP


文字




就这么简单的两步


,


就实现了对话框中的


TOOL TIP.


其实不只对话框


,


任何窗口都可以用上面的方法实现自


己的子窗口控件的


TIP .


但前提是必须是


CWnd


的派生类< /p>


.



这就看出了


MFC



TOOL TIP


的支持很厉害




但这一切都是


MFC


实现的我们简单描述一下它的实 现原理


,


这样看得更清楚




CWnd


本身就带有一个

< p>
CToolTipCtrl


对象


,


是放在


pThreadState


中的这个不说了


,


知道


CWnd


有 就行了




CWnd

< br>负责创建它


,


然后在


PreTr anslateMessage


中调用了


FilterTool TipMessage,


这个函数的作用是处理


WM_MOUS EMOVE,WM_NCMOUSEMOVE


等消息


,



CToolTipCtrl


一个机会


,


判断鼠标是否在需要显示


TIP


的窗口上


,


如果是


,


就显示


.FilterToolTipMessage


先从


CWnd::OnToolHitTest


得到< /p>


TOOLINFO:


中的数据


,


比如哪个控件需要


TIP


等信息


,


然后利用


ADDTOOL


消 息把这个需要


TIP


的控制加入到


CT oolTipCtrl



TOOL


列表 中


,


然后将鼠标移动的消息转给


CTo olTipCtrl


处理


.


如果这个< /p>


TIP


的文字需要用回调函数来获得


,< /p>


就用


WM_NOTIFY



TTN_NEEDTEXT



CToolTipCt rl


的父窗口获取


.


这个过程就是


CToolTipCtrl


判断是


否要显示


TIP,


到获得文字并显示


TIP


的全过程


-


-


-


-


-


-


-


-



本文更新与2021-02-13 18:05,由作者提供,不代表本网站立场,转载请注明出处:https://www.bjmy2z.cn/gaokao/651815.html

TTN_NEEDTEXT一般用法和高级用法(OnToolTip函数)的相关文章