MFC中控件位图显示

使用静态文本控件 + picture控件显示位图的函数封装如下:

其中OnChangePic函数支持位图根据控件大小缩放,主要用到的是StretchBlt函数。

//<span style="font-family: Arial, Helvetica, sans-serif;">IDC_PIC2是静态文本控件的ID;</span><span style="font-family: Arial, Helvetica, sans-serif;">IDB_PIC是位图资源的ID</span>
void CXXXDlg::OnShowStaticBitmap()
{
	//获得指向静态控件的指针
	CStatic *pStatic=(CStatic *)GetDlgItem(IDC_PIC2);
	//获得位图句柄
	HBITMAP hBitmap=::LoadBitmap(AfxGetApp()->m_hInstance, MAKEINTRESOURCE(IDB_PIC));
	//设置静态控件的样式,使其可以使用位图,并试位标显示使居中
	pStatic->ModifyStyle(0xF,SS_BITMAP|SS_CENTERIMAGE);
	//设置静态控件显示位图
	pStatic->SetBitmap(hBitmap); 
}

//<span style="font-family: Arial, Helvetica, sans-serif;">IDB_PICTURE是位图资源的ID,</span><span style="font-family: Arial, Helvetica, sans-serif;">IDC_PIC4是Picture控件的ID</span><span style="font-family: Arial, Helvetica, sans-serif;">
</span>

void CXXXTDlg::OnChangePic(UINT IDB_PICTURE)
{
	Invalidate(); 

	CBitmap m_bmp;
	m_bmp.LoadBitmap(IDB_PICTURE);//加载位图
	CPaintDC dc(this); 
	CRect r;
	GetDlgItem(IDC_PIC4)->GetWindowRect(&r);//获得控件客户窗口大小
	ScreenToClient(&r);
	HBRUSH brush = (HBRUSH)::GetStockObject(GRAY_BRUSH); 
	::FillRect(dc.m_hDC,&r,brush);//填充背景
	dc.SetStretchBltMode(HALFTONE);
	//将位图选进内存DC中
	CDC memdc;
	memdc.CreateCompatibleDC( &dc );
	CBitmap* pOldBmp= memdc.SelectObject(&m_bmp);
	//获得位图参数
	BITMAP bmp;
	m_bmp.GetBitmap(&bmp);
	dc.StretchBlt(r.left,r.top,r.Width(),r.Height(),&memdc,0,0,bmp.bmWidth,bmp.bmHeight,SRCCOPY);
	memdc.SelectObject(pOldBmp);//还原画刷
}


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值