CStatic使用总结

CStatic类对应Toolbox中的Static Text和Picture Control控件。
本篇主要研究怎样动态创建CStatic控件,相应的静态CStatic控件就会触类旁通。
先看一下CStaic::Create函数的原型:
BOOL Create(
   LPCTSTR lpszText,
   DWORD dwStyle,
   const RECT& rect,
   CWnd* pParentWnd,
   UINT nID = 0xffff 
);
lpszText   --- 显示的文本
dwStyle    --- 窗口风格
               【通用】
               WS_CHILD    子窗口,必须有
               WS_VISIBLE  窗口可见
               【CStatic专用】
               SS_ICON     显示Icon
               SS_BITMAP   显示Bitmap
               SS_NOTIFY   向父窗口发送事件消息
               SS_SUNKEN   控件周边有半沉的3D边框 
rect       --- 位置及大小
pParentWnd --- 父窗口
nID        --- ID
一、显示文本
窗口风格:
       SS_LEFT   ---  文字左对齐
       SS_CENTER ---  文字居中对齐
       SS_RIGHT  ---  文字右对齐
CStatic *pStaticText = new CStatic();
pStaticText->Create(
    TEXT("Hello Kitty"),
    WS_CHILD | WS_VISIBLE | SS_LEFT,
    CRect(10, 10, 100, 100),
    this);

// 设置和对话框一样的字体  
pStaticText->SetFont(this->GetFont());
二、显示ICON
窗口风格:
SS_CENTERIMAGE --- 使ICON居中显示,若Icon的实际大小大于控件的大小,则只显示居中的部分Icon
若不指定该风格,则Create函数中rect指定的大小不起作用,控件会根据Icon的实际大小调整控件大小到刚好合适。
CStatic *pStaticIcon = new CStatic();
pStaticIcon->Create(
    TEXT(""),
    WS_CHILD | WS_VISIBLE | SS_ICON | SS_CENTERIMAGE,
    CRect(10, 10, 100, 100),
    this);
HICON hIcon = ::LoadIcon(AfxGetInstanceHandle(), MAKEINTRESOURCE(IDI_ICON1));
if (NULL != hIcon)
{
    pStaticIcon->SetIcon(hIcon);
}
三、显示Bitmap
窗口风格:
SS_CENTERIMAGE --- 使Bitmap居中显示,若Bitmap的实际大小大于控件的大小,则只显示居中的部分Bitmap
若不指定该风格,则Create函数中rect指定的大小不起作用,控件会根据Bitmap的实际大小调整控件大小到刚好合适。
CStatic *pStaticBitmap = new CStatic();
pStaticBitmap->Create(
	TEXT(""),
	WS_CHILD | WS_VISIBLE | SS_BITMAP | SS_CENTERIMAGE,
	CRect(10, 10, 100, 100),
	this);
HBITMAP hBitmap = ::LoadBitmap(AfxGetInstanceHandle(), MAKEINTRESOURCE(IDB_BITMAP1));
if (NULL != hBitmap)
{
	pStaticBitmap->SetBitmap(hBitmap);
}
Note:
若想从本地磁盘加载图片,请使用以下代码:
    HBITMAP hBitmap = (HBITMAP)::LoadImage(
        AfxGetInstanceHandle(),
        TEXT("D:\\test.bmp"), 
        IMAGE_BITMAP, 
        50, 50, 
        LR_DEFAULTCOLOR | LR_LOADFROMFILE | LR_CREATEDIBSECTION);
LR_DEFAULTCOLOR     --- 指定按照原图的颜色加载图片,不可少
LR_LOADFROMFILE     --- 加载外部的Bitmap,一定要指定
LR_CREATEDIBSECTION --- 一般会指定
50,50               --- 指定图片大小                        
                        如要若按照图片本身的大小加载,则设置cx,cy为0,0,                        
                        并且在最后的标志位加上|LR_DEFAULTSIZE

注意:从网上下载的Bitmap图片可能用上面的方法加载失败,返回的HBITMAP为NULL,GetLastError()返回0,这个一般是图片格式的问题,可以用Windows的画图程序打开Bitmap再另存为24位位图的bmp格式就可以了。

