关于CScrollView滚动条的问题,谢谢大家了
本人大菜鸟,请问一下,为什么我的CScrollView在拖动滚动条时,会出现图像重叠,一点击view又正常了,是不是哪里弄错了,谢谢大家
这个构造View的代码
pContext.m_pCurrentDoc = new CDlgDocument();
pContext.m_pNewViewClass = RUNTIME_CLASS(CViewTestView);
pView = (CViewTestView *)((CFrameWnd*)pFrameWnd)->CreateView(&pContext);
ASSERT(pView);
pView->m_nMapMode = MM_TEXT;
pView->m_paintbox_w = 800;
pView->m_paintbox_h = 500;
pView->ShowWindow(SW_NORMAL);
pView->MoveWindow(200, 180, 800, 500);
pView->m_type = NONE;
//因为要显示滚动条,所以必须比View的宽高要大
CSize sizeTotal;
sizeTotal.cx = 1000;
sizeTotal.cy = 1000;
pView->SetScrollSizes(MM_TEXT, sizeTotal);
/////////////////
View中OnPaint()中的代码
CPaintDC dc(this); // device context for painting
// 不为绘图消息调用 CView::OnPaint()
int width = m_paintbox_w;
int height = m_paintbox_h;
CDC MemDC; //首先定义一个显示设备对象
CBitmap MemBitmap; //定义一个位图对象
MemDC.CreateCompatibleDC(NULL);
MemBitmap.CreateCompatibleBitmap(&dc, width, height);
CBitmap *pOldBit = MemDC.SelectObject(&MemBitmap);
//在这里画图
MemDC.FillSolidRect(0, 0, width, height, RGB(255,255,255));
//绘图
Graphics g(MemDC.m_hDC);
Image chiefimage(L"d://Pic_Chief_Speak.bmp");
g.DrawImage(&chiefimage, 0, 0, 60, 60);
//结束画图
dc.BitBlt(0,0,width,height,&MemDC,0,0,SRCCOPY); //绘图完成后的清理,把前面的pOldBit选回来.在删除MemBitmap之前要先从设备中移除它
MemDC.SelectObject(pOldBit);
MemBitmap.DeleteObject();
MemDC.DeleteDC();
...全文
相关推荐
MDI CScrollView双缓冲画图程序
在CScrollView中,坐标转换是一个关键的问题。CScrollView会根据当前的视口位置和缩放比例自动调整坐标系统。
MFC单文档添加大于32767滚动条并画线
在这个特定的问题中,我们面临的是一个超过标准32767像素点限制的滚动条。
浅谈VC++中滚动条的编程1.pdf
#### CScrollView类的局限性虽然CScrollView类提供了一种简便的方式来实现滚动条功能,但对于一些特定的应用场景,如需要实现无级缩放的矢量图像系统时,使用该类可能会存在以下问题:-
单文档视图自绘滚动条
这可以通过重载OnSize函数来完成,更新滚动条的属性并调用UpdateData来刷新视图。在开发过程中,你可能会遇到性能问题,特别是在大量数据的视图中。
cscrollview double buffer
在用户界面中,当一个视图区域的内容超过屏幕显示范围时,滚动条就会出现,允许用户查看不可见的部分。双缓冲技术则是解决在窗口中进行大量绘图操作时出现闪烁问题的有效方法。


