MFC--picture control的用法


参考文章:MFC图像处理CImage类常用代码

一、通过资源ID的方式加载图片

图片资源文件为BMP,通过BMP资源ID获取bitmap

void CCTDlg::draw()
{
CBitmap bitmap;
bitmap.LoadBitmapW(IDB_BITMAP1);
CStatic* pStatic = (CStatic*)GetDlgItem(IDC_STATIC_PHOTO);
pStatic->ModifyStyle(0xF, SS_BITMAP | SS_CENTERIMAGE);
pStatic->SetBitmap((HBITMAP)bitmap);
}

二、通过文件路径的方式加载图片

bmp文件

通过bmp文件路径加载图片,loadImage()函数可改变图片大小。

void CCTDlg::draw()
{
HBITMAP bitmap = (HBITMAP)::LoadImage(AfxGetInstanceHandle(),
TEXT(".\\res\\1.bmp"),
IMAGE_BITMAP,
600,
200,
LR_DEFAULTCOLOR | LR_LOADFROMFILE | LR_CREATEDIBSECTION);
CStatic* pStatic = (CStatic*)GetDlgItem(IDC_STATIC_PHOTO);
pStatic->ModifyStyle(0xF, SS_BITMAP | SS_CENTERIMAGE);
pStatic->SetBitmap((HBITMAP)bitmap);
}

其他格式文件

其他格式的文件要先转换成bmp,也可用于bmp文件

void CCTDlg::draw()
{
CStatic* pStatic = (CStatic*)GetDlgItem(IDC_STATIC_PHOTO); // 得到 Picture Control 句柄
CImage image;
image.Load(TEXT(".\\res\\yyl.png"));
HBITMAP bitmap = image.Detach();
pStatic->ModifyStyle(0xF, SS_BITMAP | SS_CENTERIMAGE);
pStatic->SetBitmap(bitmap);
image.Destory();
}

三、调整大小显示图片

根据MFC控件大小CImage类实例图片显示

void CCTDlg::draw()
{
CStatic* pStatic = (CStatic*)GetDlgItem(IDC_STATIC_PHOTO);//得到控件
CImage image;
image.Load(TEXT(".\\res\\1.bmp")); //加载图片
CRect zcRect;
pStatic->GetClientRect(&zcRect); //得到尺寸
image.Draw(pStatic->GetDC()->m_hDC,
zcRect.left,
zcRect.top,
zcRect.Width(),
zcRect.Height());
image.Destroy();
}

根据CImage类实例的大小调整MFC控件

void CCTDlg::draw()
{
CImage image;
image.Load(TEXT(".\\res\\2.jpg")); //加载图片
// 将整控件调整为与图像同一尺寸
CStatic* pStatic = (CStatic *)GetDlgItem(IDC_STATIC_PHOTO);
pStatic->SetWindowPos(NULL,
0,
0,
image.GetWidth(),
image.GetHeight(),
SWP_NOMOVE);
pStatic->ModifyStyle(0xF, SS_BITMAP | SS_CENTERIMAGE);
pStatic->SetBitmap((HBITMAP)image.Detach());
}

四、清空图片

void CCTDlg::clear()
{
CStatic* pStatic = (CStatic*)GetDlgItem(IDC_STATIC_PHOTO); // 得到 Picture Control 句柄
pStatic->SetBitmap(NULL);
this->RedrawWindow();
}

五、释放空间

image.Destroy(); //释放CImage对象
pStatic->ReleaseDC(Dc); //释放CDC、
posted @   CryCat  阅读(1175)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 25岁的心里话
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现
点击右上角即可分享
微信分享提示