還是那句老話:紙上得來終覺淺,絕知此事要躬行。前天給同事解決了乙個問題,他動態建立了乙個靜態控制項,可是這個靜態控制項的tooltip總是顯示不出來。我提示他在建立時要設定一下視窗風格。果然他在建立時加上ss_noprefix就好了。
今天抽空把這個知識記錄一下(這也算是我的乙個習慣了,無關乎技術含量),上網搜了一下ctooltipctrl類的用法,搜到一篇文章:
ctooltipctrl 使用詳細解說
我測試了該文的做法,發現要與該文作者商榷一下了。該文作者說:
tooltip是 win32中乙個通用控制項,mfc中為其生成了乙個類ctooltipctrl,總的說來其使用方法是較簡單的,下面講一下它的一般用法和高階用法。
一般用法步驟:
1.新增ctooltipctrl成員變數 m_tt。
2.在父視窗中呼叫 enabletooltips(true);
3. 在視窗的oncreate(或者其他適當的位置)中向tooltip中新增需要顯示tip的子視窗,並同時指定相應的顯示字串 ctooltipctrl::addtool(pwnd,"string to display")。
4.過載父視窗的 bool pretranslatemessage(msg* pmsg) ,在函式中呼叫 m_tt.relayevent(pmsg)。
下面假設在視窗cwndyour中使用 ctooltipctrl
具體**:
[cpp]view plain
copy
//1.在視窗的類定義中新增變數說明
class
ctooltiptestdlg :
public
cdialog
[cpp]view plain
copy
//2.在對話方塊的oninitdialog()函式中新增如下**
enabletooltips(true);
m_tt.create(this
);
m_tt.activate(true);
cwnd* pw=getdlgitem(idc_check1);//idc_check1為控制項id //得到控制項的指標
m_tt.addtool(pw,l"check1lakjsfasfdasfd"
);//為此控制項新增tip
[cpp]view plain
copy
//3.過載父視窗的 bool pretranslatemessage(msg* pmsg) ,在函式中呼叫 m_tt.relayevent(pmsg)
bool
ctooltiptestdlg::pretranslatemessage(msg* pmsg)
return
cdialog::pretranslatemessage(pmsg);
}
這樣就完成了為控制項新增tip。
如果想修改已新增的tip的內容,可以使用updatetiptext函式,如下
[cpp]view plain
copy
cwnd* pw=getdlgitem(idc_check1);
//得到已新增tip控制項
m_tt.updatetiptext(l"asdflasdf"
,pw);
//更新tip的內容
其他控制函式具體可查msdn的ctooltipctrl類。
對於靜態文字框,要把notify的屬性設為true;而如果靜態文字控制項是動態建立的,必須給視窗風格新增ss_notify,如
[cpp]view plain
copy
m_statictext.create(_t(
"my static"
), ws_child|ws_visible|ws_border|ss_notify,
crect(10,10,150,50),this
);
控制項介紹 CToolTipCtrl使用詳細解說
很多的介面設計都需要有tip提示,下面描述一下tip的簡單使用方法 1.首先要new乙個ctooltipctrl的物件m pcontenttip 2.呼叫ctooltipctrl的create函式,指定其父視窗。可以為某個控制項,也可以為this。一般設為this。m pcontenttip cre...
CToolTipCtrl使用詳細解說
很多的介面設計都需要有tip提示,下面描述一下tip的簡單使用方法 1.首先要new乙個ctooltipctrl的物件m pcontenttip 2.呼叫ctooltipctrl的create函式,指定其父視窗。可以為某個控制項,也可以為this。一般設為this。m pcontenttip cre...
CToolTipCtrl使用詳細解說
ctooltipctrl使用詳細解說 m tt.create this cwnd pw getdlgitem idc check1 得到視窗指標 m tooltip.addtool pw,check1 新增 得到相應視窗id,有可能是hwnd 表明nid是否為hwnd nid getdlgctrli...