
\\桌面\3.JPG
在VC开发中需要显示缩略图,显示代码如下。但是其刷新有点问题,如果前一次的图片大,后一次的图片小,就会在在大的那片区域留下原来的图,无法刷新,只要最小化一下就能刷新了。如果添加Invalidate(FALSE)不管用,添加Invalidate(TRUE)什么都不显示
void CInformDlg::DrawMiniImage()
{
if( !IsWindowVisible() )
{
TRACE("The window is not visible!!\n");
return;
}
CFrameWnd* lpFrameWnd = STATIC_DOWNCAST(CFrameWnd, AfxGetMainWnd());
if( lpFrameWnd == NULL ) return;
CSateProductDisplayView* lpView = (CSateProductDisplayView*)lpFrameWnd->GetActiveFrame()->GetActiveView();
if (!lpView->m_bReadFileOK)
{
return;
}
float fSmallCoef;
CDC tempDC;
CStatic* pic = (CStatic*)GetDlgItem( IDC_MINIIMAGE );
CClientDC dc( pic );
pic->GetClientRect( PicCRect );
tempDC.CreateCompatibleDC(&dc);
//PicCRect是绘制区的CRect
int ClientW = PicCRect.Width();
int ClientH = PicCRect.Height();
tempDC.SetStretchBltMode( HALFTONE );
if (ClientW/lpView->m_cShowImage.m_iShowWid > ClientH/lpView->m_cShowImage.m_bmpHeight)
{
fSmallCoef = ClientH*1.0f/lpView->m_cShowImage.m_bmpHeight;
}
else
{
fSmallCoef = ClientW*1.0f/lpView->m_cShowImage.m_iShowWid;
}
StretchDIBits(dc.GetSafeHdc(),0,0,(int)(lpView->m_cShowImage.m_iShowWid*fSmallCoef),(int)(lpView->m_cShowImage.m_bmpHeight*fSmallCoef),
0,0,lpView->m_cShowImage.m_iShowWid,lpView->m_cShowImage.m_bmpHeight,
lpView->m_cShowImage.m_lpBmp,(LPBITMAPINFO)&lpView->m_cShowImage.m_bmpInfoHeader,DIB_RGB_COLORS,SRCCOPY);
}