MFC中picture控件,将bitmap根据控件大小缩放

在MFC程序的DPI适配过程中,发现Picture控件在dpi变化时不自动调整大小。通过设置Center Image属性为TRUE,可以使控件拉伸图片,但会导致图片清晰度下降,文字虚化。为解决这个问题,采用了根据DPI选择不同分辨率的位图进行加载的方法,例如在100% DPI时加载100%的位图。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

直接在OnInitDialog()函数中添加即可;
	CRect rc;
	m_ctrlPic.GetClientRect(&rc);
	CDC* pdcpic = m_ctrlPic.GetDC();  //m_ctrlPic是Picture控件的变量  

	CBitmap bitmap1;
	bitmap1.LoadBitmap(IDB_BITMAP_PROTOCOL_3);   //IDB_BITMAP_PROTOCOL_3是要加载的位图的ID  
	BITMAP bmp1;
	bitmap1.GetBitmap(&bmp1);
	CDC memdc;
	memdc.CreateCompatibleDC(pdcpic);
	memdc.SelectObject(&bitmap1);

	CDC ppdc;
	ppdc.CreateCompatibleDC(pdcpic);
	CBitmap bmpbuf;                    //bmpbuf是要放入控件中的位图  
	bmpbuf.CreateCompatibleBitmap(pdcpic, rc.right, rc.bottom);
	ppdc.SelectObject(&bmpbuf);

	ppdc.StretchBlt(rc.left, rc.top, rc.Width(), rc.Height(), &memdc, 0, 0, bmp1.bmWidth, bmp1.bmHeight, SRCCOPY);  //将IDB_BITMAP_PROTOCOL_3复制到bmpbuf位图中,并按指定的大小转换  

	m_ctrlPic.SetBitmap((HBITMAP)bmpbuf.Detach());
	m_ctrlPic.ReleaseDC(pdcpic);
	memdc.DeleteDC();
	ppdc.DeleteDC();

这是在做MFC程序DPI适配中遇到的问题,dpi改变后picture控件不会

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值