VC++ : CStatic控件的基本使用

转载 2012年03月22日 09:56:46
CStatic 继承于 CWnd,是一种特殊的窗体。他可以显示文本字符串(这也是最常用的用法)、图标、指针(cursor)、位图和增强图文元件. 通常静态控件不提供输入和输出。但是如果把他的属性设置为 SS_NOTIFY,他可以通知其父窗口的击鼠标事件。

一、CStatic 用于显示文本

      如果文本不变,可以直接设置其 Caption。如果想在运行过程中改变其显示文本,可以用如下方式:

  • CStatic   *pStatic=(CStatic*)GetDlgItem(IDC_STATIC);
  • pStatic->SetWindowText("Just a Test of Static Control!");

二、CStatic 用于显示图标

      如果要显示图标,则必须要设置窗口属性为 SS_ICON 和 SS_CENTERIMAGE,实例代码如下:

  • CStatic* pStatic = (CStatic*)GetDlgItem(IDC_STATIC);
  • LONG style = GetWindowLong(pStatic->GetSafeHwnd(), GWL_STYLE);style |= SS_ICON;  
  • style |= SS_CENTERIMAGE;   
  • SetWindowLong(pStatic->GetSafeHwnd(),GWL_STYLE,style);
  • pStatic->SetIcon(m_hIcon);

三、CStatic 用于显示指针 cursor

      如果要显示 cursor,则必须要设置窗口属性为 SS_ICON 和 SS_CENTERIMAGE,实例代码如下:

  • CStatic* pStatic = (CStatic*)GetDlgItem(IDC_STATIC);
  • LONG style = GetWindowLong(pStatic->GetSafeHwnd(), GWL_STYLE);
  • style |= SS_ICON;  
  • style |= SS_CENTERIMAGE;   
  • SetWindowLong(pStatic->GetSafeHwnd(),GWL_STYLE,style);
  • pStatic->SetCursor(OnQueryDragIcon());

四、CStatic 用于显示位图

      如果要显示图标,则必须要设置窗口属性为 SS_BITMAP 和 SS_CENTERIMAGE,实例代码如下:

  • //获得指向静态控件的指针  
    CStatic   *pStatic=(CStatic*)GetDlgItem(IDC_STATIC);
  • //获得位图句柄  
    HBITMAP   hBitmap=::LoadBitmap(AfxGetApp()->m_hInstance, 
            MAKEINTRESOURCE(IDB_BITMAP2));
  • //LONG result = SetWindowLong(pStatic->GetSafeHwnd(),GWL_STYLE,style);
  • //设置静态控件的样式,使其可以使用位图,并试位标显示使居中  
    pStatic->ModifyStyle(0xF,SS_BITMAP|SS_CENTERIMAGE);  
  • //设置静态控件显示位图  
    pStatic->SetBitmap(hBitmap);

 

文章出处:CSDN

 

