home *** CD-ROM | disk | FTP | other *** search
- // viewer.cpp : implementation file
- //
-
- #include "stdafx.h"
- #include "resource.h" // main symbols
- #include "viewer.h"
-
- #ifdef _DEBUG
- #undef THIS_FILE
- static char BASED_CODE THIS_FILE[] = __FILE__;
- #endif
-
- /////////////////////////////////////////////////////////////////////////////
- // viewer
-
- viewer::viewer()
- {
- m_bitmap = new CBitmap;
- m_SaveDc = new CDC;
- m_backup = FALSE;
- }
-
- viewer::~viewer()
- {
- delete m_SaveDc;
- delete m_bitmap;
- }
-
-
- BEGIN_MESSAGE_MAP(viewer, CWnd)
- //{{AFX_MSG_MAP(viewer)
- ON_WM_PAINT()
- ON_WM_CREATE()
- ON_WM_SYSCOMMAND()
- //}}AFX_MSG_MAP
- END_MESSAGE_MAP()
-
-
- /////////////////////////////////////////////////////////////////////////////
- // viewer message handlers
-
- void viewer::OnPaint()
- {
- CPaintDC dc(this); // device context for painting
-
- // TODO: Add your message handler code here
- if(m_backup)
- dc.BitBlt(0,0,m_sizeh,m_sizev,m_SaveDc,0,0,SRCCOPY);
- // Do not call CWnd::OnPaint() for painting messages
- }
-
- void viewer::SaveDC(HDC pbuffer)
- {
-
- m_backup = TRUE;
- CRect rect;
- GetWindowRect(rect);
- m_sizeh = rect.Height();
- m_sizev = rect.Width();
- m_bitmap->CreateCompatibleBitmap(GetDC(),m_sizeh,m_sizev);
- m_SaveDc->CreateCompatibleDC(GetDC());
- m_SaveDc->SelectObject(m_bitmap);
- BitBlt(m_SaveDc->GetSafeHdc(),0,0,m_sizeh,m_sizev,pbuffer,0,0,SRCCOPY);
- }
-
- int viewer::OnCreate(LPCREATESTRUCT lpCreateStruct)
- {
- if (CWnd::OnCreate(lpCreateStruct) == -1)
- return -1;
-
- // TODO: Add your specialized creation code here
- CMenu* pSysMenu = GetSystemMenu(FALSE);
- // IDM_CLIPBOARD must be in the system command range.
- ASSERT((IDM_CLIPBOARD & 0xFFF0) == IDM_CLIPBOARD);
- ASSERT(IDM_CLIPBOARD < 0xF000);
- pSysMenu->AppendMenu(MF_SEPARATOR);
- pSysMenu->AppendMenu(MF_STRING, IDM_CLIPBOARD,CString("&Copy To Clipboard"));
-
-
- return 0;
- }
-
- void viewer::OnSysCommand(UINT nID, LPARAM lParam)
- {
- // TODO: Add your message handler code here and/or call default
- if ((nID & 0xFFF0) == IDM_CLIPBOARD)
- {
- // Create a temporary bitmap and Device context to copy to Clipboard
- CBitmap bitmapClip;
- CDC TempDC;
- if(!bitmapClip.CreateCompatibleBitmap(m_SaveDc,m_sizeh,m_sizev))
- return;
- if(!TempDC.CreateCompatibleDC(GetDC()))
- return;
- TempDC.SelectObject(&bitmapClip);
- TempDC.BitBlt(0,0,m_sizeh,m_sizev,m_SaveDc,0,0,SRCCOPY);
-
- // Open Clipboard
- if(!OpenClipboard())
- return;
-
- // Remove current Clipboard contents
- EmptyClipboard();
-
- // Give bitmap handle to Clipboard
- SetClipboardData (CF_BITMAP, bitmapClip.m_hObject);
-
- // Aviod destorying image
- bitmapClip.Detach();
-
- // Close ClipBoard
- CloseClipboard();
- }
- else
- CWnd::OnSysCommand(nID, lParam);
- }
-