⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 gmcadview.cpp

📁 《Visual C++.NET MFC类库应用详解》程序实例
💻 CPP
📖 第 1 页 / 共 5 页
字号:
// GMCADView.cpp : implementation of the CGMCADView class
//

#include "stdafx.h"
#include "GMCAD.h"
#include "math.h"
//#include "stdlib.h"
#include "GMCADDoc.h"
#include "GMCADView.h"
//#include "ChengmuTranDlg.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

/////////////////////////////////////////////////////////////////////////////
// CGMCADView

enum {PINGXING_DESIGN=1,CHUMU_DESIGN,CHONGTOU_DESIGN,XGT_TEST,VIEW_VOLUME};
const double pi= 3.1415926;
CObList xgtList;
int IsXGTTest=0;
static int XGTTesting=0;
double hk=0.0;
double chzh=0.0;
double chzv=0.0,cmzv=0.0,ctzv=0.0,volhk=0.0,volmt=0.0,volcr=0.0;
int chn,cmn,ctn;

IMPLEMENT_DYNCREATE(CGMCADView, CFormView)

BEGIN_MESSAGE_MAP(CGMCADView, CFormView)
	//{{AFX_MSG_MAP(CGMCADView)
	ON_BN_CLICKED(IDC_X, OnX)
	ON_BN_CLICKED(IDC_H1, OnH1)
	ON_BN_CLICKED(IDC_HLINE, OnHLine)
	ON_BN_CLICKED(IDC_RECT, OnRect)
	ON_BN_CLICKED(IDC_PD, OnPd)
	ON_COMMAND(ID_DESIGN_CHONGTOU, OnDesignChongtou)
	ON_UPDATE_COMMAND_UI(ID_DESIGN_CHONGTOU, OnUpdateDesignChongtou)
	ON_COMMAND(ID_DESIGN_CHUMU, OnDesignChumu)
	ON_UPDATE_COMMAND_UI(ID_DESIGN_CHUMU, OnUpdateDesignChumu)
	ON_COMMAND(ID_DESIGN_PINGXING, OnDesignPingxing)
	ON_UPDATE_COMMAND_UI(ID_DESIGN_PINGXING, OnUpdateDesignPingxing)
	ON_EN_CHANGE(IDC_DD, OnChangeDd)
	ON_EN_CHANGE(IDC_HH, OnChangeHh)
	ON_EN_CHANGE(IDC_RP, OnChangeRp)
	ON_EN_CHANGE(IDC_RR, OnChangeRr)
	ON_BN_CLICKED(IDC_PARAINPUTOK, OnParainputok)
	ON_BN_CLICKED(IDC_BUTTONEND, OnButtonEnd)
	ON_BN_CLICKED(IDC_H2, OnH2)
	ON_BN_CLICKED(IDC_HH0, OnHh0)
	ON_BN_CLICKED(IDC_HX, OnHx)
	ON_BN_CLICKED(IDC_XH, OnXh)
	ON_EN_CHANGE(IDC_RP2, OnChangeRp2)
	ON_EN_CHANGE(IDC_RR2, OnChangeRr2)
	ON_EN_CHANGE(IDC_HH1, OnChangeHh1)
	ON_EN_CHANGE(IDC_HH2, OnChangeHh2)
	ON_COMMAND(ID_DESIGN_XGTTEST, OnDesignXgttest)
	ON_UPDATE_COMMAND_UI(ID_DESIGN_XGTTEST, OnUpdateDesignXgttest)
	ON_COMMAND(ID_VIEW_VOLUME, OnViewVolume)
	ON_UPDATE_COMMAND_UI(ID_VIEW_VOLUME, OnUpdateViewVolume)
	ON_EN_CHANGE(IDC_EDIT_VOL, OnChangeEditVol)
	ON_EN_CHANGE(IDC_EDIT_AREA, OnChangeEditArea)
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CGMCADView construction/destruction

