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

📄 asm7_1dlg.cpp

📁 monlibs
💻 CPP
字号:
// Asm7_1Dlg.cpp : 实现文件
//

#include "stdafx.h"
#include "MON.h"
#include "Asm7_1Dlg.h"

extern CString libpath;


// CAsm7_1Dlg 对话框

IMPLEMENT_DYNAMIC(CAsm7_1Dlg, CDialog)

CAsm7_1Dlg::CAsm7_1Dlg(CString folder,CString menufile,CWnd* pParent)
	: CDialog(CAsm7_1Dlg::IDD, pParent)
	, m_lingjianselect(0)
	, m_zubiaoselect(0)
	, m_lastselect(_T(""))
	, m_currentselect(_T(""))
	, m_length(100)
{
	this->menufile=menufile;
	this->folder=folder;
}

CAsm7_1Dlg::~CAsm7_1Dlg()
{
}

void CAsm7_1Dlg::DoDataExchange(CDataExchange* pDX)
{
	CDialog::DoDataExchange(pDX);
	DDX_Control(pDX, IDC_LISTCTRL, m_lingjian);
	DDX_Control(pDX, IDC_PVACTIVEXCTRL1, m_pv);
	DDX_Control(pDX, IDC_LIST1, m_zubiao);
	DDX_Control(pDX, IDC_STATIC_LOGO, m_logo);
	DDX_Text(pDX, IDC_LENGTH, m_length);
	DDV_MinMaxDouble(pDX, m_length, 0, 100000.0);
}


BEGIN_MESSAGE_MAP(CAsm7_1Dlg, CDialog)
	ON_WM_MOVE()
	ON_BN_CLICKED(IDOK, &CAsm7_1Dlg::OnBnClickedOk)
	ON_NOTIFY(NM_CLICK, IDC_LISTCTRL, &CAsm7_1Dlg::OnNMClickListctrl)
	ON_NOTIFY(LVN_KEYDOWN, IDC_LISTCTRL, &CAsm7_1Dlg::OnLvnKeydownListctrl)
	ON_NOTIFY(NM_CLICK, IDC_LIST1, &CAsm7_1Dlg::OnNMClickList1)
	ON_NOTIFY(LVN_KEYDOWN, IDC_LIST1, &CAsm7_1Dlg::OnLvnKeydownList1)
	ON_BN_CLICKED(IDCANCEL, &CAsm7_1Dlg::OnBnClickedCancel)
	ON_NOTIFY(NM_DBLCLK, IDC_LIST1, &CAsm7_1Dlg::OnNMDblclkList1)
END_MESSAGE_MAP()


// CAsm7_1Dlg 消息处理程序

void CAsm7_1Dlg::OnMove(int x, int y)
{
	CDialog::OnMove(x, y);

	// 防止移动对话框时proe出现拖拽痕迹
	UsrRepaintWindow();
}