使用Visual C++ 6.0编制软件时,静态控件是最常用的控件之一。一般情况下,静态控件用作那些没有固定标题文本属性的控件(如文本编辑控件、列表框等)的标签,或者用来为控件分组,或者用来显示一些提示性的文件。实际上,静态控件除了显示静态文本这一基本功能外,还有许多其他的特殊功能,如在静态控件中可以显示图标、位图,甚至还可以在静态控件中显示动画。本文将通过示例程序来介绍静态控件的这些特殊用法。 
  
  1. 显示图标 
  ⑴ 使用AppWizard创建一个基于对话框的MFC应用程序,设置其工程名为ShowIco。 
  ⑵ 在对话框上增加一个静态控件。需要注意的是,有资源管理器添加的静态控件在默认情况下其ID均为IDC_STATIC,因此,如果需要在程序中区分和操纵各个不同的静态控件,一般情况下,需要更改新添加的静态控件的ID值。这里将静态控件的ID值设置为IDC_SHOWICO。 
  ⑶ 在资源管理器中添加图标资源,其ID为IDI_ICON1。 
  ⑷ 使用ClassWizard添加WM_INITDIALOG消息处理函数OnInitDialog。 
  ⑸ 在OnInitDialog函数中下面的代码: 
  //获得指向静态控件的指针 
  CStatic *pStatic=(CStatic *)GetDlgItem(IDC_SHOWICO); 
  //加载图标 
  HICON hIcon=AfxGetApp()->LoadIcon(IDI_ICON1); 
  //设置静态控件的样式,使其可以使用图标,并试图标显示使居中 
  pStatic->ModifyStyle(0xF,SS_ICON|SS_CENTERIMAGE); 
  //设置静态控件图标 
  pStatic->SetIcon(hIcon); 
  运行该程序,显示如上图。 
  
  2.显示位图 
  ⑴ 使用AppWizard创建一个基于对话框的MFC应用程序,设置其工程名为ShowBmp。 
  ⑵ 在对话框上增加一个静态控件,将静态控件的ID值设置为IDC_SHOWBMP。 
  ⑶ 在资源管理其中添加位图资源,其ID为IDB_INFO。 
  ⑷ 使用ClassWizard添加WM_INITDIALOG消息处理函数OnInitDialog。 
  ⑸ 在OnInitDialog函数中下面的代码: 
  //获得指向静态控件的指针 
  CStatic *pStatic=(CStatic *)GetDlgItem(IDC_SHOWBMP); 
  //获得位图句柄 
  HBITMAP Bitmap=::LoadBitmap(AfxGetApp()_hInstance, 
    MAKINTRESOURCE(IDB_INFO)); 
  //设置静态控件的样式,使其可以使用位图,并试位标显示使居中 
  pStatic->ModifyStyle(0xF,SS_BITMAP|SS_CENTERIMAGE); 
  //设置静态控件显示位图 
  pStatic->SetBitmap(hBitmap); 
  运行该程序即可。 
  
  3. 显示动画 
  编写一个字符串在静态控件中不停的移动的程序。 
  ⑴ 使用AppWizard创建一个基于对话框的MFC应用程序,设置其工程名为ShowAnimation。 
  ⑵ 在对话框上增加一个静态控件。将静态控件的ID值设置为IDC_PREVIEW。 
  ⑶ 使用ClassWizard添加WM_INITDIALOG消息处理函数OnInitDialog和WM_TIMER的消息处理函数OnTimer。 
  ⑷ 在CshowAnimationDlg类中,增加两个变量m_x和m_y,用以表示字符串的坐标。 
  ⑸ 在OnInitDialog函数中添加下列代码: 
   m_x=0; 
   m_y=0; 
    KillTimer(1); 
   VERIFY(SetTimer(1, 500, NULL) != 0); 
  1. 在CshowAnimationDlg类中,增加一个成员函数Draw()如下: 
  void CshowAnimationDlg::Draw() 
   { 
    CWnd *pWnd=GetDlgItem(IDC_PREVIEW); 
  CDC *pDC=pWnd->GetDC(); 
  RECT rect; 
   pWnd->GetClientRect(&rect); 
  pWnd->Invalidate(); 
  pWnd->UpdateWindow(); 
   pDC->SelectStockObject(BLACK_BRUSH); 
  pDC->Rectangle(0,0,rect.right,rect.bottom); 
   pDC->SetTextColor(RGB(255,0,0)); 
  pDC->SetBkColor(RGB(0,0,0)); 
  if((m_x>=rect.right)||(m_y>=rect.bottom-20)) 
  { m_x=0; 
  m_y=0; 
    } 
  pDC->TextOut(m_x,m_y,\"动画\"); 
   } 
  2. 在OnTimer函数中,添加如下代码: 
     if (nIDEvent == 1) 
    { 
    m_x+=5; 
    m_y+=5; 
    Draw(); 
     } 
   else CWnd::OnTimer(nIDEvent);

 

 

MFC中 CStatic类(静态控件类)

【说明】CStatic类提供了一个Windows静态控件的功能。一个静态控件可以用来显示一
个文本字符串、方框、矩形、图标、光标、位图或增强的图元文件。它可以被用来作为
标签、方框或用来分隔其它的控件。静态控件通常不接收输入,也不提供输出;但是,
如果它具有SS_NOTIFY风格,则它可以通知其父有关设备点击的消息。
创建一个静态控件分两步。首先,调用构造函数来构造一个CStatic类的对象,然后调用
成员函数Create来创建此静态控件并将它分配给当前的CStatic类的对象。
如果你是在一个对话框中创建了一个静态控件(通过一个对话框资源),则当用户关闭这
个对话框时, CStatic类的对象被自动销毁。
如果你是在一个窗口中创建了一个CStatic类的对象,则可能需要你自己来销毁它。在一
个窗口的堆栈中创建的CStatic类的对象将自动被销毁。如果你是使用new函数在堆中创
建CStatic类的对象,则当你使用完后,必须调用delete来销毁这个CStatic类的对象。

【库 名】<afxwin.h>


【成员函数】

(1)BOOL Create(LPCTSTR lpszText, DWORD dwStyle, const RECT& rect, CWnd* pP
arentWnd, UINT nID = 0xffff);
【返回值】如果本成员函数调用成功则返回非零值;否则返回0。
【参 数】
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_SIMPLE
只显示一行文本,文本不能被剪切或替换(父窗口不能处理CTLCOLOR消息)。
SS_SUNKEN
设置一个下沉的静态控件,当静态控件为一个方框时,方框的四边下沉;当静态控件为
一个矩形时,整个矩形下沉。
SS_USERITEM
建立一个用户自定义项目。
SS_WHITEFRAME
建立一个白色的边框。
SS_WHITERECT
建立一个白色的矩形。
rect
指定静态控件的位置和大小。它可以是一个RECT结构类型的数据或一个CRect类的对象。

pParentWnd
指定CStatic类的对象的父窗口,通常是一个CDialog类的对象。它不能是NULL。
nID = 0xffff
指定静态控件的控件标识。
【注释】在使用静态控件显示文本而且没有设置SS_LEFTNOWORDWRAP风格时,’\n’和
’\t’都忧患行的作用。两者的区别是在一行文本的长度大于静态控件的宽度时使用’
\n’换行将使该行文本的下一行也为空行,但使用’\t’则无此现象。

(2)CStatic();
【注 释】构造一个空的CStatic类的对象。

(3)HBITMAP GetBitmap() const;
【返回值】返回一个当前位图的句柄,如果没有设置位图,则返回NULL。
【注释】此成员函数用来获取先前用成员函数SetBitmap设置的与CStatic类的对象关联
的位图句柄。

(4)HCURSOR GetCursor();
【返回值】返回一个当前图标句柄。如果没有设置图标则返回NULL。
【注释】此成员函数用来获取先前用成员函数SetCursor设置的与CStatic类的对象关联
的光标句柄。

(5)HENHMETAFILE GetEnhMetaFile() const;
【返回值】返回一个当前增强图元文件句柄。如果没有设置增强的图元文件则返回NULL
【注释】此成员函数用来获取先前用成员函数SetEnhMetaFile设置的与CStatic类的对
象关联的增强的图元文件句柄。

(6)HICON GetIcon();
【返回值】返回一个当前图标句柄。如果没有设置增强的图标则返回NULL。
【注释】此成员函数用来获取先前用成员函数SetIcon设置的与CStatic对象关联关联的
图标句柄。

(7)HBITMAP SetBitmap(HBITMAP hBitmap) const;
【返回值】返回先前与此静态控件关联的位图的句柄。如果没有与此静态控件关联的位
图,则返回NULL。
【参 数】
hBitmap
要绘制在此静态控件中的位图句柄。
【注释】此成员函数用来将一个新的位图与此静态控件关联。这个位图将被自动绘制在
此静态控件中。缺省的,它将被绘制在左上角,并且此静态控件将根据位图的大小来调
整尺寸。使用此成员函数必须设置风格SS_BITMAP。

(8)HCURSOR SetCursor(HCURSOR hCursor);
【返回值】返回先前与此静态控件关联的光标的句柄。如果没有与此静态控件关联的光
标,则返回NULL。
【参 数】
hCursor
要绘制在此静态控件中的光标句柄。
【注释】此成员函数用来将一个新的光标与此静态控件关联。这个光标将被自动绘制在
此静态控件中。缺省的,它将被绘制在左上角,并且此静态控件将根据光标的大小来调
整尺寸。使用此成员函数必须设置风格SS_ICON。

(9)HENHMETAFILE SetEnhMetaFile(HENHMETAFILE hMetaFile);
【返回值】返回先前与此静态控件关联的增强图元文件的句柄。如果没有与此静态控件
关联的增强图元文件,则返回NULL。
【参 数】
hMetaFile
要绘制在此静态控件中的增强图元文件句柄。
【注释】此成员函数用来将一个新的增强图元文件与此静态控件关联。这个增强图元文
件将被自动绘制在此静态控件中。缺省的,它将被绘制在左上角,并且此静态控件将根
据增强图元文件的大小来调整尺寸。使用此成员函数必须设置风格SS_ENHMETAFILE。

(10)HICON SetIcon(HICON hIcon);
【返回值】返回先前与此静态控件关联的图标的句柄。如果没有与此静态控件关联的图
标,则返回NULL。
【参 数】
hIcon
要绘制在此静态控件中的图标句柄。
【注释】此成员函数用来将一个新的图标与此静态控件关联。这个图标将被自动绘制在
此静态控件中。缺省的,它将被绘制在左上角,并且此静态控件将根据图标的大小来调
整尺寸。使用此成员函数必须设置风格SS_ICON。


转载:http://www.cnblogs.com/pfa2008/archive/2010/01/25/1655947.html

[VC6 MFC]静态文本框显示带下划线、彩色字体

// LineStatic.cpp : implementation file // #include "stdafx.h" #include "MFCAppVC6.h" #include "Lin...

VC中CStatic设置文字、字体、颜色和OnCtlColor的使用

由于CStatic没有现成的接口,要么自己继承CStatic然后重写WM_CTLCOLOR的响应函数。要么在父窗口重写WM_CTLCOLOR的响应函数,然后调用相应的接口来改变文字颜色,原理如下: ...
  • oket007
  • oket007
  • 2014年08月18日 23:41
  • 1997

stdafx.h和stdafx.cpp的一些解释

有时候在编译一个项目的时候我们会遇到这样的错误: "在查找预编译头时遇到意外的文件结尾。是否忘记了向源中添加“#include "stdafx.h"”?" 那么这个stdafx.h头文件是干什么用...

什么是真正的实时操作系统

做嵌入式系统开发有一段时间了,做过用于手机平台的嵌入式Linux,也接触过用于交换机、媒体网关平台的VxWorks,实际应用后回过头来看理论,才发现自己理解的肤浅,也发现CSDN上好多同学们都对实时、...
  • toy53
  • toy53
  • 2014年03月04日 10:48
  • 480

VC++界面编程之--自定义标签控件(CStatic)皮肤

IPhone聊天泡泡是个很不错的控件,因为它能很友好的给用户一些简短的提示信息,而不失美观。 我也想将这个泡泡,加到我的界面上,用做一些小提示:) 用什么控件做好呢?当然是CStatic控件啦,我...

时钟控件类 public CStatic (VC++)

  • 2010年01月07日 22:40
  • 50KB
  • 下载

CStatic控件的基本使用

  • 2011年04月29日 10:51
  • 288KB
  • 下载

VC++基本控件使用1

转至:http://www.cppblog.com/Lee7/archive/2008/02/21/43066.html  一、如何添加/删除Combo Box内容 1,在Combo Box控件属...

CStatic控件的基本使用(文本、颜色、图标等)

如何动态设置CStatic的相关属性 VC++2010  在窗体上放上ID为IDC_STATIC的CStatic控件,另放一按钮,点击按钮设置静态控件的内容和其它状态,代码如下: void...

CStatic控件的基本使用

CStatic控件的基本使用 CStatic 继承于 CWnd,是一种特殊的窗体。他可以显示文本字符串(这也是最常用的用法)、图标、指针(cursor)、位图和增强图文元件. 通常静态控件不提供输入和...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:VC++ : CStatic控件的基本使用
举报原因:
原因补充:

(最多只允许输入30个字)