直接在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%:
......
}
新闻热点
疑难解答