MFC中给静态文本加上提示

来源:互联网 发布:pc端前端数据渲染 编辑:程序博客网 时间:2024/05/18 21:10
转 http://blog.csdn.net/clever101/article/details/5548462

     还是那句老话:纸上得来终觉浅,绝知此事要躬行。前天给同事解决了一个问题,他动态创建了一个静态控件,可是这个静态控件的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 plaincopyprint?
  1. class CAboutDlg : public CDialog  
  2. {  
  3. public:  
  4.     CAboutDlg();  
  5. // 对话框数据  
  6.     enum { IDD = IDD_ABOUTBOX };  
  7. protected:  
  8.     virtual void DoDataExchange(CDataExchange* pDX);    // DDX/DDV 支持  
  9. // 实现  
  10. protected:  
  11.     DECLARE_MESSAGE_MAP()  
  12. public:  
  13.     virtual BOOL OnInitDialog();  
  14. private:  
  15.     CToolTipCtrl m_tt;   
  16.     CStatic m_StaticText;  
  17. public:  
  18.     virtual BOOL PreTranslateMessage(MSG* pMsg);  
  19. };  
  20. BOOL CAboutDlg::OnInitDialog()  
  21. {  
  22.     CDialog::OnInitDialog();  
  23.     // TODO:  在此添加额外的初始化  
  24.     m_StaticText.Create(_T("my static"), WS_CHILD|WS_VISIBLE|WS_BORDER|SS_NOTIFY,   
  25.         CRect(10,10,150,50),this);  
  26.     m_tt.Create(this);   
  27.     m_tt.Activate(TRUE);   
  28.     m_tt.AddTool(&m_StaticText,_T("这是一个静态文本!"));//添加  
  29.     return TRUE;  // return TRUE unless you set the focus to a control  
  30.     // 异常: OCX 属性页应返回FALSE  
  31. }  
  32. BOOL CAboutDlg::PreTranslateMessage(MSG* pMsg)  
  33. {  
  34.     // TODO: 在此添加专用代码和/或调用基类  
  35.     if (NULL != m_tt.GetSafeHwnd())              
  36.         m_tt.RelayEvent(pMsg);  
  37.     return CDialog::PreTranslateMessage(pMsg);  
  38. }  


      我的编译环境为: VS 2005 + sp1, Win XP sp3。


参考文献:


1. CToolTipCtrl 使用详细解说



静态控件


静态控件包括静态正文(Static Text)和图片控件(Picture)。静态正文控件用来显示正文。图片控件可以显示位图、图标、方框和图元文件,在图片控件中显示图片的好处是不必操心图片的重绘问题。静态控件不能接收用户的输入。在上一章中,读者已经用过静态正文和组框控件。图片控件的例子可以在AppWizard创建的IDD_ABOUTBOX对话框模板中找到,在该模板中有一个图片控件用来显示图标。

目录

1控件介绍

控件作用
控件参数定义

2控件参数

参数介绍
空间参数流程

3相关指令

常规指令
操作指令


1控件介绍

控件作用

静态控件的主要起说明和装饰作用。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.

2控件参数

参数介绍

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
使文字在静态控件中左对齐。

3相关指令

常规指令

SS_LEFTNOWORDWRAP
在缺省情况下,静态控件把’\n’和’\t’都作为换行标记。只有在设置本风格后,静
态控件才把’\t’看作是制表键(缺省时制表键的宽度为8个字符的宽度)。
SS_NOPREFIX
该标志表示终止对前缀字符的处理。通常,本成员函数将前缀助记符’&’解释为一个指
令,即在’&’后面的字符下面划一下划线。并且将’&&’解释成一个单个的’&’指令
。通过指令指定该标志,这种处理就不再进行了。
SS_NOTIFY
在缺省情况下,静态控件是不响应鼠标事件的。只有在设置该风格后,当用户单击静态
控件时,静态控件才向父窗口发送STN_CLICKED通知。
SS_OWNERDRAW
在指定该风格后,当静态控件在视觉外观发生变化时,该静态控件的属主窗口将响应WM
_DRAWITEM消息。
SS_RIGHT

操作指令

使文字在静态控件中左对齐。
SS_SIMPLE
只显示一行文本,文本不能被剪切或替换(父窗口不能处理CTLCOLOR消息)。
SS_SUNKEN
设置一个下沉的静态控件,当静态控件为一个方框时,方框的四边下沉;当静态控件为
一个矩形时,整个矩形下沉。
SS_USERITEM
建立一个用户自定义项目。
SS_WHITEFRAME
建立一个白色的边框。
SS_WHITERECT
建立一个白色的矩形。
rect
指定静态控件的位置和大小。它可以是一个RECT结构类型的数据或一个CRect类的对象。
pParentWnd
指定CStatic类的对象的父窗口,通常是一个CDialog类的对象。它不能是NULL。
nID = 0xffff
指定静态控件的控件标识。







0 0
原创粉丝点击