BOOL CAsm7_1Dlg::OnInitDialog()
{
	CDialog::OnInitDialog();
	
	CString title=this->menufile;
	title=title.Left(title.Find(CString(_T("."))));
	title.MakeUpper();
	title=CString(_T("MONLibs-"))+title;
	this->SetWindowText(title);
	//设置LOGO超链接
	m_logo.SetURL(CString(_T("http://hi.baidu.com/monlibs")));
	m_logo.SetTipText(CString(_T("欢迎访问monlibs")));

	//设置窗口位于屏幕中心
	CRect r;
	this->GetWindowRect(&r);
	int xl=r.Width();
	int yl=r.Height();
	int xs=::GetSystemMetrics(SM_CXSCREEN);
	int ys=::GetSystemMetrics(SM_CYSCREEN);
    int x = xs/2-xl/2;
    int y = ys/2-yl/2; 
	this->SetWindowPos(&CWnd::wndTop,x,y,xl,yl,SWP_SHOWWINDOW);

	//设置列表框内容
	(void)m_lingjian.SetExtendedStyle( LVS_EX_FULLROWSELECT );
	//m_lingjian.SetHeadings( CString(_T("零件,90;说明,170;备注,60")) );
	m_lingjian.SetHeadings( CString(_T("零件,90;说明,280")) );
	m_lingjian.LoadColumnInfo();

	(void)m_zubiao.SetExtendedStyle( LVS_EX_FULLROWSELECT );
	m_zubiao.SetHeadings( CString(_T("规格,150")));
	m_zubiao.LoadColumnInfo();

	CString list=menufile;
	list=folder+list;
	CString f;
	list=libpath+list;
	//读取mnu文件
	FILE *fp;
	fp=fopen(LPCTSTR(list),"r");
	CString gb0,gb1,gb2;
	char a[100],b[100],c[100];
	fgets(a,100,fp);
	fgets(b,100,fp);
	fgets(c,100,fp);
	while(fgets(a,100,fp)!=NULL)
	{
		fgets(b,100,fp);
		fgets(c,100,fp);
		gb0=a;
		gb1=b;
		gb2=c;
		gb0.Trim();
		gb0.MakeUpper();

		int i=gb0.Find(CString(_T(".")));           //////////////////////////////////
		int j=gb0.Find(CString(_T(".")),i+1);
		if (j>0){
			gb0=gb0.Left(j);       
		}

		gb1.Trim();
		//gb1.Delete(0,1);
		gb2.Trim();
		if(gb2==_T("#"))
		{
			gb2="";
		}

		if(gb0!="")
		{
			//(void)m_lingjian.AddItem( gb0, gb1, gb2);
			(void)m_lingjian.AddItem( gb0, gb1);
		}
	}
	fclose(fp);

	m_lingjian.SetFocus();
	m_lingjianselect=0;
	m_lingjian.SetItemState(m_lingjianselect, LVS_SHOWSELALWAYS|LVIS_SELECTED,LVS_SHOWSELALWAYS|LVIS_SELECTED);  
	POSITION pos=m_lingjian.GetFirstSelectedItemPosition();

	if(pos!=NULL)
	{
		int nItem = m_lingjian.GetNextSelectedItem(pos);
		CString gb=m_lingjian.GetItemText(nItem,0);
		if ( gb!= "")
		{	
			f=libpath+folder+gb;
			m_pv.setFileName(f);
			m_lastselect=gb;
			m_currentselect=gb;
		}

	}
	/////////////////////////////////////////////////////
	//族表数据显示
	/////////////////////////////////////////////////////
 	ProPath			name;
	ProMdl			mdl;
	ProError		status;
	ProFamtable  	famtable;
	ProFaminstance *famtable_instance;

	CString2Wstring(&f,name);
	//把模型导入内存中
	status=ProMdlLoad(name,PRO_MDL_UNUSED,PRO_B_FALSE,&mdl); 
	if (status!=PRO_TK_NO_ERROR)
	{
		AfxMessageBox(CString(_T("打开模型文件失败!请检查文件是否存在或者是否与mnu文件中描述一致!")));
		return FALSE;
	}
	status = ProFamtableInit( mdl, &famtable );	
	status=ProUtilCollectFamtableInstance(&famtable,&famtable_instance);
	int k,j=0;
	ProArraySizeGet((ProArray*)famtable_instance,&j);
	m_zubiao.DeleteAllItems();
	char *cname=new char[PRO_NAME_SIZE];
	for(k=0;k<j;k++){
		ProWstringToString(cname,(famtable_instance[k]).name);
		(void)m_zubiao.AddItem(cname);
	}

	status=ProArrayFree((ProArray *)&famtable_instance);
	status=ProMdlDelete(&mdl);

	m_zubiao.SetItemState(m_zubiaoselect, 0,LVS_SHOWSELALWAYS|LVIS_SELECTED);
	m_zubiao.SetItemState(0, LVS_SHOWSELALWAYS|LVIS_SELECTED,LVS_SHOWSELALWAYS|LVIS_SELECTED);


	return FALSE;  // return TRUE unless you set the focus to a control
	// 异常: OCX 属性页应返回 FALSE
}


/////////////////////////////////////////////////////////////////
/////               CListCtrl控件操作函数                   /////
/////////////////////////////////////////////////////////////////

void CAsm7_1Dlg::OnNMClickListctrl(NMHDR *pNMHDR, LRESULT *pResult)
{
	POSITION pos=m_lingjian.GetFirstSelectedItemPosition();
 

	CString f;
	if(pos!=NULL)
	{
		int nItem = m_lingjian.GetNextSelectedItem(pos);
		m_lingjian.SetItemState(m_lingjianselect,0,LVS_SHOWSELALWAYS|LVIS_SELECTED); 
		m_lingjian.SetItemState(nItem, LVS_SHOWSELALWAYS|LVIS_SELECTED,LVS_SHOWSELALWAYS|LVIS_SELECTED); 
		m_lingjianselect=nItem;
		CString gb=m_lingjian.GetItemText(nItem,0);
		if ( gb!= "")
		{
			f=libpath+folder+gb;
			m_pv.setFileName(f);
			//需要删除加载到内存中的模型
			EraseModel(this->m_lastselect);
			m_lastselect=gb;

		}
		m_currentselect=gb;
	}else{
		return;
	}

	/////////////////////////////////////////////////////
	//族表数据显示
	/////////////////////////////////////////////////////

 	ProPath			name;
	ProMdl			mdl;
	ProError		status;
	ProFamtable  	famtable;
	ProFaminstance *famtable_instance;

	CString2Wstring(&f,name);
	//把模型导入内存中
	status=ProMdlLoad(name,PRO_MDL_UNUSED,PRO_B_FALSE,&mdl); 
	if (status!=PRO_TK_NO_ERROR)
	{
		AfxMessageBox(CString(_T("打开模型文件失败!请检查文件是否存在或者是否与mnu文件中描述一致!")));
		return;
	}
	status = ProFamtableInit( mdl, &famtable );	
	status=ProUtilCollectFamtableInstance(&famtable,&famtable_instance);
	int k,j=0;
	ProArraySizeGet((ProArray*)famtable_instance,&j);
	m_zubiao.DeleteAllItems();
	char *cname=new char[PRO_NAME_SIZE];
	for(k=0;k<j;k++){
		ProWstringToString(cname,(famtable_instance[k]).name);
		(void)m_zubiao.AddItem(cname);
	}

	status=ProArrayFree((ProArray *)&famtable_instance);
	status=ProMdlDelete(&mdl);

	m_zubiao.SetItemState(m_zubiaoselect, 0,LVS_SHOWSELALWAYS|LVIS_SELECTED);
	m_zubiao.SetItemState(0, LVS_SHOWSELALWAYS|LVIS_SELECTED,LVS_SHOWSELALWAYS|LVIS_SELECTED);
	m_zubiaoselect=0;
	////////////////////////////////////////////////////////

	*pResult = 0;
}

