轉
還是那句老話:紙上得來終覺淺,絕知此事要躬行。前天給同事解決了乙個問題,他動態建立了乙個靜態控制項,可是這個靜態控制項的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
但是我照該文的做法,移動滑鼠到靜態文字控制項上提示並沒出來。我感覺正確的做法應該是設定視窗風格。具體是:1、如果你是拖來控制項的做法,要把notify的屬性設為true,具體如下圖:
2、如果你是動態建立靜態文字控制項,必須給視窗風格新增ss_notify(其它視窗我也估計也類似),具體是:
[cpp]view plain
copy
print?
class caboutdlg : public cdialog
; protected:
virtual
void dodataexchange(cdataexchange* pdx); // ddx/ddv 支援
// 實現
protected:
declare_message_map()
public:
virtual
bool oninitdialog();
private:
ctooltipctrl m_tt;
cstatic m_statictext;
public:
virtual
bool pretranslatemessage(msg* pmsg);
};
bool caboutdlg::oninitdialog()
bool caboutdlg::pretranslatemessage(msg* pmsg)
我的編譯環境為: vs 2005 + sp1, win xp sp3。
1. ctooltipctrl 使用詳細解說
靜態控制項
靜態控制項包括靜態正文(static text)和控制項(picture)。靜態正文控制項用來顯示正文。控制項可以顯示
位圖、圖示、方框和
1控制項介紹
▪ 控制項作用
▪ 控制項引數定義
2控制項引數
▪ 引數介紹
▪ 空間引數流程
3相關指令
▪ 常規指令
▪ 操作指令
靜態控制項的主要起說明和裝飾作用。mfc的cstatic類封裝了靜態控制項。cstatic
類的成員函式create負責建立靜態控制項,該函式的宣告為
bool create( lpctstr lpsztext, dword dwstyle, const rect& rect, cwnd* pparentwnd, uint nid = 0xffff );
引數lpsztext指定了控制項顯示的正文。dwstyle指定了靜態控制項的風格,表6.1顯示了靜態控制項的各種風格,dwstyle可將這些風格組合起來。rect是乙個對rect或crect結構的引用,用來說明控制項的位置和尺寸。pparentwnd指向父視窗,該引數不能為null。nid則說明了控制項的id。如果建立成功,該函式返回true,否則返回false.
lpsztext
指定要放置在
靜態控制項中的文字。如果是
null,則表示沒有文字是可見的。
dwstyle
指定靜態控制項的視窗風格。以下任何靜態控制項風格的組合都可以用於這個控制項。
ss_bitmap
指定在靜態控制項中顯示乙個被定義在
資源檔案中的
位圖。該風格將忽略靜態控制項的高度
和寬度,靜態控制項將根據
點陣圖的大小自動調節自身的尺寸。
ss_blackframe
該控制域以矩形邊界顯示,顏色與當前視窗
框架相同。
ss_blackrect
該控制域以填充的矩形顯示,顏色與當前的視窗框架相同。
ss_center
使文字在靜態控制項中水平居中。
ss_centerimage
當靜態控制項用於顯示文字時,該風格將使文字在靜態控制項中垂直居中。當靜態控制項用於 顯示
點陣圖或圖示時,該風格將使位圖或圖示在靜態控制項中垂直居中,當位圖或圖示小於
靜態控制項時,靜態控制項將使用
點陣圖或圖示左上角的點的顏色填充空白處。
ss_enhmetafile
指定在靜態控制項中顯示乙個增強型
圖元檔案。該風格將不會忽略靜態控制項的高度和寬度 ,而
圖元檔案將調節自身的大小來適應靜態控制項的尺寸。
ss_etchedframe
建立乙個浮雕邊框。
ss_etchedhorz
建立乙個邊框,並將頂端邊框設定為浮雕風格。
ss_etchedvert
建立乙個邊框,並將左側邊框設定為浮雕風格。
ss_grayframe
該控制域以矩形邊界顯示,顏色與當前桌面相同。
ss_grayrect
該控制域以填充的矩形顯示,顏色與當前的桌面相同。
ss_icon
指定在靜態控制項中顯示乙個被定義在
資源檔案中的圖示。該風格將忽略靜態控制項的高度
和寬度,靜態控制項將根據點陣圖的大小自動調節自身的尺寸。
ss_left
使文字在靜態控制項中左對齊。
ss_leftnowordwrap
在預設情況下,靜態控制項把』\n』和』\t』都作為換行標記。只有在設定本風格後,靜
態控制項才把』\t』看作是製表鍵(預設時製表鍵的寬度為8個字元的寬度)。
ss_noprefix
該標誌表示終止對字首字元的處理。通常,本成員函式將字首助記符』&』解釋為乙個指
令,即在』&』後面的
字元下面劃一下劃線。並且將』&&』解釋成乙個單個的』&』指令
。通過指令指定該標誌,這種處理就不再進行了。
ss_notify
在預設情況下,靜態控制項是不響應滑鼠事件的。只有在設定該風格後,當使用者單擊靜態
控制項時,靜態控制項才向父視窗傳送stn_clicked通知。
ss_ownerdraw
在指定該風格後,當靜態控制項在視覺外觀發生變化時,該靜態控制項的屬主視窗將響應wm
_drawitem訊息。
ss_right
使文字在靜態控制項中左對齊。
ss_******
只顯示一行文字,文字不能被剪下或替換(父視窗不能處理ctlcolor訊息)。
ss_sunken
設定乙個下沉的靜態控制項,當靜態控制項為乙個方框時,方框的四邊下沉;當靜態控制項為
乙個矩形時,整個矩形下沉。
ss_useritem
建立乙個使用者自定義專案。
ss_whiteframe
建立乙個白色的邊框。
ss_whiterect
建立乙個白色的矩形。
rect
指定靜態控制項的位置和大小。它可以是乙個rect結構型別的資料或乙個crect類的物件。
pparentwnd
指定cstatic類的物件的父視窗,通常是乙個cdialog類的物件。它不能是null。
nid = 0xffff
指定靜態控制項的控制項標識。
快速給shell指令碼加上使用提示
我們只需通過在shell指令碼前面加上如下的 即可 bin bash my script does one thing well usage my script options input file to read.output file to write.use for stdout.h show...
給文字框新增灰色提示文字
html 在cs後台頁面獲取input的值方法 概述 想在後台cs頁面得到前台頁面aspx中html控制項input輸入的值.解決方法如下 1.用request name tostring 前台 如下 使用者名稱 input name username type text 後台獲取 如下 記住 一定...
MFC中修改靜態文字框中文字的字型 顏色
一 設定字型 在oninitdialog 函式中新增 方法1 newfont.createpointfont 160,l 楷體 m static xsdj.setfont newfont 方法2 cfont font font m static xsdj.getfont 獲取cfont物件 logf...