169 lines
3.9 KiB
C++
169 lines
3.9 KiB
C++
// femmplotDoc.cpp : implementation of the CFemmplotDoc class
|
|
//
|
|
|
|
#include "stdafx.h"
|
|
#include "femm.h"
|
|
|
|
#include "femmplotDoc.h"
|
|
|
|
#ifdef _DEBUG
|
|
#define new DEBUG_NEW
|
|
#undef THIS_FILE
|
|
static char THIS_FILE[] = __FILE__;
|
|
#endif
|
|
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
// CFemmplotDoc
|
|
|
|
IMPLEMENT_DYNCREATE(CFemmplotDoc, CDocument)
|
|
|
|
BEGIN_MESSAGE_MAP(CFemmplotDoc, CDocument)
|
|
//{{AFX_MSG_MAP(CFemmplotDoc)
|
|
// NOTE - the ClassWizard will add and remove mapping macros here.
|
|
// DO NOT EDIT what you see in these blocks of generated code!
|
|
//}}AFX_MSG_MAP
|
|
END_MESSAGE_MAP()
|
|
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
// CFemmplotDoc construction/destruction
|
|
|
|
CFemmplotDoc::CFemmplotDoc()
|
|
{
|
|
// TODO: add one-time construction code here
|
|
hMetaPlot=NULL;
|
|
HasBoundingBox=FALSE;
|
|
}
|
|
|
|
CFemmplotDoc::~CFemmplotDoc()
|
|
{
|
|
DeleteEnhMetaFile(hMetaPlot);
|
|
}
|
|
|
|
BOOL CFemmplotDoc::OnNewDocument()
|
|
{
|
|
if (!CDocument::OnNewDocument())
|
|
return FALSE;
|
|
|
|
// clear out any old metafile;
|
|
DeleteEnhMetaFile(hMetaPlot);
|
|
HasBoundingBox=FALSE;
|
|
|
|
// grab a new metafile from the clipboard;
|
|
GrabMetafile();
|
|
|
|
// TODO: add reinitialization code here
|
|
// (SDI documents will reuse this document)
|
|
|
|
return TRUE;
|
|
}
|
|
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
// CFemmplotDoc serialization
|
|
|
|
void CFemmplotDoc::Serialize(CArchive& ar)
|
|
{
|
|
if (ar.IsStoring())
|
|
{
|
|
// TODO: add storing code here
|
|
}
|
|
else
|
|
{
|
|
// TODO: add loading code here
|
|
}
|
|
}
|
|
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
// CFemmplotDoc diagnostics
|
|
|
|
#ifdef _DEBUG
|
|
void CFemmplotDoc::AssertValid() const
|
|
{
|
|
CDocument::AssertValid();
|
|
}
|
|
|
|
void CFemmplotDoc::Dump(CDumpContext& dc) const
|
|
{
|
|
CDocument::Dump(dc);
|
|
}
|
|
#endif //_DEBUG
|
|
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
// CFemmplotDoc commands
|
|
|
|
BOOL CFemmplotDoc::OnOpenDocument(LPCTSTR lpszPathName)
|
|
{
|
|
if (!CDocument::OnOpenDocument(lpszPathName))
|
|
return FALSE;
|
|
|
|
// clear out any old metafile;
|
|
DeleteEnhMetaFile(hMetaPlot);
|
|
HasBoundingBox=FALSE;
|
|
HENHMETAFILE hMetaPlotFile = GetEnhMetaFile(lpszPathName);
|
|
if (hMetaPlotFile!=NULL){
|
|
DWORD len =(DWORD) GetEnhMetaFileBits(hMetaPlotFile,NULL,NULL);
|
|
unsigned char *buff=(unsigned char *) malloc(len);
|
|
if(GetEnhMetaFileBits(hMetaPlotFile,len,buff)==0)
|
|
MsgBox("MetaFile not copied");
|
|
hMetaPlot=SetEnhMetaFileBits(len,buff);
|
|
}
|
|
else MsgBox("Problem opening specified file");
|
|
|
|
DeleteEnhMetaFile(hMetaPlotFile);
|
|
|
|
// TODO: Add your specialized creation code here
|
|
|
|
return TRUE;
|
|
}
|
|
|
|
BOOL CFemmplotDoc::OnSaveDocument(LPCTSTR lpszPathName)
|
|
{
|
|
// TODO: Add your specialized code here and/or call the base class
|
|
BOOL flag=TRUE;
|
|
|
|
HENHMETAFILE hMetaCopy=CopyEnhMetaFile(hMetaPlot,lpszPathName);
|
|
if (hMetaCopy==NULL){
|
|
MsgBox("Problem writing file to disk");
|
|
flag=FALSE;
|
|
}
|
|
DeleteEnhMetaFile(hMetaCopy);
|
|
|
|
return flag; // CDocument::OnSaveDocument(lpszPathName);
|
|
}
|
|
|
|
BOOL CFemmplotDoc::GrabMetafile()
|
|
{
|
|
if (IsClipboardFormatAvailable(CF_ENHMETAFILE)==FALSE){
|
|
hMetaPlot=NULL;
|
|
return FALSE;
|
|
|
|
}
|
|
if (OpenClipboard(NULL)==FALSE)
|
|
MsgBox("Cannot access the Clipboard");
|
|
else{
|
|
HENHMETAFILE hMetaClip = (HENHMETAFILE) GetClipboardData(CF_ENHMETAFILE);
|
|
HGLOBAL hBound = (HGLOBAL) GetClipboardData(CF_TEXT);
|
|
if(hMetaClip==NULL)
|
|
{
|
|
MsgBox("Couldn't GetClipboardData");
|
|
}
|
|
else{
|
|
DWORD len =(DWORD) GetEnhMetaFileBits(hMetaClip,NULL,NULL);
|
|
unsigned char *buff=(unsigned char *) malloc(len);
|
|
if(GetEnhMetaFileBits(hMetaClip,len,buff)==0)
|
|
MsgBox("MetaFile not copied");
|
|
hMetaPlot=SetEnhMetaFileBits(len,buff);
|
|
if(hBound!=NULL){
|
|
sscanf((char *) hBound,"%lf %lf %lf %lf",
|
|
&bb_left,&bb_bottom,&bb_right,&bb_top);
|
|
HasBoundingBox=TRUE;
|
|
}
|
|
EmptyClipboard();
|
|
}
|
|
|
|
CloseClipboard();
|
|
}
|
|
|
|
return TRUE;
|
|
}
|
|
|