首页 > 学院 > 开发设计 > 正文

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

2019-11-11 02:53:52
字体:
来源:转载
供稿:网友
直接在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控件不会跟着变化,需要将picture控件的Center Image属性设置为TRUE,控件才会自动拉伸。然后再添加上面代码

但是这样做的弊端是图片被缩放后不如原来的清晰,图片上文字虚化并有毛刺,最后没有采用该方案;

直接做了几张不同分辨率下的图,代码中判断dpi进行加载

switch(dpi)

{

case 100%:

setbitmap(100%);

break;

case 120%:

......

}


发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表