2013-11-08 16:52:17 +01:00
|
|
|
|
// GDE_3View.cpp : Implementierung der Klasse CGDE_3View
|
|
|
|
|
//
|
|
|
|
|
|
|
|
|
|
#include "stdafx.h"
|
|
|
|
|
#include "GDE_3.h"
|
|
|
|
|
#include "mainfrm.h"
|
|
|
|
|
#include "GDE_3Doc.h"
|
|
|
|
|
#include "GDE_3View.h"
|
|
|
|
|
#include ".\gde_3view.h"
|
|
|
|
|
#include "user.h"
|
|
|
|
|
#include "Wincon.h"
|
|
|
|
|
#include "Windows.h"
|
|
|
|
|
#ifdef _DEBUG
|
|
|
|
|
#define new DEBUG_NEW
|
|
|
|
|
#endif
|
|
|
|
|
|
|
|
|
|
extern WORD MAX_X;
|
|
|
|
|
extern WORD MAX_Y;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// CGDE_3View
|
|
|
|
|
|
|
|
|
|
IMPLEMENT_DYNCREATE(CGDE_3View, CScrollView)
|
|
|
|
|
|
|
|
|
|
BEGIN_MESSAGE_MAP(CGDE_3View, CScrollView)
|
|
|
|
|
// Standarddruckbefehle
|
|
|
|
|
ON_COMMAND(ID_STARTBUTTON, OnStartButton)
|
|
|
|
|
ON_COMMAND(ID_STOPBUTTON, OnStopButton)
|
|
|
|
|
ON_COMMAND(ID_BUTTONZOOMOUT, OnButtonzoomout)
|
|
|
|
|
ON_COMMAND(ID_BUTTONZOOMIN, OnButtonzoomin)
|
|
|
|
|
ON_COMMAND(ID_BUTTONZOOMFIT, OnButtonzoomfit)
|
|
|
|
|
ON_COMMAND(ID_FILE_PRINT, CScrollView::OnFilePrint)
|
|
|
|
|
ON_COMMAND(ID_FILE_PRINT_DIRECT, CScrollView::OnFilePrint)
|
|
|
|
|
ON_COMMAND(ID_FILE_PRINT_PREVIEW, CScrollView::OnFilePrintPreview)
|
|
|
|
|
ON_COMMAND(ID_FILE_SAVE, OnFileSave)
|
|
|
|
|
ON_WM_LBUTTONDOWN()
|
|
|
|
|
ON_WM_LBUTTONUP()
|
|
|
|
|
ON_WM_RBUTTONDOWN()
|
|
|
|
|
// ON_WM_MOUSEACTIVATE()
|
|
|
|
|
ON_WM_MOUSEMOVE()
|
|
|
|
|
ON_WM_DESTROY()
|
|
|
|
|
ON_COMMAND(ID_FILE_OPEN, OnFileOpen)
|
|
|
|
|
ON_COMMAND(ID_FILE_SAVE_AS, OnFileSaveAs)
|
|
|
|
|
ON_COMMAND(ID_FILE_NEW, OnFileNew)
|
|
|
|
|
END_MESSAGE_MAP()
|
|
|
|
|
|
|
|
|
|
// CGDE_3View Erstellung/Zerst<73>rung
|
|
|
|
|
|
|
|
|
|
CGDE_3View::CGDE_3View()
|
|
|
|
|
{
|
|
|
|
|
// TODO: Hier Code zum Erstellen einf<6E>gen
|
|
|
|
|
m_fXScale = 1.0f; // zooming scale
|
|
|
|
|
m_fYScale = 1.0f;
|
|
|
|
|
m_fDelta = 1.2f;
|
|
|
|
|
m_nMapMode = MM_TEXT;
|
|
|
|
|
uthread = NULL;
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
CGDE_3View::~CGDE_3View()
|
|
|
|
|
{
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
BOOL CGDE_3View::PreCreateWindow(CREATESTRUCT& cs)
|
|
|
|
|
{
|
|
|
|
|
// TODO: <20>ndern Sie hier die Fensterklasse oder die Darstellung, indem Sie
|
|
|
|
|
// CREATESTRUCT cs modifizieren.
|
|
|
|
|
|
|
|
|
|
return CScrollView::PreCreateWindow(cs);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// CGDE_3View-Zeichnung
|
|
|
|
|
|
|
|
|
|
void CGDE_3View::OnDraw(CDC* pDC)
|
|
|
|
|
{
|
|
|
|
|
CGDE_3Doc* pDoc = GetDocument();
|
|
|
|
|
ASSERT_VALID(pDoc);
|
|
|
|
|
if (!pDoc)
|
|
|
|
|
return;
|
|
|
|
|
// Das Array ab der vorgegebenen Position bis zum Ende durchlaufen...
|
|
|
|
|
// TRACE("CGDE_3View::OnDraw %d\n",pDoc->aShape.GetSize());
|
|
|
|
|
// pDoc->nShapePos=0;
|
|
|
|
|
// for (; pDoc->nShapePos<pDoc->aShape.GetSize(); pDoc->nShapePos++) {
|
|
|
|
|
// pDoc->aShape[pDoc->nShapePos]->Draw(&pDoc->buffer); // ...und die Objekte Zeichnen.
|
|
|
|
|
// pDoc->aShape[pDoc->nShapePos]->Draw(pDC); // ...und die Objekte Zeichnen.
|
|
|
|
|
// }
|
|
|
|
|
|
|
|
|
|
// TODO: Code zum Zeichnen der systemeigenen Daten hinzuf<75>gen
|
|
|
|
|
pDC->StretchBlt( 0, 0, (int)(MAX_X*m_fXScale), (int)(MAX_Y*m_fYScale), &pDoc->buffer, 0, 0, MAX_X, MAX_Y, SRCCOPY );
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void CGDE_3View::OnInitialUpdate()
|
|
|
|
|
{
|
|
|
|
|
CScrollView::OnInitialUpdate();
|
|
|
|
|
// TODO: Gesamte Gr<47><72>e dieser Ansicht berechnen
|
|
|
|
|
theApp.vw = this; // Pointer auf das aktuelle Window-Fenster speichern.
|
|
|
|
|
|
|
|
|
|
// TODO: Speziellen Code hier einf<6E>gen und/oder Basisklasse aufrufen
|
|
|
|
|
SetScrollSizes(MM_TEXT,CSize(MAX_X, MAX_Y));
|
|
|
|
|
|
|
|
|
|
CGDE_3Doc *pDoc = GetDocument();
|
|
|
|
|
CDC *pdc=GetDC();
|
|
|
|
|
pDoc->buffer.DeleteDC();
|
|
|
|
|
if(!pDoc->buffer.CreateCompatibleDC(pdc)){
|
|
|
|
|
AfxMessageBox("Cannot create buffer DC",MB_OK);
|
|
|
|
|
}
|
|
|
|
|
if(!(pDoc->memoryBmp.CreateCompatibleBitmap(pdc,MAX_X, MAX_Y))){
|
|
|
|
|
AfxMessageBox("Cannot create Bitmap",MB_OK);
|
|
|
|
|
}
|
|
|
|
|
pDoc->buffer.SelectObject( &pDoc->memoryBmp ); // Das Speicher-Bitmap als Geraetekontext auswaehlen.
|
|
|
|
|
pDoc->nShapePos =0;
|
|
|
|
|
ReleaseDC(pdc);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// CGDE_3View drucken
|
|
|
|
|
|
|
|
|
|
BOOL CGDE_3View::OnPreparePrinting(CPrintInfo* pInfo)
|
|
|
|
|
{
|
|
|
|
|
// Standardvorbereitung
|
|
|
|
|
return DoPreparePrinting(pInfo);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void CGDE_3View::OnBeginPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/)
|
|
|
|
|
{
|
|
|
|
|
// TODO: Zus<75>tzliche Initialisierung vor dem Drucken hier einf<6E>gen
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void CGDE_3View::OnEndPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/)
|
|
|
|
|
{
|
|
|
|
|
// TODO: Bereinigung nach dem Drucken einf<6E>gen
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// CGDE_3View Diagnose
|
|
|
|
|
|
|
|
|
|
#ifdef _DEBUG
|
|
|
|
|
void CGDE_3View::AssertValid() const
|
|
|
|
|
{
|
|
|
|
|
CScrollView::AssertValid();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void CGDE_3View::Dump(CDumpContext& dc) const
|
|
|
|
|
{
|
|
|
|
|
CScrollView::Dump(dc);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
CGDE_3Doc* CGDE_3View::GetDocument() const // Nicht-Debugversion ist inline
|
|
|
|
|
{
|
|
|
|
|
ASSERT(m_pDocument->IsKindOf(RUNTIME_CLASS(CGDE_3Doc)));
|
|
|
|
|
return (CGDE_3Doc*)m_pDocument;
|
|
|
|
|
}
|
|
|
|
|
#endif //_DEBUG
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// CGDE_3View Meldungshandler
|
|
|
|
|
void CGDE_3View::OnButtonzoomout()
|
|
|
|
|
{
|
|
|
|
|
CSize size = GetTotalSize();
|
|
|
|
|
CRect rect;
|
|
|
|
|
GetClientRect(rect);
|
|
|
|
|
int width = rect.Width();
|
|
|
|
|
int height = rect.Height();
|
|
|
|
|
if (size.cx <= rect.Width() && size.cy <= rect.Height())
|
|
|
|
|
return;
|
|
|
|
|
|
|
|
|
|
if (width < size.cx)
|
|
|
|
|
{
|
|
|
|
|
size.cx = (int)(size.cx / m_fDelta);
|
|
|
|
|
m_fXScale /= m_fDelta;
|
|
|
|
|
}
|
|
|
|
|
if (height < size.cy)
|
|
|
|
|
{
|
|
|
|
|
size.cy = (int)(size.cy / m_fDelta);
|
|
|
|
|
m_fYScale /= m_fDelta;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (size.cx <= rect.Width())
|
|
|
|
|
{
|
|
|
|
|
size.cx = rect.Width();
|
|
|
|
|
m_fXScale = 1.0f;
|
|
|
|
|
}
|
|
|
|
|
if (size.cy <= rect.Height())
|
|
|
|
|
{
|
|
|
|
|
size.cy = rect.Height();
|
|
|
|
|
m_fYScale = 1.0f;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
SetScrollSizes(m_nMapMode, size);
|
|
|
|
|
Invalidate();
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void CGDE_3View::OnButtonzoomin()
|
|
|
|
|
{
|
|
|
|
|
// if (m_fXScale >= MAX_ZOOM_FACTOR && m_fYScale >= MAX_ZOOM_FACTOR)
|
|
|
|
|
// return;
|
|
|
|
|
|
|
|
|
|
CSize size = GetTotalSize();
|
|
|
|
|
size.cx = (int)(size.cx * m_fDelta);
|
|
|
|
|
size.cy = (int)(size.cy * m_fDelta);
|
|
|
|
|
m_fXScale *= m_fDelta;
|
|
|
|
|
m_fYScale *= m_fDelta;
|
|
|
|
|
|
|
|
|
|
SetScrollSizes(m_nMapMode, size);
|
|
|
|
|
Invalidate();
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void CGDE_3View::OnButtonzoomfit()
|
|
|
|
|
{
|
|
|
|
|
m_fXScale = 1.0;
|
|
|
|
|
m_fYScale = 1.0;
|
|
|
|
|
|
|
|
|
|
SetScrollSizes(MM_TEXT, CSize(MAX_X,MAX_Y));
|
|
|
|
|
Invalidate();
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
void CGDE_3View::OnStartButton()
|
|
|
|
|
{
|
|
|
|
|
theApp.m_stopflag=FALSE;
|
2013-11-29 00:53:56 +01:00
|
|
|
|
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////if(theApp.vw->uthread==NULL)
|
2013-11-08 16:52:17 +01:00
|
|
|
|
theApp.vw->uthread = AfxBeginThread(StartGDE, &theApp, THREAD_PRIORITY_NORMAL);
|
2013-11-29 00:53:56 +01:00
|
|
|
|
//else AfxMessageBox("User_main is already running\n",MB_OK);
|
2013-11-08 16:52:17 +01:00
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
void CGDE_3View::OnStopButton()
|
|
|
|
|
{
|
|
|
|
|
theApp.m_stopflag=TRUE;
|
|
|
|
|
int cc=0;
|
|
|
|
|
while(theApp.vw->uthread!=NULL){
|
|
|
|
|
Sleep(100);
|
|
|
|
|
HWND hw=::GetConsoleWindow();
|
|
|
|
|
::SetForegroundWindow(hw);
|
|
|
|
|
//VOID keybd_event( BYTE bVk, BYTE bScan, DWORD dwFlags, DWORD dwExtraInfo );
|
|
|
|
|
keybd_event( '0', 0, 0, 0 );
|
|
|
|
|
keybd_event( 13, 0, 0, 0 );//CR
|
|
|
|
|
cc++;
|
|
|
|
|
if(cc==10)break;
|
|
|
|
|
}
|
|
|
|
|
//TRACE("cc=%d\n",cc);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
void CGDE_3View::OnFileSave()
|
|
|
|
|
{
|
|
|
|
|
// TODO: F<>gen Sie hier Ihren Befehlsbehandlungscode ein.
|
|
|
|
|
CWaitCursor wait;
|
|
|
|
|
|
|
|
|
|
CClientDC scrDC(this);
|
|
|
|
|
CDC memDC; // screen DC and memory DC
|
|
|
|
|
CBitmap bitmap;
|
|
|
|
|
CBitmap* pOldBitmap; // handles to device-dependent bitmaps
|
|
|
|
|
|
|
|
|
|
CRect rect;
|
|
|
|
|
GetClientRect(&rect);
|
|
|
|
|
|
|
|
|
|
memDC.CreateCompatibleDC(&scrDC);
|
|
|
|
|
bitmap.CreateCompatibleBitmap(&scrDC, rect.Width(), rect.Height());
|
|
|
|
|
|
|
|
|
|
pOldBitmap = memDC.SelectObject(&bitmap);// select new bitmap into memory DC
|
|
|
|
|
|
|
|
|
|
memDC.BitBlt(0, 0, rect.Width(), rect.Height(), &scrDC, 0, 0, SRCCOPY);
|
|
|
|
|
|
|
|
|
|
CGDE_3Doc* pDoc = GetDocument();
|
|
|
|
|
CString filename = pDoc->GetPathName();
|
|
|
|
|
|
|
|
|
|
CDib dib;
|
|
|
|
|
try {
|
|
|
|
|
dib.Create(&bitmap);
|
|
|
|
|
dib.Save(filename);
|
|
|
|
|
} catch(CImageException& e) {
|
|
|
|
|
::AfxMessageBox(e.what());
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
memDC.SelectObject(pOldBitmap);
|
|
|
|
|
memDC.DeleteDC();
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void CGDE_3View::OnLButtonDown(UINT nFlags, CPoint point)
|
|
|
|
|
{
|
|
|
|
|
// TODO: F<>gen Sie hier Ihren Meldungsbehandlungscode ein, und/oder benutzen Sie den Standard.
|
|
|
|
|
MouseClick = nFlags; // Tastenkombination und...
|
|
|
|
|
//printf("1.x:%d,y:%d\n",point.x,point.y);
|
|
|
|
|
CClientDC dc(this);
|
|
|
|
|
OnPrepareDC(&dc);
|
|
|
|
|
dc.DPtoLP(&point);
|
|
|
|
|
//printf("2.x:%d,y:%d\n",point.x,point.y);
|
|
|
|
|
CPoint shpoint=point;
|
|
|
|
|
shpoint.x = (int)(point.x/m_fXScale);
|
|
|
|
|
shpoint.y = (int)(point.y/m_fYScale);
|
|
|
|
|
MousePoint = shpoint; // ...Position speichern.
|
|
|
|
|
//printf("3.x:%d,y:%d\n",shpoint.x,shpoint.y);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
CScrollView::OnLButtonDown(nFlags, point);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void CGDE_3View::OnLButtonUp(UINT nFlags, CPoint point)
|
|
|
|
|
{
|
|
|
|
|
// TODO: F<>gen Sie hier Ihren Meldungsbehandlungscode ein, und/oder benutzen Sie den Standard.
|
|
|
|
|
|
|
|
|
|
CScrollView::OnLButtonUp(nFlags, point);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void CGDE_3View::OnRButtonDown(UINT nFlags, CPoint point)
|
|
|
|
|
{
|
|
|
|
|
// TODO: F<>gen Sie hier Ihren Meldungsbehandlungscode ein, und/oder benutzen Sie den Standard.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
CScrollView::OnRButtonDown(nFlags, point);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
void CGDE_3View::OnMouseMove(UINT nFlags, CPoint point)
|
|
|
|
|
{
|
|
|
|
|
// TODO: F<>gen Sie hier Ihren Meldungsbehandlungscode ein, und/oder benutzen Sie den Standard.
|
|
|
|
|
CClientDC dc(this);
|
|
|
|
|
OnPrepareDC(&dc);
|
|
|
|
|
//printf("1.x:%d,y:%d\n",point.x,point.y);
|
|
|
|
|
dc.DPtoLP(&point);
|
|
|
|
|
//printf("2.x:%d,y:%d\n",point.x,point.y);
|
|
|
|
|
CPoint shpoint=point;
|
|
|
|
|
shpoint.x = (int)(point.x/m_fXScale);
|
|
|
|
|
shpoint.y = (int)(point.y/m_fYScale);
|
|
|
|
|
//printf("3.x:%d,y:%d\n",shpoint.x,shpoint.y);
|
|
|
|
|
CString strCurPos;
|
|
|
|
|
strCurPos.Format("[x,y]=%d,%d ",shpoint.x, shpoint.y);
|
|
|
|
|
CStatusBar *sb= &((CMainFrame *)theApp.m_pMainWnd)->m_wndStatusBar;
|
|
|
|
|
sb->SetPaneText(sb->CommandToIndex(ID_INDICATOR_CURPOS),strCurPos);
|
|
|
|
|
|
|
|
|
|
CScrollView::OnMouseMove(nFlags, point);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void CGDE_3View::OnDestroy()
|
|
|
|
|
{
|
|
|
|
|
CScrollView::OnDestroy();
|
|
|
|
|
|
|
|
|
|
// TODO: F<>gen Sie hier Ihren Meldungsbehandlungscode ein.
|
|
|
|
|
OnStopButton();
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void CGDE_3View::OnFileOpen()
|
|
|
|
|
{
|
|
|
|
|
// TODO: F<>gen Sie hier Ihren Befehlsbehandlungscode ein.
|
|
|
|
|
TCHAR szFilters[] = _T ("bmp files (*.bmp)|*.bmp|All files (*.*)|*.*||");
|
|
|
|
|
CFileDialog dlg(FALSE, _T ("bmp"), _T ("*.bmp"), OFN_FILEMUSTEXIST | OFN_HIDEREADONLY ,
|
|
|
|
|
szFilters);
|
|
|
|
|
|
|
|
|
|
CString filename;
|
|
|
|
|
if(dlg.DoModal() == IDOK)
|
|
|
|
|
filename = dlg.GetPathName();
|
|
|
|
|
else
|
|
|
|
|
return;
|
|
|
|
|
|
|
|
|
|
CDib dib;
|
|
|
|
|
try {
|
|
|
|
|
dib.Load(filename);
|
|
|
|
|
} catch(CImageException& e) {
|
|
|
|
|
::AfxMessageBox(e.what());
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
CGDE_3Doc* pDoc = GetDocument();
|
|
|
|
|
pDoc->SetTitle(dlg.GetFileName());
|
|
|
|
|
dib.Load(filename);
|
|
|
|
|
int ww=dib.GetWidth();
|
|
|
|
|
int hh=dib.GetHeight();
|
|
|
|
|
dib.Draw(&(pDoc->buffer),0,0,ww,hh,SRCCOPY);
|
|
|
|
|
pDoc->SetTitle(filename);
|
|
|
|
|
pDoc->SetPathName(filename);
|
|
|
|
|
|
|
|
|
|
Invalidate();
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void CGDE_3View::OnFileSaveAs()
|
|
|
|
|
{
|
|
|
|
|
// TODO: F<>gen Sie hier Ihren Befehlsbehandlungscode ein.
|
|
|
|
|
CWaitCursor wait;
|
|
|
|
|
|
|
|
|
|
CClientDC scrDC(this);
|
|
|
|
|
CDC memDC; // screen DC and memory DC
|
|
|
|
|
CBitmap bitmap;
|
|
|
|
|
CBitmap* pOldBitmap; // handles to device-dependent bitmaps
|
|
|
|
|
|
|
|
|
|
CRect rect;
|
|
|
|
|
GetClientRect(&rect);
|
|
|
|
|
|
|
|
|
|
memDC.CreateCompatibleDC(&scrDC);
|
|
|
|
|
bitmap.CreateCompatibleBitmap(&scrDC, rect.Width(), rect.Height());
|
|
|
|
|
|
|
|
|
|
pOldBitmap = memDC.SelectObject(&bitmap);// select new bitmap into memory DC
|
|
|
|
|
|
|
|
|
|
memDC.BitBlt(0, 0, rect.Width(), rect.Height(), &scrDC, 0, 0, SRCCOPY);
|
|
|
|
|
|
|
|
|
|
TCHAR szFilters[] = _T ("bmp files (*.bmp)|*.bmp|All files (*.*)|*.*||");
|
|
|
|
|
CFileDialog dlg(FALSE, _T ("bmp"), _T ("*.bmp"), OFN_FILEMUSTEXIST | OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT,
|
|
|
|
|
szFilters);
|
|
|
|
|
|
|
|
|
|
CString filename;
|
|
|
|
|
if(dlg.DoModal() == IDOK)
|
|
|
|
|
filename = dlg.GetPathName();
|
|
|
|
|
else
|
|
|
|
|
return;
|
|
|
|
|
|
|
|
|
|
CDib dib;
|
|
|
|
|
try {
|
|
|
|
|
dib.Create(&bitmap);
|
|
|
|
|
dib.Save(filename);
|
|
|
|
|
} catch(CImageException& e) {
|
|
|
|
|
::AfxMessageBox(e.what());
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
memDC.SelectObject(pOldBitmap);
|
|
|
|
|
memDC.DeleteDC();
|
|
|
|
|
|
|
|
|
|
CGDE_3Doc* pDoc = GetDocument();
|
|
|
|
|
pDoc->SetTitle(filename);
|
|
|
|
|
pDoc->SetPathName(filename);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void CGDE_3View::OnFileNew()
|
|
|
|
|
{
|
|
|
|
|
// TODO: F<>gen Sie hier Ihren Befehlsbehandlungscode ein.
|
|
|
|
|
AfxMessageBox("Not supported",MB_OK);
|
|
|
|
|
}
|