- Visual C++源码
- Visual Basic源码
- C++ Builder源码
- Java源码
- Delphi源码
- C/C++源码
- PHP源码
- Perl源码
- Python源码
- Asm源码
- Pascal源码
- Borland C++源码
- Others源码
- SQL源码
- VBScript源码
- JavaScript源码
- ASP/ASPX源码
- C#源码
- Flash/ActionScript源码
- matlab源码
- PowerBuilder源码
- LabView源码
- Flex源码
- MathCAD源码
- VBA源码
- IDL源码
- Lisp/Scheme源码
- VHDL源码
- Objective-C源码
- Fortran源码
- tcl/tk源码
- QT源码
QZVDemoView.cpp
资源名称:qzoomview.zip [点击查看]
上传用户:xp9161
上传日期:2009-12-21
资源大小:70k
文件大小:7k
源码类别:
Windows编程
开发平台:
Visual C++
- // QZVDemoView.cpp
- #include "stdafx.h"
- #include "QZoomViewDemo.h"
- #include "QZVDemoView.h"
- #ifdef _DEBUG
- #define new DEBUG_NEW
- #endif
- #define ID_ZOOM_FIRST ID_ZOOM_01
- #define ID_ZOOM_LAST ID_ZOOM_10
- IMPLEMENT_DYNCREATE(CQZVDemoView, QZoomView)
- BEGIN_MESSAGE_MAP(CQZVDemoView, QZoomView)
- ON_COMMAND(ID_TOOL_ZOOMIN, OnToolZoomin)
- ON_COMMAND(ID_TOOL_ZOOMOUT, OnToolZoomout)
- ON_COMMAND(ID_TOOL_HAND, OnToolHand)
- ON_UPDATE_COMMAND_UI(ID_TOOL_ZOOMIN, OnUpdateToolZoomin)
- ON_UPDATE_COMMAND_UI(ID_TOOL_ZOOMOUT, OnUpdateToolZoomout)
- ON_UPDATE_COMMAND_UI(ID_TOOL_HAND, OnUpdateToolHand)
- ON_COMMAND(ID_ZOOM_ZOOMIN, OnZoomZoomin)
- ON_COMMAND(ID_ZOOM_ZOOMOUT, OnZoomZoomout)
- ON_COMMAND(ID_VIEW_ZOOMTOWINDOW, OnViewZoomtowindow)
- ON_COMMAND_RANGE(ID_ZOOM_FIRST, ID_ZOOM_LAST, OnZoom)
- ON_UPDATE_COMMAND_UI_RANGE(ID_ZOOM_FIRST, ID_ZOOM_LAST, OnUpdateZoom)
- ON_UPDATE_COMMAND_UI(ID_INDICATOR_ZOOM, OnUpdateIndicatorZoom)
- ON_COMMAND(ID_ZOOM_OTHER, OnZoomOther)
- ON_UPDATE_COMMAND_UI(ID_ZOOM_ZOOMIN, OnUpdateZoomZoomin)
- ON_UPDATE_COMMAND_UI(ID_ZOOM_ZOOMOUT, OnUpdateZoomZoomout)
- END_MESSAGE_MAP()
- CQZVDemoView::CQZVDemoView()
- : m_CurrentMode(ZoomViewOff)
- {
- }
- CQZVDemoView::~CQZVDemoView()
- {
- }
- void CQZVDemoView::OnDraw(CDC* pDC)
- {
- CSize szDoc(GetTotalSize());
- pDC->SetWindowOrg(0, szDoc.cy);
- CRect rcDoc(0, 0, szDoc.cx, szDoc.cy);
- pDC->Rectangle(rcDoc);
- CBrush brYellow(RGB(255, 255, 64));
- CBrush brSienna(RGB(128, 0, 0));
- CPen pen(PS_SOLID, 10, RGB(128, 0, 0));
- LOGFONT lf;
- ::ZeroMemory(& lf, sizeof(LOGFONT));
- _tcscpy(lf.lfFaceName, _T("Georgia"));
- lf.lfHeight = 60;
- lf.lfWeight = FW_BOLD;
- CFont font;
- font.CreateFontIndirect(& lf);
- CBrush * pOldBrush = (CBrush *) pDC->SelectObject(& brYellow);
- CPen * pOldPen = (CPen *) pDC->SelectObject(& pen);
- CFont * pOldFont = (CFont *) pDC->SelectObject(& font);
- pDC->Ellipse(200, 350, 600, 750);
- pDC->SelectObject(& brSienna);
- CRect rcEye(0, 0, 0, 0);
- rcEye.InflateRect(10, 10);
- rcEye.OffsetRect(330, 570);
- pDC->Ellipse(rcEye);
- rcEye.OffsetRect(140, 0);
- pDC->Ellipse(rcEye);
- CRect rcMouth(0, 0, 0, 0);
- rcMouth.InflateRect(60, 60);
- rcMouth.OffsetRect(400, 520);
- pDC->Arc(rcMouth, CPoint(340, 480), CPoint(460, 480));
- CString sHello(_T("Hello world!"));
- pDC->SetTextAlign(TA_CENTER);
- pDC->SetTextColor(RGB(192, 64, 0));
- pDC->TextOut(400, 280, sHello);
- lf.lfHeight = 36;
- lf.lfWeight = FW_NORMAL;
- CFont fontZoom;
- fontZoom.CreateFontIndirect(& lf);
- pDC->SelectObject(& fontZoom);
- pDC->SetTextColor(RGB(0, 0, 0));
- CString sZoom;
- sZoom.Format(_T("Zoom factor: %.2f"), GetZoom());
- pDC->TextOut(400, 180, sZoom);
- if (pOldFont) pDC->SelectObject(pOldFont);
- if (pOldPen) pDC->SelectObject(pOldPen);
- if (pOldBrush) pDC->SelectObject(pOldBrush);
- }
- void CQZVDemoView::OnInitialUpdate()
- {
- // Initialize QZoomView
- // Be a good programmer and call the base class.
- QZoomView::OnInitialUpdate();
- // Load the cursors. If you don't, QZoomView will display only the normal
- // arrow cursor.
- // The cursor loading might as well (or even preferably) be done in the
- // InitInstance() function of the application class, as it should be done only
- // once per program instance. But this doesn't hurt.
- UINT idCursors[] =
- {
- IDC_LOUPE, IDC_LOUPEPLUS, IDC_LOUPEMINUS, IDC_GRIPOPEN, IDC_GRIPCLOSED
- };
- for (int i = 0; i < sizeof(idCursors) / sizeof(UINT); i++)
- VERIFY(LoadCursor(i, idCursors[i]));
- // Optionally, set another list of zoom presets than the default.
- float PresetZoomFactors[] =
- {
- 0.35f, 0.5f, 0.7f, 1.0f, 1.4f, 2.0f, 2.8f, 4.0f, 5.6f, 8.0f
- };
- int nPresets(sizeof(PresetZoomFactors) / sizeof(float));
- SetPresets(PresetZoomFactors, nPresets);
- // Set the document size as you would do for a normal CScrollView and use
- // any fixed scale mapping mode (MM_ISOTROPIC and MM_ANISOTROPIC are not allowed).
- // Here we choose MM_LOMETRIC and a document size of 80 x 100 millimeters.
- CSize sizeTotal(800, 1000);
- SetScrollSizes(MM_LOMETRIC, sizeTotal);
- // For demonstration purposes, start with Zoom In tool activated.
- OnToolZoomin();
- }
- void CQZVDemoView::OnToolZoomin()
- {
- SetZoomMode(ZoomViewZoomIn);
- m_CurrentMode = ZoomViewZoomIn;
- }
- void CQZVDemoView::OnToolZoomout()
- {
- SetZoomMode(ZoomViewZoomOut);
- m_CurrentMode = ZoomViewZoomOut;
- }
- void CQZVDemoView::OnToolHand()
- {
- SetZoomMode(ZoomViewDrag);
- m_CurrentMode = ZoomViewDrag;
- }
- void CQZVDemoView::OnUpdateToolZoomin(CCmdUI *pCmdUI)
- {
- pCmdUI->SetCheck(m_CurrentMode == ZoomViewZoomIn);
- }
- void CQZVDemoView::OnUpdateToolZoomout(CCmdUI *pCmdUI)
- {
- pCmdUI->SetCheck(m_CurrentMode == ZoomViewZoomOut);
- }
- void CQZVDemoView::OnUpdateToolHand(CCmdUI *pCmdUI)
- {
- pCmdUI->SetCheck(m_CurrentMode == ZoomViewDrag);
- }
- void CQZVDemoView::OnZoomZoomin()
- {
- ZoomIn();
- }
- void CQZVDemoView::OnZoomZoomout()
- {
- ZoomOut();
- }
- void CQZVDemoView::OnViewZoomtowindow()
- {
- ZoomToWindow();
- }
- void CQZVDemoView::OnZoom(UINT nID)
- {
- ZoomToPreset(nID - ID_ZOOM_FIRST);
- }
- void CQZVDemoView::OnUpdateZoom(CCmdUI *pCmdUI)
- {
- pCmdUI->SetCheck(pCmdUI->m_nID - ID_ZOOM_FIRST == (UINT) GetPresetZoom());
- }
- void CQZVDemoView::OnZoomOther()
- {
- CZoomLevelDlg dlg;
- dlg.m_ZoomPercentage = (int)(100.0f * GetZoom());
- if (dlg.DoModal() == IDOK)
- {
- ZoomTo((float) dlg.m_ZoomPercentage / 100.0f);
- CSize szDocument = GetTotalSize();
- ScrollToCenter(CPoint(szDocument.cx / 2, - szDocument.cy / 2));
- }
- }
- void CQZVDemoView::OnUpdateIndicatorZoom(CCmdUI *pCmdUI)
- {
- // Indicate the zoom level on the status bar.
- // See the MFC documentation for CStatusBar and the global variable
- // 'indicators' in MainFrm.cpp if this looks unfamiliar.
- CString sZoom;
- sZoom.Format(_T("%.2f%%"), 100.0f * GetZoom());
- pCmdUI->SetText(sZoom);
- pCmdUI->Enable();
- }
- //===========================
- // CZoomLevelDlg dialog
- IMPLEMENT_DYNAMIC(CZoomLevelDlg, CDialog)
- BEGIN_MESSAGE_MAP(CZoomLevelDlg, CDialog)
- END_MESSAGE_MAP()
- CZoomLevelDlg::CZoomLevelDlg(CWnd* pParent /*=NULL*/)
- : CDialog(CZoomLevelDlg::IDD, pParent)
- , m_ZoomPercentage(0)
- {
- }
- CZoomLevelDlg::~CZoomLevelDlg()
- {
- }
- void CZoomLevelDlg::DoDataExchange(CDataExchange* pDX)
- {
- CDialog::DoDataExchange(pDX);
- DDX_Text(pDX, IDC_ZOOMEDIT, m_ZoomPercentage);
- DDV_MinMaxInt(pDX, m_ZoomPercentage, 3, 2000);
- DDX_Control(pDX, IDC_ZOOMSPIN, m_ZoomSpin);
- }
- BOOL CZoomLevelDlg::OnInitDialog()
- {
- CDialog::OnInitDialog();
- m_ZoomSpin.SetRange(3, 2000);
- return TRUE;
- }
- void CQZVDemoView::OnUpdateZoomZoomin(CCmdUI *pCmdUI)
- {
- pCmdUI->Enable(CanZoomIn());
- }
- void CQZVDemoView::OnUpdateZoomZoomout(CCmdUI *pCmdUI)
- {
- pCmdUI->Enable(CanZoomOut());
- }