首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > VC/MFC >

小弟我在scrollview里面用drawicon函数画了很多的icon图标,但是多拖动几下滚动条,图标就不见了

2014-06-09 
我在scrollview里面用drawicon函数画了很多的icon图标,但是多拖动几下滚动条,图标就不见了?我在scrollview

我在scrollview里面用drawicon函数画了很多的icon图标,但是多拖动几下滚动条,图标就不见了?
我在scrollview里面用drawicon函数画了很多的icon图标,同时我用根据图标的数量,为了让全部图标都显示,用SetScrollSize设置了滚动范围,同时我在WM_VSCROLL但是多拖动几下滚动条,图标就不见了?

[解决办法]
是在OnDraw中画的吗?
或者有可能存在GDI资源泄露,有些Object没有DeleteObject
[解决办法]
SCrollView动后发生重绘,你只要在OnDraw或OnPaint中再画一次就可以了.或者把图片保存下来.
用元文件或者memoryDC皆可.
[解决办法]
补充:你的问题是画的时候应该没有进行坐标转换.
应该把物理坐标转成逻辑坐标.

以下参考:
void CGraphicsView::OnLButtonUp(UINT nFlags, CPoint point)
{

CClientDC dc(this);
//画笔颜色
CPen MyPen(m_nLineStyle,m_nLineWidth,m_clr);
dc.SelectObject(&MyPen);
CBrush *pBrush = CBrush::FromHandle((HBRUSH)GetStockObject(NULL_BRUSH));//取得透明的Brush
dc.SelectObject(pBrush);

switch(m_nDrawType)
{
case 1:
dc.SetPixel(point, m_clr);
break;
case 2:
dc.MoveTo(m_ptrOrigin);
dc.LineTo(point);

break;
case 3:
dc.Rectangle(CRect(m_ptrOrigin, point));
break;
case 4:
dc.Ellipse(CRect(m_ptrOrigin, point));
break;
default:
break;
}
this-> Invalidate();

转换坐标
this-> OnPrepareDC(&dc);
dc.DPtoLP(&m_ptrOrigin);
dc.DPtoLP(&point);

保存图形
CGraph *pGraph = new CGraph(m_nDrawType,m_ptrOrigin,point);
m_ptrArray.Add(pGraph);

CScrollView::OnLButtonUp(nFlags, point);
}

在OnDraw()中进行把数据取出来进行画图
应该可以了.
[解决办法]
HICON hIcon = m_ImageListThumb.ExtractIcon(i-1);
DrawIconEx(pDC-> m_hDC,nLeft,nTop,hIcon,THUMBNAIL_WIDTH,THUMBNAIL_HEIGHT,0,NULL,DI_NORMAL);

DestroyIcon(hIcon); //加上这一句

热点排行