重载静态文本控件,功能如下 //功能:设置字体大小 //输入:lfHeight字体大小,单位为像素,不能为负数,当为0时表示采用系统默认大小 //输出:无 //注:内部已经刷新 //王彬 20120710 void SetTextHeight(LONG lfHeight = 0); //功能:设置字体宽度 //输入:lfWidth字体宽度,单位为像素,不能为负数,当为0时表示采用系统默认大小 //输出:无 //注:内部已经刷新 //王彬 20120710 void SetTextWidth(LONG lfWidth = 0); //功能:设置字体颜色 //输入:clrText字体颜色 //输出:无 //注:内部已经刷新 //王彬 20120710 void SetTextColor(COLORREF clrText); //功能:设置字体粗细 //输入:lfWeight粗细的数值,范围为0-1000,当为0时表示默认 //输出:无 //注:内部已经刷新,当数值小于0或大于1000时,都自动设置为0,表示采用默认值 //王彬 20120710 void SetTextWeight(LONG lfWeight); //功能:设置字体是否为斜体 //输入:bItalic是否为斜体,true为斜体,false为非斜体 //输出:无 //注:内部已经刷新 //王彬 20120710 void SetTextItalic(bool bItalic); //功能:设置字体指定每一行文本输出时相对于页面底端的角度。 //输入:lfEscapement以十分之一度为单位指定每一行文本输出时相对于页面底端的角度。 //输出:无 //注:内部已经刷新,逆时针为正,顺时针为负 //王彬 20120710 void SetTextEscapement(LONG lfEscapement); //功能:设置字体指定字符基线相对于页面底端的角度。 //输入:lfOrientation以十分之一度为单位指定字符基线相对于页面底端的角度。 //输出:无 //注:内部已经刷新,逆时针为正,顺时针为负 //王彬 20120710 void SetTextOrientation(LONG lfOrientation); //功能:设置字体是否带下划线。 //输入:bUnderline是否带下划线,true为带下划线,false为不带下划线。 //输出:无 //注:内部已经刷新 //王彬 20120710 void SetTextUnderline(bool bUnderline); //功能:设置字体是否带删除线。 //输入:bUnderline是否带删除线,true为带删除线,false为不带删除线。 //输出:无 //注:内部已经刷新 //王彬 20120710 void SetTextStrikeOut(bool bStrikeOut); //功能:设置字体名字。 //输入:sFaceName字体名字。 //输出:无 //注:内部已经刷新 //王彬 20120710 void SetTextFaceName(CString sFaceName); //功能:设置字体字符集。 //输入:lfCharSet字体字符集,通常情况对于中文的Windows系统,也可以直接用DEFAULT_CHARSET表示默认字符集 // 英文字体可以用ANSI_CHARSET,简体中文字体可以用GB2312_CHARSET,繁体中文字体可以用CHINESEBIG5_CHARSET //输出:无 //注:内部已经刷新 //王彬 20120710 void SetTextCharSet(BYTE lfCharSet); //功能:字体样式采用系统默认 //输入:无 //输出:无 //注:内部已经刷新 //王彬 20120711 void SetTextDefault(); //功能:设置对齐方式 //输入:dwAlign对齐方式 ALIGN_LEFT 左对齐,ALIGN_RIGHT 右对齐,ALIGN_MIDDLE 水平居中对齐 //ALIGN_TOP 上对齐,ALIGN_BOTTOM 底对齐,ALIGN_VCENTER 垂直居中对齐, ALIGN_CENTER 水平垂直居中对齐 //输出:无 //注:内部已经刷新,垂直居中和底部对齐只能为一行 //王彬 20120711 void SetAlign(DWORD dwAlign); //功能:设置背景图片 //输入:sPicPath 图片路径, nMode为贴图方式 //输出:无 //注:内部已经刷新 //王彬 20120711 bool SetBKPicture(CString sPicPath, DWORD dwMode); //功能:设置背景是否贴图 //输入:bShow是否背景贴图, true为贴图, false为不贴图 //输出:无 //注:内部已经刷新 //王彬 20120711 bool ShowPicture(bool bShow); //功能:设置背景颜色 //输入:clrBK背景颜色 //输出:无 //注:内部已经刷新 //王彬 20120711 void SetBKColor(COLORREF clrBK); //功能:设置背景透明 //输入:无 //输出:无 //注:内部已经刷新 //王彬 20120711 void SetBKTransparent(); //功能:刷新背景 //输入:无 //输出:无 //王彬 20120712 void RedrawStatic(); //功能:绘制边框 //输入:nWidth边框宽度,clrBorder边框颜色 //输出:无 //王彬 20120714 void SetBorder(int nWidth, COLORREF clrBorder);
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值