单文档视图结构,在视图中显示了图片,在图片大小超过视图时,需要拖动滚动条或鼠标查看,
可是在拖动时会出现闪烁情况,请问此情况该如何解决,最好给个例子~谢谢~~
可是在拖动时会出现闪烁情况,请问此情况该如何解决,最好给个例子~谢谢~~
解决方案 »
- 关于网页动画编程的问题
- 关于文件写入
- 基础问题
- Dialog的classname和windowname
- 请教:使用MFC中的CDaoRecordset类实现模糊查询,我的sql语句是:"select * from foodToProducer where foodName like '%"+ strTemp +"%'
- 进程间的数据共享(用发送消息的方式)问题(最快回答,结100分,谢谢)
- 哪里有DDK下载?masterz的读主板信息要DDK,是吗?
- 串口发送
- 为何无法注册窗口类啊~~~~!!
- mfc代码编译出错误(vs2008编写的,在vs2012上运行)
- VC实现向其它程序的图片工具条发送消息.
- 使用LoadLibrary()调用DLL,使用FreeLibrary()释放之后出现访问报错,这个问题应该比较普遍
{
return TRUE;
}另外注意如果图片比视图小的时候要填充额外的空隙
1句话.双缓存.
OnEraseBkgnd 里return true。这样九可以了。
class C***View : public CView
{
......
protected:
CBitmap* m_pBitmap;
CDC * m_pdcMemory;
CRect m_clientRect;
......
}***View.cpp文件中用“Ctrl+W”给C***View类添加WM_PAINT消息映射函数OnPaint和OnInitalUptade成员函数。构造函数和析构函数如下:C***View::CImageView()
{
// TODO: add construction code here
m_pdcMemory = new CDC;
m_pBitmap = new CBitmap;
}C***View::~CImageView()
{
delete m_pBitmap; // already deselected
delete m_pdcMemory;
}OnInitialUpdate() 和OnPaint()
void C***View::OnInitialUpdate()
{
CView::OnInitialUpdate();
// TODO: Add your specialized code here and/or call the base class
CSize sizeTotal(1800, 1050);
// creates the memory device context and the bitmap
if (m_pdcMemory->GetSafeHdc() == NULL)
{
CClientDC dc(this);
OnPrepareDC(&dc);
CRect rectMax(0, 0, sizeTotal.cx, sizeTotal.cy);
m_pdcMemory->CreateCompatibleDC(&dc);
// makes bitmap same size as display window
m_pBitmap->CreateCompatibleBitmap(&dc, rectMax.right,rectMax.bottom);
}
}void C***View::OnPaint()
{
C***Doc * pDoc=GetDocument();
CPaintDC dc(this); // device context for painting
OnPrepareDC(&dc);
CRect rectUpdate;
dc.GetClipBox(&rectUpdate);
CBitmap* pOldBitmap = m_pdcMemory->SelectObject(m_pBitmap);
m_pdcMemory->SelectClipRgn(NULL);
m_pdcMemory->IntersectClipRect(&rectUpdate);
CBrush backgroundBrush((COLORREF) ::GetSysColor(COLOR_WINDOW));
CBrush* pOldBrush = m_pdcMemory->SelectObject(&backgroundBrush);
m_pdcMemory->PatBlt(rectUpdate.left, rectUpdate.top,
rectUpdate.Width(), rectUpdate.Height(),
PATCOPY);
OnDraw(m_pdcMemory);///////OnDraw()这个函数,你原来里面怎么显示图象就怎么显示 dc.BitBlt(rectUpdate.left, rectUpdate.top,
rectUpdate.Width(), rectUpdate.Height(),
m_pdcMemory, rectUpdate.left, rectUpdate.top,
SRCCOPY);////将内存DC复制到dc中
m_pdcMemory->SelectObject(pOldBitmap);
m_pdcMemory->SelectObject(pOldBrush);
}程序中需要刷新时(例如在OnMouseMove()中)的刷新语句用
InvalidateRect(m_clientRect,FALSE);//参数含义自己查MSDN
不要直接用Invalidate()等其他函数。这个在《VC6.0内幕》第四版第10章有介绍。
还是在OnMouseMove里面invalidate然后在Ondraw里面画?