void CAsm7_1Dlg::OnLvnKeydownListctrl(NMHDR *pNMHDR, LRESULT *pResult)
{
	LPNMLVKEYDOWN pLVKeyDow = reinterpret_cast<LPNMLVKEYDOWN>(pNMHDR);
	if(pLVKeyDow->wVKey== VK_UP||pLVKeyDow->wVKey== VK_DOWN)
	{
		OnNMClickListctrl(pNMHDR, pResult);
	}
	*pResult = 0;
}

//族表列表框消息响应函数
void CAsm7_1Dlg::OnNMClickList1(NMHDR *pNMHDR, LRESULT *pResult)
{
	POSITION pos=m_zubiao.GetFirstSelectedItemPosition();

	CString f;
	if(pos!=NULL)
	{
		int nItem = m_zubiao.GetNextSelectedItem(pos);
		m_zubiao.SetItemState(m_zubiaoselect,0,LVS_SHOWSELALWAYS|LVIS_SELECTED); 
		m_zubiao.SetItemState(nItem, LVS_SHOWSELALWAYS|LVIS_SELECTED,LVS_SHOWSELALWAYS|LVIS_SELECTED); 
		m_zubiaoselect=nItem;
	}
		*pResult = 0;
}


void CAsm7_1Dlg::OnLvnKeydownList1(NMHDR *pNMHDR, LRESULT *pResult)
{
	LPNMLVKEYDOWN pLVKeyDow = reinterpret_cast<LPNMLVKEYDOWN>(pNMHDR);
	if(pLVKeyDow->wVKey== VK_UP||pLVKeyDow->wVKey== VK_DOWN)
	{
		OnNMClickList1(pNMHDR, pResult);
	}
	*pResult = 0;
}


void CAsm7_1Dlg::OnBnClickedCancel()
{
	//需要删除加载到内存中的模型
	EraseModel(this->m_currentselect);
	OnCancel();
}

void CAsm7_1Dlg::EraseModel(CString mdlname)
{
	ProMdl mdl;
	ProError err; 
	ProName w_name;

	CString2Wstring(&mdlname,w_name);
	if(mdlname.Find(_T("PRT"))>-1){
		err = ProMdlInit(w_name, PRO_MDL_PART, &mdl);
	}
	else{
		err = ProMdlInit(w_name, PRO_MDL_ASSEMBLY, &mdl);  //
	}
	if(err==PRO_TK_NO_ERROR)
	{
		err = ProMdlEraseAll(mdl);
	}

}
//插入模型按钮消息响应函数
void CAsm7_1Dlg::OnBnClickedOk()
{

	OnOK();
	this->UpdateData(TRUE);
	POSITION pos=m_lingjian.GetFirstSelectedItemPosition();
	if(pos!=NULL)
	{
		int nItem = m_lingjian.GetNextSelectedItem(pos);
		CString gb=m_lingjian.GetItemText(nItem,0);
		CString zb;
		CString f;
		if ( gb!= "")
		{
			f=libpath+folder+gb;

			pos=m_zubiao.GetFirstSelectedItemPosition();
			if(pos!=NULL)
			{
				nItem = m_zubiao.GetNextSelectedItem(pos);
				zb=m_zubiao.GetItemText(nItem,0);
			}
			UsrAssemblyComponentFn_xc(f,zb,m_length);
		}

	}

}
//双击族表列表框的消息响应函数
void CAsm7_1Dlg::OnNMDblclkList1(NMHDR *pNMHDR, LRESULT *pResult)
{
	// TODO: 在此添加控件通知处理程序代码
	POSITION pos=m_zubiao.GetFirstSelectedItemPosition();
	if(pos!=NULL)
	{
		OnBnClickedOk();
	}
	*pResult = 0;
}

⌨️ 快捷键说明

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