缩略图的刷新问题

longju 2010-01-23 11:42:31

\\桌面\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);


}
...全文
509 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
qdbje 2010-01-23
  • 打赏
  • 举报
回复
你可以在画之前:FillRect来清空。。。
yhp1888 2010-01-23
  • 打赏
  • 举报
回复
1、在定时器内用Invalidate(FALSE),定时刷新;
2、每换一图时都用Invalidate(FALSE),当然你必须用代码判断是否换了图。

15,978

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 界面
社区管理员
  • 界面
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