CGMCADView::CGMCADView()
	: CFormView(CGMCADView::IDD)
{
	//{{AFX_DATA_INIT(CGMCADView)
	m_XianXing = -1;
	m_DD = 0.0f;
	m_HH = 0.0f;
	m_RP = _T("");
	m_RR = 0.0f;
	m_HH1 = 0.0f;
	m_HH2 = 0.0f;
	m_RP2 = _T("");
	m_RR2 = 0.0f;
	m_text11 = _T("");
	m_text12 = _T("");
	m_text13 = _T("");
	m_text14 = _T("");
	m_text15 = _T("");
	m_text16 = _T("");
	m_text21 = _T("");
	m_text22 = _T("");
	m_text23 = _T("");
	m_text24 = _T("");
	m_text25 = _T("");
	m_text26 = _T("");
	m_text31 = _T("");
	m_text32 = _T("");
	m_text33 = _T("");
	m_text34 = _T("");
	m_text35 = _T("");
	m_text36 = _T("");
	m_text17 = _T("");
	m_text27 = _T("");
	m_text37 = _T("");
	m_XXVol = 0.0;
	m_XXArea = 0.0;
	//}}AFX_DATA_INIT
	// TODO: add construction code here
    IsDesigning=0;
	IsHadPK=0;
	HLineNumber=0;
	H1Number=0;
    pxOK=0;
	cmOK=0;
	ctOK=0;

}

CGMCADView::~CGMCADView()
{
}

void CGMCADView::DoDataExchange(CDataExchange* pDX)
{
	CFormView::DoDataExchange(pDX);
	//{{AFX_DATA_MAP(CGMCADView)
	DDX_Control(pDX, IDC_STATIC_RHUNIT, m_RHUnitStatic);
	DDX_Control(pDX, IDC_STATIC_ZVUNIT, m_ZVUnitStatic);
	DDX_Control(pDX, IDC_STATIC_ZAUNIT, m_ZAUnitStatic);
	DDX_Control(pDX, IDC_STATIC_DISP, m_dispStatic);
	DDX_Control(pDX, IDC_STATIC_XXVUNIT, m_XXVUnitStatic);
	DDX_Control(pDX, IDC_STATIC_XXV, m_XXVStatic);
	DDX_Control(pDX, IDC_STATIC_XXAUNIT, m_XXAUnitStatic);
	DDX_Control(pDX, IDC_STATIC_XXA, m_XXAStatic);
	DDX_Control(pDX, IDC_BUTTONEND, m_OKButton);
	DDX_Control(pDX, IDC_STATIC_RR2, m_RR2Static);
	DDX_Control(pDX, IDC_STATIC_HH2, m_HH2Static);
	DDX_Control(pDX, IDC_STATIC_HH1, m_HH1Static);
	DDX_Control(pDX, IDC_RR2, m_RR2Edit);
	DDX_Control(pDX, IDC_RP2, m_RP2Edit);
	DDX_Control(pDX, IDC_HH2, m_HH2Edit);
	DDX_Control(pDX, IDC_HH1, m_HH1Edit);
	DDX_Control(pDX, IDC_STATIC_ZV, m_ZVStatic);
	DDX_Control(pDX, IDC_STATIC_ZH, m_ZHStatic);
	DDX_Control(pDX, IDC_STATIC_ZA, m_ZAStatic);
	DDX_Control(pDX, IDC_EDIT_ZV, m_ZVEdit);
	DDX_Control(pDX, IDC_EDIT_ZA, m_ZAEdit);
	DDX_Control(pDX, IDC_EDIT_VOL, m_VolEdit);
	DDX_Control(pDX, IDC_EDIT_AREA, m_AreaEdit);
	DDX_Control(pDX, IDC_EDIT_REMAINZG, m_RemainZGEdit);
	DDX_Control(pDX, IDC_STATIC_RR, m_RRStatic);
	DDX_Control(pDX, IDC_STATIC_HH, m_HHStatic);
	DDX_Control(pDX, IDC_STATIC_DD, m_DDStatic);
	DDX_Control(pDX, IDC_RR, m_RREdit);
	DDX_Control(pDX, IDC_RP, m_RPEdit);
	DDX_Control(pDX, IDC_HH, m_HHEdit);
	DDX_Control(pDX, IDC_DD, m_DDEdit);
	DDX_Control(pDX, IDC_STATIC_TIP, m_TipStatic);
	DDX_Radio(pDX, IDC_X, m_XianXing);
	DDX_Text(pDX, IDC_DD, m_DD);
	DDX_Text(pDX, IDC_HH, m_HH);
	DDX_Text(pDX, IDC_RP, m_RP);
	DDX_Text(pDX, IDC_RR, m_RR);
	DDX_Text(pDX, IDC_HH1, m_HH1);
	DDX_Text(pDX, IDC_HH2, m_HH2);
	DDX_Text(pDX, IDC_RP2, m_RP2);
	DDX_Text(pDX, IDC_RR2, m_RR2);
	DDX_Text(pDX, IDC_TEXT11, m_text11);
	DDX_Text(pDX, IDC_TEXT12, m_text12);
	DDX_Text(pDX, IDC_TEXT13, m_text13);
	DDX_Text(pDX, IDC_TEXT14, m_text14);
	DDX_Text(pDX, IDC_TEXT15, m_text15);
	DDX_Text(pDX, IDC_TEXT16, m_text16);
	DDX_Text(pDX, IDC_TEXT21, m_text21);
	DDX_Text(pDX, IDC_TEXT22, m_text22);
	DDX_Text(pDX, IDC_TEXT23, m_text23);
	DDX_Text(pDX, IDC_TEXT24, m_text24);
	DDX_Text(pDX, IDC_TEXT25, m_text25);
	DDX_Text(pDX, IDC_TEXT26, m_text26);
	DDX_Text(pDX, IDC_TEXT31, m_text31);
	DDX_Text(pDX, IDC_TEXT32, m_text32);
	DDX_Text(pDX, IDC_TEXT33, m_text33);
	DDX_Text(pDX, IDC_TEXT34, m_text34);
	DDX_Text(pDX, IDC_TEXT35, m_text35);
	DDX_Text(pDX, IDC_TEXT36, m_text36);
	DDX_Text(pDX, IDC_TEXT17, m_text17);
	DDX_Text(pDX, IDC_TEXT27, m_text27);
	DDX_Text(pDX, IDC_TEXT37, m_text37);
	DDX_Text(pDX, IDC_EDIT_VOL, m_XXVol);
	DDX_Text(pDX, IDC_EDIT_AREA, m_XXArea);
	//}}AFX_DATA_MAP
}

