最近在做东西
想写一个功能完整的view
包括
1.缩放
2.视图位置平移
3.scroll
总之就是类似于acad的这种可以自由观察的view
郁闷中
用了双缓存技术防止闪烁
但是发现不知道应当如何设置mapmode
视图的平移缩放也有问题
求教各位大侠PS试用的是MFC 的 SDI框架
谢谢了。求灵感
想写一个功能完整的view
包括
1.缩放
2.视图位置平移
3.scroll
总之就是类似于acad的这种可以自由观察的view
郁闷中
用了双缓存技术防止闪烁
但是发现不知道应当如何设置mapmode
视图的平移缩放也有问题
求教各位大侠PS试用的是MFC 的 SDI框架
谢谢了。求灵感
1、首先你创建一个基于SCrollView的单文档工程。
2、为"打开"菜单编辑,给它定义支持显示图像的类型。
3、编写缩放,图像居左、居右、居中代码(网上有源代码,可以下载到);参考demo:
CxImage-------->http://www.codeproject.com/bitmap/cximage.asp
下载一个源代码下来看,这是个非常优秀的图像处理类库,几乎所有的图像格式都能支持。
作为图形平台
就像AutoCAD这种的
现在要搭出一个框架,然后实现视图缩放、平移就行了这个是我的参考代码
这段代码用来通过滚轮实现缩放,不过,好像总归觉得缩放的时候视图很不听话
而且,没有用双缓存的技术,导致闪烁很厉害
引入了双缓存之后,就不缩放了
不过发现不行唉....
BOOL CMyView::OnMouseWheel(UINT nFlags, short zDelta, CPoint pt)
{
// TODO: Add your message handler code here and/or call default
m_nScale += zDelta/120;
if ( m_nScale < 0 )
{
m_nScale = 0;
}
if ( m_nScale > 9 )
{
m_nScale = 9;
}
CDC* pDC;
pDC = GetWindowDC();
SetDrawMode(pDC);
Invalidate();
return CView::OnMouseWheel(nFlags, zDelta, pt);
}int CMyView::SetDrawMode(CDC *pDC)
{
CRect rect;
GetClientRect(&rect);
CSize size(rect.Width(),rect.Height());
pDC->SetMapMode(MM_ANISOTROPIC);
int nSize = max(size.cx, size.cy);
pDC->SetWindowExt(nSize,nSize);
pDC->SetViewportExt(nSize*fScale[m_nScale], -nSize*fScale[m_nScale]);
pDC->SetViewportOrg(min(size.cx, size.cy)/20,min(size.cx, size.cy)/20*19);
return 1;
}fScale[m_nScale], 是一个固定的缩放倍数的数组
m_nSize是一个成员变量
对于SetMapMode()函数感觉用起来既不得心也不应手
郁闷中求教...
最好有示例代码,一个View的框架平移的函数自己也写过,就是鼠标左键可以实现拖动View,但是总觉得怪怪的,屏幕上面随便画一个园,因为一平移之后再缩放屏幕上东西就找不到了....