MFC中給靜態文字加上提示

2021-06-21 09:47:26 字數 4233 閱讀 9540

還是那句老話:紙上得來終覺淺,絕知此事要躬行。前天給同事解決了乙個問題,他動態建立了乙個靜態控制項,可是這個靜態控制項的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...