BOOL CGMCADView::PreCreateWindow(CREATESTRUCT& cs)
{
	// TODO: Modify the Window class or styles here by modifying
	//  the CREATESTRUCT cs
	return CFormView::PreCreateWindow(cs);
}

void CGMCADView::OnInitialUpdate()
{
	CFormView::OnInitialUpdate();
	GetParentFrame()->RecalcLayout();
	ResizeParentToFit();

    GetDlgItem(IDC_DRAW_AREA)->GetWindowRect(&m_DrawArea);
	ScreenToClient(&m_DrawArea);
    GetDlgItem(IDC_PARASHOW_AREA)->GetWindowRect(&m_ParaShowArea);
	ScreenToClient(&m_ParaShowArea);
    m_Axisx=(m_DrawArea.left+m_DrawArea.right)/2;
    m_CenterY=(m_DrawArea.top+m_DrawArea.bottom)/2;
    CGMCADDoc* pDoc = GetDocument();
	pDoc->m_Axisx=m_Axisx;
	pDoc->m_CenterY=m_CenterY;
	m_XianXing=0;
    if(!IsXGTTest)
	   m_TipStatic.SetWindowText("请选择“设计”菜单下的某一项来开始设计,或选择“转换”菜单下的某一项来进行转换。");

}

/////////////////////////////////////////////////////////////////////////////
// CGMCADView diagnostics

#ifdef _DEBUG
void CGMCADView::AssertValid() const
{
	CFormView::AssertValid();
}

void CGMCADView::Dump(CDumpContext& dc) const
{
	CFormView::Dump(dc);
}

CGMCADDoc* CGMCADView::GetDocument() // non-debug version is inline
{
	ASSERT(m_pDocument->IsKindOf(RUNTIME_CLASS(CGMCADDoc)));
	return (CGMCADDoc*)m_pDocument;
}
#endif //_DEBUG

/////////////////////////////////////////////////////////////////////////////
// CGMCADView message handlers

