MFC 实现 图片的拖动 放大缩小和区域显示


1、图片在指定区域显示、采用刷图方式、可以随指针拖动、放大 缩小、 2、文件路径是通过参数传递的 3、程序中SHOW按钮显示图片 BT1 BT2 没有很好的代码效果 测试使用 4、Imageshow.h和CPP 可以再其他工程中直接使用、前提引用CXimage的Lib库 5、使用了CXimage的Lib库 在项目属性中配置下 6、可直接使用
资源截图
代码片段和文件信息
// ImageShow.cpp : 实现文件
//

#include “stdafx.h“

#include “ImageShow.h“


// CImageShow
#define BACK_CLORO_BLK RGB(105105105)

IMPLEMENT_DYNAMIC(CImageShow CWnd)

CImageShow::CImageShow(HWND pParentWnd /* = NULL */)
: m_bIsLButtonDown(FALSE)
 m_DrowRc(0000)
 m_VisableRc(0000)
 m_ImRc(0000)
 m_pt(00)
{

}

CImageShow::~CImageShow()
{
}


BEGIN_MESSAGE_MAP(CImageShow CWnd)
ON_WM_ERASEBKGND()
ON_WM_LBUTTONDOWN()
ON_WM_LBUTTONUP()
ON_WM_MOUSEMOVE()
ON_WM_MOUSEWHEEL()
ON_WM_DESTROY()
END_MESSAGE_MAP()


// CImageShow 消息处理程序
BOOL CImageShow::CreateEx(CString filepathDWORD dwExstyle LPCTSTR lpszWindowName DWORD dwstyle RECT &rc 
  HWND hWndParent HMENU nIDorHMenu LPVOID lpParam/* = NULL*/)
{
BOOL bRt = CWnd::CreateEx(dwExstyleAfxRegisterWndClass(CS_CLASSDC)lpszWindowNamedwstyle
rc.leftrc.top(rc.right - rc.left)(rc.bottom-rc.top)hWndParentnIDorHMenulpParam);


//BOOL bRt = CWnd::Create(_T(“Static“) _T(“showWind“) dwstyle rc CWnd::FromHandle(hWndParent) 88888);

if (bRt)
{
m_VisableRc = rc;
GetClientRect(&m_DrowRc);
/*m_ImageBK.Load(_T(“F:\ScanImage\show\004.jpg“));*/
m_ImageBK.Load(filepath);
}
return bRt;
}

void CImageShow::OnDestroy()
{
CWnd::OnDestroy();
}

void CImageShow::OnLButtonDown(UINT nFlags CPoint point)
{

if (m_ImRc.PtInRect(point)) // 点击点是否在图片显示区
{
SetFocus();
m_bIsLButtonDown = TRUE;
m_pt = point;

else
{
return;
}

CWnd::OnLButtonDown(nFlagspoint);
}
void CImageShow::OnLButtonUp(UINT nFlags CPoint point)
{
m_bIsLButtonDown = FALSE;
CWnd::OnLButtonUp(nFlagspoint);
}

void CImageShow::onmousemove(UINT nFlags CPoint point)
{

if (m_bIsLButtonDown)
{
SetFocus();
//移动量
int move_x = point.x - m_pt.x;  
int move_y = point.y - m_pt.y;

CRect rc(m_ImRc);

//计算刷图新区域
rc.left += move_x;
rc.right = rc.left + m_ImRc.Width();
rc.top += move_y;
rc.bottom = rc.top + m_ImRc.Height();

CDC *pDC = GetDC();
m_ImageBK.Draw(pDC->GetSafeHdc()rc);

//计算新的需填充区域
if (point.x > m_pt.x)
{
CRect rcTemp(m_ImRc);
rcTemp.right = m_ImRc.left + move_x;
pDC->FillRect(&rcTemp (CBrush*)&CBrush(BACK_CLORO_BLK));
}
else if (point.x < m_pt.x)
{
CRect rcTemp(m_ImRc);
rcTemp.left = m_ImRc.right + move_x;
pDC->FillRect(&rcTemp (CBrush*)&CBrush(BACK_CLORO_BLK));
}

if (point.y > m_pt.y)
{
CRect rcTemp(m_ImRc);
rcTemp.bottom = m_ImRc.top + move_y;
pDC->FillRect(&rcTemp (CBrush*)&CBrush(BACK_CLORO_BLK));
}
else if (point.y < m_pt.y)
{
CRect rcTemp(m_ImRc);
rcTemp.top = m_ImRc.bottom + move_y;
pDC->FillRect(&rcTemp (CBrush*)&CBrush(BACK_CLORO_BLK));
}
m_ImRc = rc;
m_DrowRc = rc;

ReleaseDC(pDC);
}

m_pt.x = point.x;
m_pt.y = point.y;
CWnd::onmousemove(nFlagspoint);
}

BOOL CImageShow::OnEraseBkgnd(CDC* pDC)   //重绘 
{
if (m_ImRc.Width())
{

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----
     目录           0  2014-11-14 10:34  PicShow
     目录           0  2014-11-10 16:30  PicShowCxImage
     文件        2836  2008-01-29 21:32  PicShowCxImagexfile.h
     文件        2574  2004-06-27 19:31  PicShowCxImageximabmp.h
     文件        1855  2008-01-28 23:05  PicShowCxImageximacfg.h
     文件        4200  2008-01-29 00:00  PicShowCxImageximadef.h
     文件       28464  2008-02-02 15:00  PicShowCxImageximage.h
     文件        8034  2008-01-30 23:31  PicShowCxImageximagif.h
     文件        1771  2007-12-28 22:43  PicShowCxImageximaico.h
     文件        7135  2008-01-13 09:58  PicShowCxImageximaiter.h
     文件        2622  2007-12-15 13:29  PicShowCxImageximajas.h
     文件        1300  2007-11-01 10:06  PicShowCxImageximajbg.h
     文件        9517  2008-01-28 22:57  PicShowCxImageximajpg.h
     文件        2157  2007-12-28 22:42  PicShowCxImageximamng.h
     文件        2166  2008-01-28 22:39  PicShowCxImageximapcx.h
     文件        2380  2008-01-17 21:52  PicShowCxImageximapng.h
     文件        3158  2007-12-17 20:35  PicShowCxImageximaraw.h
     文件        1219  2007-09-25 20:07  PicShowCxImageximaska.h
     文件        2104  2008-01-20 09:02  PicShowCxImageximatga.h
     文件         802  2004-06-01 22:05  PicShowCxImageximath.h
     文件        2139  2007-11-01 10:06  PicShowCxImageximatif.h
     文件        1424  2007-12-28 22:01  PicShowCxImageximawbmp.h
     文件        4981  2008-01-28 23:46  PicShowCxImageximawmf.h
     文件        2999  2007-12-15 14:44  PicShowCxImagexiofile.h
     文件        1000  2007-12-15 14:40  PicShowCxImagexmemfile.h
     目录           0  2014-11-12 09:41  PicShowDebug
     文件     1744896  2014-11-14 10:29  PicShowDebugPicShow.exe
     文件        5429  2014-11-12 09:41  PicShowDebugPicShow.exp
     文件     3464400  2014-11-14 10:29  PicShowDebugPicShow.ilk
     文件        9510  2014-11-12 09:41  PicShowDebugPicShow.lib
     文件     6097920  2014-11-14 10:29  PicShowDebugPicShow.pdb
............此处省略81个文件信息

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件举报,一经查实,本站将立刻删除。

发表评论

评论列表(条)