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格式就可以了。
本文详细介绍了如何使用CStatic类动态创建控件,包括显示文本、图标和位图的方法,以及注意事项。

654

被折叠的 条评论
为什么被折叠?



