我的本意是想让窗口滚动条的范围根据我图像的大小来动态的调整,如果我的图像大于初始设置的滚动条范围时在重绘(即OnDraw函数)时重新设置滚动条的范围。可是现在遇到问题是窗口不停的闪烁,该工程是基于对话框的,代码如下:
1、现在对话框的OnInitDialog()创建一个基类是CScrollView的窗口
BOOL CPNJDlg::OnInitDialog()
{
CDialog::OnInitDialog();         CRect rect;
GetClientRect(&rect); //获取对话框客户区大小         //为对话框创建一个用来显示小图的窗口
m_RectImageListWnd=CRect::CRect(m_RectImgDisControlWnd.right,0,rect.Width()*3/4,rect.Height()*2/5);
CRuntimeClass *pViewRuntimeClass=RUNTIME_CLASS(CImageListScrollView);
m_pImageListWnd=(CImageListScrollView*)pViewRuntimeClass->CreateObject();
m_pImageListWnd->Create(m_RectImageListWnd,this);
m_pImageListWnd->OnInitialUpdate();         return TRUE;
}2、void CImageListScrollView::OnDraw(CDC* pDC)
{
CDocument* pDoc = GetDocument(); //设置子图像窗口的滚动条范围
if(m_ImageCount>(m_WidthNum*m_HeightNum)) //当子图像数目超过不使用滚动条时窗口无法容下的数目时,重新设置滚动条范围
{
CSize sizeTotal;
sizeTotal.cx = m_WidthWin;
sizeTotal.cy = (m_HeightImage+m_DistanceImage)*(int)ceil( (double)m_ImageCount/m_WidthNum );
SetScrollSizes(MM_TEXT, sizeTotal);
} int oldmode=pDC->SetStretchBltMode(HALFTONE);
for(int i=0;i<m_ImageCount;i++)
{
//子图像原始尺寸
m_WidthOriginal=m_pImageListInfo[m_CheckItemIndex].Bitmap[i].dwWidth;
m_HeightOriginal=m_pImageListInfo[m_CheckItemIndex].Bitmap[i].dwHeight;
//第i幅图像在窗口中的第(i/m_WidthNum)行,第(i%m_WidthNum)列
pDC->StretchBlt( (i%m_WidthNum)*(m_WidthImage+m_DistanceImage)+m_DistanceImage/2 (i/m_WidthNum)*(m_HeightImage+m_DistanceImage)+m_DistanceImage/2 ,
m_WidthImage,m_HeightImage,&m_memDCList[i], 0, 0, m_WidthOriginal, m_HeightOriginal, SRCCOPY );
}
pDC->SetStretchBltMode(oldmode);}在调用OnDraw之前已经将图像数据放入m_memDCList[i]中去了。还请各位大侠救救我啊!