GreenOpenPaint的实现(三)添加标尺
标尺对于图像处理程序,特别是需要精确测量的程序来说意义很大。这里进行了专门的研究。
基于现在已经引入的类和定义的变量,主要讲一讲如何调用。
1、添加放大缩小
void CGreenOpenPaintDoc::ScaleFactorZoomIn(void)
{
if (m_fScaleFactor < ZOOM_MAX)
{
m_fScaleFactor = m_fScaleFactor*2;
}
}
void CGreenOpenPaintDoc::ScaleFactorZoomOut(void)
{
if (m_fScaleFactor > ZOOM_MIN)
{
m_fScaleFactor = m_fScaleFactor /2;
}
}
2、在view中添加添加warpper
void CGreenOpenPaintView::OnUpdate(CView* pSender, LPARAM lHint, CObject* pHint)
{
SetScrollSizes(MM_TEXT,
CSize(int(m_pDoc->m_image.Width()*m_pDoc->m_fScaleFactor),
int(m_pDoc->m_image.Height()*m_pDoc->m_fScaleFactor)));
UpdateRulersInfo(RW_POSITION, GetScrollPosition());
Invalidate();
}
void CGreenOpenPaintView::UpdateRulersInfo(int nMessage, CPoint ScrollPos, CPoint Pos)
{
if (!m_pParent)
return;
CSize m_ImageSize = CSize(m_pDoc->m_image.Width(),m_pDoc->m_image.Height());
stRULER_INFO pRulerInfo;
pRulerInfo.uMessage = nMessage;
pRulerInfo.ScrollPos = ScrollPos;
pRulerInfo.Pos = Pos;
pRulerInfo.DocSize = m_ImageSize;
pRulerInfo.fZoomFactor =
m_pDoc
->m_fScaleFactor;
m_pParent->UpdateRulersInfo(pRulerInfo);
}
3、mainframe中添加
warpper
void CMainFrame::UpdateRulersInfo(stRULER_INFO stRulerInfo)
{
m_Rulers.UpdateRulersInfo(stRulerInfo);
}
void CMainFrame::ShowRulers(bool bShow)
{
m_Rulers.ShowRulers(bShow);
}
注意要把m_ruler添入
private:
CRulerSplitterWnd m_Rulers;
4、重写mainframe 的 oncreateclient事件
BOOL CMainFrame::OnCreateClient(LPCREATESTRUCT lpcs,CCreateContext* pContext)
{
if (!m_Rulers.CreateRulers(this, pContext)) {
TRACE("rulers创建失败\n");
return CFrameWnd::OnCreateClient(lpcs, pContext);
}
return TRUE;
}
这个时候标尺出现,只不过由于没有指示量纲,所以没有画刻度
p.s 注意这个时候,一定要在view创建的时候进行scroll尺度的初始化,否则会assert错误
CGreenOpenPaintView
::
CGreenOpenPaintView
()
: m_pParent(NULL)
, m_pDoc(NULL)
{
// TODO: 在此处添加构造代码
CSize sizeTotal;
sizeTotal.cx = sizeTotal.cy = 100;
SetScrollSizes(MM_TEXT, sizeTotal);
}
当导入图片的时候,出现真实标尺。这里是按照厘米这个量纲进行计算的。
代码
http://files.cnblogs.com/files/jsxyhelu/GreenOpenPaint2.rar
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!