void CGMCADView::OnDraw(CDC* pDC) 
{
	CGMCADDoc* pDoc = GetDocument();
	ASSERT_VALID(pDoc);
	// TODO: Add your specialized code here and/or call the base class
    pDC->SetMapMode(MM_ANISOTROPIC);
    pDC->SetWindowExt(50,-50);
	pDC->SetViewportExt(50,50);

	// 画中心线
	CPen NewPen,*pOldPen;
	NewPen.CreatePen(PS_DASHDOT,1,RGB(255,0,0));
	pOldPen=pDC->SelectObject(&NewPen);
	POINT p1,p2;
	p1.x=m_Axisx;
	p2.x=m_Axisx;
	p1.y=m_DrawArea.top+10;
	p2.y=m_DrawArea.bottom-10;
    pDC->DPtoLP(&p1);
	pDC->DPtoLP(&p2);
	pDC->MoveTo(p1);
	pDC->LineTo(p2);
    pDC->SelectObject(pOldPen);


    if(XGTTesting)
	{
	   POSITION pos;
	   for(pos=xgtList.GetHeadPosition();pos!=NULL;)
	       ((CRevSurf *)xgtList.GetNext(pos))->Drawing(pDC);
	}
	else
	{
	   int index;
	   index=pDoc->GetRevSurfNumber();
	   for(int i=0;i<index;i++)
		   pDoc->GetRevSurf(i)->Drawing(pDC);
	}
  if(!XGTTesting)
  {
    CString str;
    if(IsDesigning==0)
	{
        m_ZHStatic.SetWindowText("设计总高度:");
        m_ZVStatic.SetWindowText("设计总体积:");
        m_ZAStatic.SetWindowText("设计总面积:");
        str.Format("%12.2f",pDoc->m_TotalH);
	    m_RemainZGEdit.SetWindowText(str);
        str.Format("%12.2f",pDoc->m_TotalVolue);
		m_ZVEdit.SetWindowText(str);
        str.Format("%12.2f",pDoc->m_TotalArea);
    	m_ZAEdit.SetWindowText(str);
	}
	else
	{
        m_ZHStatic.SetWindowText("剩余总高度:");
        m_ZVStatic.SetWindowText("已有总体积:");
        m_ZAStatic.SetWindowText("已有总面积:");
        str.Format("%12.2f",pDoc->m_RH);
		m_RemainZGEdit.SetWindowText(str);
        str.Format("%12.2f",pDoc->m_TotalVolue);
		m_ZVEdit.SetWindowText(str);
        str.Format("%12.2f",pDoc->m_TotalArea);
    	m_ZAEdit.SetWindowText(str);
	}
  }
}

void CGMCADView::OnX() 
{
	// TODO: Add your control notification handler code here
    m_XianXing=XIANXING_X;
	m_TipStatic.SetWindowText("请输入高度、直径。");

    m_DDStatic.EnableWindow(TRUE);
	m_HHEdit.EnableWindow(TRUE);
    m_DDEdit.EnableWindow(TRUE);
	m_HHStatic.SetWindowText("高度H:");
	m_DDStatic.SetWindowText("直径D:");

	m_RREdit.EnableWindow(FALSE);
	m_RRStatic.EnableWindow(FALSE);
	m_RPEdit.EnableWindow(FALSE);
	m_RR2Edit.EnableWindow(FALSE);
	m_RR2Static.EnableWindow(FALSE);
    m_RP2Edit.EnableWindow(FALSE);
	m_HH1Edit.EnableWindow(FALSE);
	m_HH1Static.EnableWindow(FALSE);
    m_HH2Edit.EnableWindow(FALSE);
	m_HH2Static.EnableWindow(FALSE);


	CClientDC dc(this);
    dc.SetTextColor(RGB(0,255,0));
    CBrush NewBrush,*pOldBrush;
	NewBrush.CreateSolidBrush(RGB(0,0,0));
	pOldBrush=dc.SelectObject(&NewBrush);
    dc.Rectangle(&m_ParaShowArea);
	dc.SelectObject(pOldBrush);

    dc.SetBkMode(TRANSPARENT);
	CPen RedPen,GreenPen,*pOldPen,*temppen;
	RedPen.CreatePen(PS_SOLID,1,RGB(255,0,0));
	pOldPen=dc.SelectObject(&RedPen);
	dc.MoveTo(140,60);
	dc.LineTo(60,130);    
	GreenPen.CreatePen(PS_SOLID,1,RGB(0,255,0));
	temppen=dc.SelectObject(&GreenPen);
	dc.MoveTo(60,132);
	dc.LineTo(210,132);        
	dc.MoveTo(60,132);
	dc.LineTo(60,162); 
	dc.MoveTo(142,60);
	dc.LineTo(210,60); 
	dc.MoveTo(182,60);
	dc.LineTo(182,82);
	dc.MoveTo(182,99);
	dc.LineTo(182,130);
	dc.MoveTo(182,60);   // H的两个箭头
	dc.LineTo(178,65);
	dc.MoveTo(182,60);
	dc.LineTo(186,65);
	dc.MoveTo(182,130);
	dc.LineTo(178,125);
	dc.MoveTo(182,130);
	dc.LineTo(186,125);

	dc.MoveTo(63,150);
	dc.LineTo(100,150);
	dc.MoveTo(61,150);
	dc.LineTo(66,146);	
	dc.MoveTo(61,150);
	dc.LineTo(66,154);	
    
	dc.TextOut(178,85,"H");
	dc.TextOut(102,142,"D");

    dc.SelectObject(pOldPen);
}

