home *** CD-ROM | disk | FTP | other *** search
/ CD Actual 11 / CDACTUAL11.iso / cdactual / demobin / share / W95 / FRACCOMP / VIEWER.CPP < prev    next >
Encoding:
C/C++ Source or Header  |  1995-04-26  |  2.7 KB  |  117 lines

  1. // viewer.cpp : implementation file
  2. //
  3.  
  4. #include "stdafx.h"
  5. #include "resource.h"        // main symbols
  6. #include "viewer.h"
  7.  
  8. #ifdef _DEBUG
  9. #undef THIS_FILE
  10. static char BASED_CODE THIS_FILE[] = __FILE__;
  11. #endif
  12.  
  13. /////////////////////////////////////////////////////////////////////////////
  14. // viewer
  15.  
  16. viewer::viewer()
  17. {
  18.       m_bitmap = new CBitmap;
  19.     m_SaveDc = new CDC;
  20.     m_backup = FALSE;
  21. }
  22.  
  23. viewer::~viewer()
  24. {
  25.     delete m_SaveDc;
  26.     delete m_bitmap;
  27. }
  28.  
  29.  
  30. BEGIN_MESSAGE_MAP(viewer, CWnd)
  31.     //{{AFX_MSG_MAP(viewer)
  32.     ON_WM_PAINT()
  33.     ON_WM_CREATE()
  34.     ON_WM_SYSCOMMAND()
  35.     //}}AFX_MSG_MAP
  36. END_MESSAGE_MAP()
  37.  
  38.  
  39. /////////////////////////////////////////////////////////////////////////////
  40. // viewer message handlers
  41.  
  42. void viewer::OnPaint() 
  43. {
  44.     CPaintDC dc(this); // device context for painting
  45.     
  46.     // TODO: Add your message handler code here
  47.     if(m_backup)
  48.         dc.BitBlt(0,0,m_sizeh,m_sizev,m_SaveDc,0,0,SRCCOPY);
  49.     // Do not call CWnd::OnPaint() for painting messages
  50. }
  51.  
  52. void viewer::SaveDC(HDC pbuffer)
  53. {
  54.  
  55.     m_backup = TRUE;
  56.     CRect rect;
  57.     GetWindowRect(rect);
  58.     m_sizeh = rect.Height();
  59.     m_sizev = rect.Width();
  60.     m_bitmap->CreateCompatibleBitmap(GetDC(),m_sizeh,m_sizev);
  61.     m_SaveDc->CreateCompatibleDC(GetDC()); 
  62.     m_SaveDc->SelectObject(m_bitmap);
  63.     BitBlt(m_SaveDc->GetSafeHdc(),0,0,m_sizeh,m_sizev,pbuffer,0,0,SRCCOPY);
  64. }
  65.  
  66. int viewer::OnCreate(LPCREATESTRUCT lpCreateStruct) 
  67. {
  68.     if (CWnd::OnCreate(lpCreateStruct) == -1)
  69.         return -1;
  70.     
  71.     // TODO: Add your specialized creation code here
  72.     CMenu* pSysMenu = GetSystemMenu(FALSE);
  73.     // IDM_CLIPBOARD must be in the system command range.
  74.     ASSERT((IDM_CLIPBOARD & 0xFFF0) == IDM_CLIPBOARD);
  75.     ASSERT(IDM_CLIPBOARD < 0xF000);
  76.     pSysMenu->AppendMenu(MF_SEPARATOR);
  77.     pSysMenu->AppendMenu(MF_STRING, IDM_CLIPBOARD,CString("&Copy To Clipboard"));
  78.  
  79.     
  80.     return 0;
  81. }
  82.  
  83. void viewer::OnSysCommand(UINT nID, LPARAM lParam) 
  84. {
  85.     // TODO: Add your message handler code here and/or call default
  86.     if ((nID & 0xFFF0) == IDM_CLIPBOARD)
  87.     {
  88.         // Create a temporary bitmap and Device context to copy to Clipboard
  89.         CBitmap bitmapClip;
  90.         CDC TempDC;
  91.         if(!bitmapClip.CreateCompatibleBitmap(m_SaveDc,m_sizeh,m_sizev))
  92.             return;
  93.         if(!TempDC.CreateCompatibleDC(GetDC()))
  94.             return;
  95.         TempDC.SelectObject(&bitmapClip);
  96.         TempDC.BitBlt(0,0,m_sizeh,m_sizev,m_SaveDc,0,0,SRCCOPY);    
  97.     
  98.         // Open Clipboard
  99.         if(!OpenClipboard())
  100.             return;
  101.         
  102.         // Remove current Clipboard contents
  103.         EmptyClipboard();
  104.     
  105.         // Give bitmap handle to Clipboard
  106.         SetClipboardData (CF_BITMAP, bitmapClip.m_hObject);
  107.     
  108.         // Aviod destorying image
  109.         bitmapClip.Detach();
  110.  
  111.         // Close ClipBoard
  112.         CloseClipboard();
  113.     }
  114.     else
  115.         CWnd::OnSysCommand(nID, lParam);
  116. }
  117.