📄 definemodeldlg.cpp
字号:
// DefineModelDlg.cpp : implementation file
//
#include "stdafx.h"
#include "FiniteElec.h"
#include "DefineModelDlg.h"
#include "RectRegion.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// CDefineModelDlg dialog
CDefineModelDlg::CDefineModelDlg(CWnd* pParent /*=NULL*/)
: CDialog(CDefineModelDlg::IDD, pParent)
{
//{{AFX_DATA_INIT(CDefineModelDlg)
m_xpos = 0.0;
m_ypos = 0.0;
m_xlength = 6.0;
m_xseg = 4;
m_yseg = 4;
m_b_bottom = TRUE;
m_b_left = FALSE;
m_b_up = TRUE;
m_b_right = FALSE;
m_comb_rectlist = _T("");
m_load_right = 0.0;
m_load_up = 100.0;
m_load_left = 0.0;
m_load_bottom = 50.0;
m_ylength = 6.0;
//}}AFX_DATA_INIT
}
void CDefineModelDlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CDefineModelDlg)
DDX_Text(pDX, IDC_EDIT_XPOS, m_xpos);
DDV_MinMaxDouble(pDX, m_xpos, -10000000000., 10000000000.);
DDX_Text(pDX, IDC_EDIT_YPOS, m_ypos);
DDV_MinMaxDouble(pDX, m_ypos, -10000000000., 10000000000.);
DDX_Text(pDX, IDC_EDIT_LENGTH, m_xlength);
DDV_MinMaxDouble(pDX, m_xlength, 0., 10000000000.);
DDX_Text(pDX, IDC_EDIT_XSEGMENT, m_xseg);
DDV_MinMaxInt(pDX, m_xseg, 1, 100);
DDX_Text(pDX, IDC_EDIT_YSEGMENT, m_yseg);
DDV_MinMaxInt(pDX, m_yseg, 1, 100);
DDX_Check(pDX, IDC_CHECK_1_BOTTOM, m_b_bottom);
DDX_Check(pDX, IDC_CHECK_2_LEFT, m_b_left);
DDX_Check(pDX, IDC_CHECK_3_UP, m_b_up);
DDX_Check(pDX, IDC_CHECK_4_RIGHT, m_b_right);
DDX_CBString(pDX, IDC_COMBO_MODEL_LIST, m_comb_rectlist);
DDV_MaxChars(pDX, m_comb_rectlist, 20);
DDX_Text(pDX, IDC_EDIT_LOADRIGHT, m_load_right);
DDV_MinMaxDouble(pDX, m_load_right, -10000000000., 10000000000.);
DDX_Text(pDX, IDC_EDIT_LOADUP, m_load_up);
DDV_MinMaxDouble(pDX, m_load_up, -10000000000., 10000000000.);
DDX_Text(pDX, IDC_EDIT_LOADLEFT, m_load_left);
DDV_MinMaxDouble(pDX, m_load_left, -10000000000., 10000000000.);
DDX_Text(pDX, IDC_EDIT_LOADBOTTOM, m_load_bottom);
DDV_MinMaxDouble(pDX, m_load_bottom, -10000000000., 10000000000.);
DDX_Text(pDX, IDC_EDIT_HEIGHT, m_ylength);
DDV_MinMaxDouble(pDX, m_ylength, 0., 10000000000.);
//}}AFX_DATA_MAP
SetComboBox();
}
BEGIN_MESSAGE_MAP(CDefineModelDlg, CDialog)
//{{AFX_MSG_MAP(CDefineModelDlg)
ON_BN_CLICKED(IDC_CHECK_1_BOTTOM, OnCheck1Bottom)
ON_BN_CLICKED(IDC_CHECK_2_LEFT, OnCheck2Left)
ON_BN_CLICKED(IDC_CHECK_3_UP, OnCheck3Up)
ON_BN_CLICKED(IDC_CHECK_4_RIGHT, OnCheck4Right)
ON_BN_CLICKED(IDC_BUTTON_ADD, OnButtonAdd)
ON_BN_CLICKED(IDC_BUTTON_DELETE, OnButtonDelete)
ON_CBN_SELCHANGE(IDC_COMBO_MODEL_LIST, OnSelchangeComboModelList)
ON_BN_CLICKED(IDC_BUTTON_EDIT, OnButtonEdit)
ON_EN_SETFOCUS(IDC_EDIT_XSEGMENT, OnSetfocusEditXsegment)
ON_EN_SETFOCUS(IDC_EDIT_YSEGMENT, OnSetfocusEditYsegment)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CDefineModelDlg message handlers
void CDefineModelDlg::OnCheck1Bottom()
{
m_b_bottom=!m_b_bottom;
((CEdit*)GetDlgItem(IDC_EDIT_LOADBOTTOM))->SetReadOnly(!m_b_bottom);
}
void CDefineModelDlg::OnCheck2Left()
{
m_b_left=!m_b_left;
((CEdit*)GetDlgItem(IDC_EDIT_LOADLEFT))->SetReadOnly(!m_b_left);
}
void CDefineModelDlg::OnCheck3Up()
{
m_b_up=!m_b_up;
((CEdit*)GetDlgItem(IDC_EDIT_LOADUP))->SetReadOnly(!m_b_up);
}
void CDefineModelDlg::OnCheck4Right()
{
m_b_right=!m_b_right;
((CEdit*)GetDlgItem(IDC_EDIT_LOADRIGHT))->SetReadOnly(!m_b_right);
}
//////////////////////////////////////////////
void CDefineModelDlg::OnButtonAdd()
{//增加定义区域
double error=1e-5;
CString strname;
//---------------有效性检查----
UpdateData(TRUE);//存到变量中去。
if(m_xlength<error)
{
AfxMessageBox("长度要大于零!");
return;
}
if(m_ylength<error)
{
AfxMessageBox("高度要大于零!");
return;
}
//-----------------------------
CRectRegion* rect=new CRectRegion();
rect->m_position[0]=m_xpos;
rect->m_position[1]=m_ypos;
rect->m_size[0]=m_xlength;
rect->m_size[1]=m_ylength;
rect->m_segment[0]=m_xseg;
rect->m_segment[1]=m_yseg;
rect->m_b_load[0]=m_b_bottom;
rect->m_b_load[1]=m_b_left;
rect->m_b_load[2]=m_b_up;
rect->m_b_load[3]=m_b_right;
rect->m_load[0]=m_load_bottom;
rect->m_load[1]=m_load_left;
rect->m_load[2]=m_load_up;
rect->m_load[3]=m_load_right;
if(m_comb_rectlist!=_T(""))
{
rect->m_strName=m_comb_rectlist;
}
else if(m_comb_rectlist==_T(""))
{
strname.Format("%s%d",rect->m_strName,m_modelEntity.GetSize());
rect->m_strName=strname;
}
m_modelEntity.SetSize(m_modelEntity.GetSize()+1);
m_modelEntity.SetAt(m_modelEntity.GetSize()-1,rect);
SetComboBox();
ReSetData();
//------------------------
((CEdit*)(GetDlgItem(IDC_EDIT_LOADBOTTOM)))->SetReadOnly(!m_b_bottom);
((CEdit*)(GetDlgItem(IDC_EDIT_LOADLEFT)))->SetReadOnly(!m_b_left);
((CEdit*)(GetDlgItem(IDC_EDIT_LOADUP)))->SetReadOnly(!m_b_up);
((CEdit*)(GetDlgItem(IDC_EDIT_LOADRIGHT)))->SetReadOnly(!m_b_right);
//------------------------
CComboBox* cb=(CComboBox*)GetDlgItem(IDC_COMBO_MODEL_LIST);
UpdateData(FALSE);
cb->SetCurSel(m_modelEntity.GetSize()-1);//设置选项
}
//设置复选框的显示数据
void CDefineModelDlg::SetComboBox()
{
int i;
CString str;
CRectRegion* rect;
CComboBox* cb=(CComboBox*)GetDlgItem(IDC_COMBO_MODEL_LIST);
cb->ResetContent();//清除所有内容
for(i=0;i<m_modelEntity.GetSize();i++)
{
m_modelEntity.GetSize();
rect=(CRectRegion*)(m_modelEntity.GetAt(i));
str.Format("%s",rect->m_strName);
cb->AddString(str);
}
}
//删除矩形区域
void CDefineModelDlg::OnButtonDelete()
{
int deleteid;
if(m_modelEntity.GetSize()==0)return;
CComboBox* cb=(CComboBox*)GetDlgItem(IDC_COMBO_MODEL_LIST);
if(cb->GetCurSel()>=cb->GetCount()||cb->GetCurSel()<0)return;
deleteid=cb->GetCurSel();
delete (CRectRegion*)m_modelEntity.GetAt(deleteid);//删除对象
m_modelEntity.RemoveAt(deleteid);//删除指针
SetComboBox();
ReSetData();
UpdateData(FALSE);
if(m_modelEntity.GetSize())cb->SetCurSel(m_modelEntity.GetSize()-1);//设置选项
}
void CDefineModelDlg::Init()
{
int i;
ReSetData();
for(i=0;i<m_modelEntity.GetSize();i++)
{
delete (CRectRegion*)(m_modelEntity.GetAt(i));
}
m_modelEntity.RemoveAll();
}
CDefineModelDlg::~CDefineModelDlg()
{
Init();
}
void CDefineModelDlg::ReSetData()
{
m_xpos = 0.0;
m_ypos = 0.0;
m_xlength = 1.0;
m_xseg = 1;
m_yseg = 1;
m_b_bottom = FALSE;
m_b_left = FALSE;
m_b_up = FALSE;
m_b_right = FALSE;
m_comb_rectlist = _T("");
m_load_right = 0.0;
m_load_up = 0.0;
m_load_left = 0.0;
m_load_bottom = 0.0;
m_ylength = 1.0;
}
//设置修改矩形状态
void CDefineModelDlg::OnSelchangeComboModelList()
{
CComboBox* cb=(CComboBox*)GetDlgItem(IDC_COMBO_MODEL_LIST);
int which=cb->GetCurSel();//要修改的元素下标
CRectRegion* rect=(CRectRegion*)(m_modelEntity.GetAt(which));
m_xpos=rect->m_position[0];
m_ypos=rect->m_position[1];
m_xlength=rect->m_size[0];
m_ylength=rect->m_size[1];
m_xseg=rect->m_segment[0];
m_yseg=rect->m_segment[1];
m_b_bottom=rect->m_b_load[0];
m_b_left=rect->m_b_load[1];
m_b_up=rect->m_b_load[2];
m_b_right=rect->m_b_load[3];
m_load_bottom=rect->m_load[0];
m_load_left=rect->m_load[1];
m_load_up=rect->m_load[2];
m_load_right=rect->m_load[3];
m_comb_rectlist=rect->m_strName;
UpdateData(FALSE);
cb->SetCurSel(which);
}
//修改当前矩形区域定义
void CDefineModelDlg::OnButtonEdit()
{
if(m_modelEntity.GetSize()==0)return;//没有东西可改
CRectRegion* rect;
CComboBox* cb=(CComboBox*)GetDlgItem(IDC_COMBO_MODEL_LIST);
int which=cb->GetCurSel();//要修改的元素,即当前选中的元素
//方法:先删除实体中对应的对象,再将对应的指针赋新的对象的地址。
//或者,直接对其指向的对象进行修改
UpdateData(TRUE);
if(which>-1)rect=(CRectRegion*)(m_modelEntity.GetAt(which));
else
{
AfxMessageBox("没有项目被选中! ");
return;
}
//--------------------------
rect->m_position[0]=m_xpos;
rect->m_position[1]=m_ypos;
rect->m_size[0]=m_xlength;
rect->m_size[1]=m_ylength;
rect->m_segment[0]=m_xseg;
rect->m_segment[1]=m_yseg;
rect->m_b_load[0]=m_b_bottom;
rect->m_b_load[1]=m_b_left;
rect->m_b_load[2]=m_b_up;
rect->m_b_load[3]=m_b_right;
rect->m_load[0]=m_load_bottom;
rect->m_load[1]=m_load_left;
rect->m_load[2]=m_load_up;
rect->m_load[3]=m_load_right;
if(m_comb_rectlist!=_T(""))
{//不为空就改,否则不变
rect->m_strName=m_comb_rectlist;
}
//--------------------------
cb->SetCurSel(which);//设置当前选中的项。
}
//////////////////////////////////////////////
///
void CDefineModelDlg::OnSetfocusEditXsegment()
{
CComboBox* cb=(CComboBox*)GetDlgItem(IDC_COMBO_MODEL_LIST);
int curindex=cb->GetCurSel();
//------------------------
UpdateData(TRUE);//存到变量
CRectRegion* rect;
double dx,dy;
//----第一个矩形已经确定,则依第一个的单元大小
if(m_modelEntity.GetSize()>0)
{
rect=(CRectRegion*)(m_modelEntity.GetAt(0));
dx=rect->m_size[0]/rect->m_segment[0];
dy=rect->m_size[1]/rect->m_segment[1];
m_xseg=int(m_xlength/dx);
// m_yseg=int(m_ylength/dx);
if(m_xseg<=0)m_xseg=1;
// if(m_yseg<=0)m_yseg=1;
}
//----没有确定,则依自定义段数,Y依于X的长度。
else
{
m_xseg=4;
// m_yseg=4;
}
UpdateData(FALSE);//更新显示
cb->SetCurSel(curindex);//保持选择
}
//////////////////////////////////////////////
///
void CDefineModelDlg::OnSetfocusEditYsegment()
{
CComboBox* cb=(CComboBox*)GetDlgItem(IDC_COMBO_MODEL_LIST);
int curindex=cb->GetCurSel();
//------------------------
UpdateData(TRUE);//存到变量
CRectRegion* rect;
double dx,dy;
//----第一个矩形已经确定,则依第一个的单元大小
if(m_modelEntity.GetSize()>0)
{
rect=(CRectRegion*)(m_modelEntity.GetAt(0));
dx=rect->m_size[0]/rect->m_segment[0];
dy=rect->m_size[1]/rect->m_segment[1];
// m_xseg=int(m_xlength/dx);
m_yseg=int(m_ylength/dx);
// if(m_xseg<=0)m_xseg=1;
if(m_yseg<=0)m_yseg=1;
}
//----没有确定,则依自定义段数,Y依于X的长度。
else
{
// m_xseg=4;
m_yseg=4;
}
UpdateData(FALSE);//更新显示
cb->SetCurSel(curindex);//保持选择
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -