直接在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%:
......
}
新聞熱點
疑難解答