WIN2000中的放大镜如何实现?

bjcaoyi 2002-12-02 03:43:35
哪位知道WIN2000中的放大镜如何编写,讲讲原理就行了,主要是如何放大屏幕,VC中有没有相关的函数。望高手指点!
...全文
27 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
fingerfox 2002-12-02
  • 打赏
  • 举报
回复
void CImageWnd::OnMouseMove(UINT nFlags, CPoint point)
{
// TODO: Add your message handler code here and/or call default

if (m_bCaputred) //"Lens" is active
{
if ( point.x < 0 || point.y < 0 ) { Hide();return;}

if ( point.x > 0 && point.y > 0 && IsHide()) Display();

SetCursor(NULL); //Hide a cursor

//Reposition a "lens"
m_CurPoint = CPoint(point.x - m_nSize / 2,point.y - m_nSize / 2);
pMagnGlass->MoveWindow(CRect(point.x - m_nSize / 2,point.y - m_nSize / 2,point.x - m_nSize / 2 + m_nSize, point.y - m_nSize / 2 + m_nSize),FALSE);

//Force to redraw
Invalidate(FALSE);
UpdateWindow();
pMagnGlass->Invalidate(FALSE);
pMagnGlass->UpdateWindow();

}
else //"Lens" is hidden - restore cursor
{
SetCursor(m_curMgnfy);
}
CWnd::OnMouseMove(nFlags, point);
}




void CImageWnd::OnLButtonUp(UINT nFlags, CPoint point)
{
//Inactivate a "lens"
/*
pMagnGlass->ShowWindow(SW_HIDE); //Hide a "lens"
ReleaseCapture(); //Restore mouse input
m_bCaputred = FALSE; //Flag
RefreshImage(TRUE); //Redraw a view
Invalidate(FALSE); //Redraw itself
UpdateWindow();
*/
CWnd::OnLButtonUp(nFlags, point);
}


void CImageWnd::Hide()
{
//Inactivate a "lens"

pMagnGlass->ShowWindow(SW_HIDE); //Hide a "lens"
ReleaseCapture(); //Restore mouse input
// m_bCaputred = FALSE; //Flag
m_HideFlag = TRUE; //Flag
RefreshImage(TRUE); //Redraw a view
Invalidate(FALSE); //Redraw itself
UpdateWindow();
}

void CImageWnd::Close()
{
//Inactivate a "lens"

pMagnGlass->ShowWindow(SW_HIDE); //Hide a "lens"
DestroyWindow();
// ReleaseCapture(); //Restore mouse input
}
fingerfox 2002-12-02
  • 打赏
  • 举报
回复
/////////////////////////////////////////////////////////////////////////////
// CImageWnd message handlers

BOOL CImageWnd::PreCreateWindow(CREATESTRUCT& cs)
{
// TODO: Add your specialized code here and/or call the base class
cs.lpszClass = AfxRegisterWndClass( NULL, NULL, (HBRUSH) NULL);
cs.style = WS_CLIPCHILDREN | WS_CHILD ;
return CWnd::PreCreateWindow(cs);
}

int CImageWnd::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
if (CWnd::OnCreate(lpCreateStruct) == -1)
return -1;

pMagnGlass->Create(
AfxRegisterWndClass( NULL, NULL, (HBRUSH) GetStockObject(NULL_BRUSH)),
NULL, WS_CHILD, CRect(0,0,0,0), this, 0xffff);

return 0;
}


void CImageWnd::OnLButtonDown(UINT nFlags, CPoint point)
{
//Save the image of a view to a bitmap member
CWnd::OnLButtonDown(nFlags, point);

}


void CImageWnd::Display()
{
//Save the image of a view to a bitmap member
RefreshImage(TRUE);
SaveImage();

// m_CurPoint = CPoint(point.x - m_nSize / 2,point.y - m_nSize / 2); //Save current cursor
m_CurPoint = CPoint(200- m_nSize / 2,200- m_nSize / 2);

SetCapture();
m_bCaputred = TRUE;
m_HideFlag = FALSE;

//Reposition and show "lens"
pMagnGlass->MoveWindow(CRect(200- m_nSize / 2,200- m_nSize / 2,200+ m_nSize / 2,200+ m_nSize / 2));
pMagnGlass->ShowWindow(SW_SHOW);
}
fingerfox 2002-12-02
  • 打赏
  • 举报
回复
// ImageWnd.cpp : implementation file
//

#include "stdafx.h"
#include "resource.h"
#include <ImageWnd.h>

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

/////////////////////////////////////////////////////////////////////////////
// CImageWnd

#define RECTANGULAR 1
#define ROUND 2

CImageWnd::CImageWnd()
{
//Create a "lens" object
pMagnGlass = new CMagnWnd;

//Default values of Magnify Glass properties
m_nShape = ROUND;
m_bCaputred = FALSE;
m_HideFlag = FALSE;
m_nZoom = 30;
m_nSize = 210;
}

CImageWnd::~CImageWnd()
{
m_bmp.DeleteObject();
delete pMagnGlass;
}


BEGIN_MESSAGE_MAP(CImageWnd, CWnd)
//{{AFX_MSG_MAP(CImageWnd)
ON_WM_LBUTTONDOWN()
ON_WM_MOUSEMOVE()
ON_WM_LBUTTONUP()
ON_WM_CREATE()
ON_WM_PAINT()
ON_WM_RBUTTONDOWN()
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
zhaolaoxin 2002-12-02
  • 打赏
  • 举报
回复
up

15,978

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 界面
社区管理员
  • 界面
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