void CGMCADView::OnH1() 
{
	// TODO: Add your control notification handler code here
    m_XianXing=XIANXING_H1;

	m_HHEdit.EnableWindow(TRUE);
    m_DDEdit.EnableWindow(TRUE);
	m_RREdit.EnableWindow(TRUE);
    m_RPEdit.EnableWindow(TRUE);
	m_HHStatic.EnableWindow(TRUE);
	m_DDStatic.EnableWindow(TRUE);
	m_RRStatic.EnableWindow(TRUE);

	m_RR2Edit.EnableWindow(FALSE);
    m_RP2Edit.EnableWindow(FALSE);
	m_HH1Edit.EnableWindow(FALSE);
    m_HH2Edit.EnableWindow(FALSE);
	m_RR2Static.EnableWindow(FALSE);
	m_HH1Static.EnableWindow(FALSE);
	m_HH2Static.EnableWindow(FALSE);

	CGMCADDoc* pDoc = GetDocument();
	if((pDoc->CurrentDesign==CHONGTOU_DESIGN) && (H1Number==0))
	{
	    m_TipStatic.SetWindowText("请输入总高、直径D、半径R。");
	    m_HHStatic.SetWindowText("总高:");
	//    m_DDStatic.SetWindowText("高度H:");
	    m_DDStatic.EnableWindow(FALSE);
	    m_DDEdit.EnableWindow(FALSE);
		m_RRStatic.SetWindowText("直径D:");
	    m_RR2Edit.EnableWindow(TRUE);
	    m_RR2Static.EnableWindow(TRUE);
	    m_RR2Static.SetWindowText("半径R:");
        m_RPEdit.EnableWindow(FALSE);
	}
	else
	{
	    m_TipStatic.SetWindowText("请输入高度H、直径D、半径R及其弧特性。");
	    m_HHStatic.SetWindowText("高度H:");
	    m_DDStatic.SetWindowText("直径D:");
	    m_RRStatic.SetWindowText("半径R:");
	}

    CClientDC dc(this);
    dc.SetTextColor(RGB(0,255,0));
    CBrush NewBrush,*pOldBrush;
	NewBrush.CreateSolidBrush(RGB(0,0,0));
	pOldBrush=dc.SelectObject(&NewBrush);
    dc.Rectangle(&m_ParaShowArea);
	dc.SelectObject(pOldBrush);

    dc.SetBkMode(TRANSPARENT);
	CPen RedPen,GreenPen,*pOldPen,*temppen;
	RedPen.CreatePen(PS_SOLID,1,RGB(255,0,0));
	pOldPen=dc.SelectObject(&RedPen);
	dc.Arc(58,58,252,252,138,60,60,130);

	GreenPen.CreatePen(PS_SOLID,1,RGB(0,255,0));
	temppen=dc.SelectObject(&GreenPen);

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -