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

📄 asm2_1dlg.cpp

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

#include "stdafx.h"
#include "MON.h"
#include "Asm2_1Dlg.h"

extern CString libpath;

// CAsm2_1Dlg 对话框

IMPLEMENT_DYNAMIC(CAsm2_1Dlg, CDialog)

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

CAsm2_1Dlg::~CAsm2_1Dlg()
{
}

void CAsm2_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_Control(pDX, IDC_LIST2, m_zilei);
}


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


// CAsm2_1Dlg 消息处理程序

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

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

BOOL CAsm2_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("零件,60;说明,170;备注,60")) );
	m_lingjian.SetHeadings( CString(_T("零件,60;说明,280")) );
	m_lingjian.LoadColumnInfo();

	(void)m_zilei.SetExtendedStyle( LVS_EX_FULLROWSELECT );
	//m_zilei.SetHeadings( CString(_T("型号,90;说明,150;注,10")));
	m_zilei.SetHeadings( CString(_T("型号,60;说明,280")));
	m_zilei.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();
		if(gb0.Left(1)==CString(_T("/"))||gb0.Left(1)==CString(_T("\\")))
			gb0.Delete(0,1);
		gb1.Trim();
		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_lingjian.SetItemState(0, LVS_SHOWSELALWAYS|LVIS_SELECTED,LVS_SHOWSELALWAYS|LVIS_SELECTED);  
	//////////////////////////////////////////////////////
	//读取第二个列表框的mnu文件并设置第一行为选中
	CString list2;
	CString gba,gbb;
	POSITION pos=m_lingjian.GetFirstSelectedItemPosition();
	if(pos!=NULL)
	{
		int nItem = m_lingjian.GetNextSelectedItem(pos);
		gba=m_lingjian.GetItemText(nItem,0);
		if ( gba!= "")
		{
			list2=libpath+folder+gba+CString(_T("\\"))+gba+CString(_T(".mnu"));
		}

	}
	fp=fopen(LPCTSTR(list2),"r");
	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_zilei.AddItem( gb0, gb1, gb2);
			(void)m_zilei.AddItem( gb0, gb1);
		}
	}
	fclose(fp);
	m_zilei.SetItemState(0, LVS_SHOWSELALWAYS|LVIS_SELECTED,LVS_SHOWSELALWAYS|LVIS_SELECTED);  
	//////////////////////////////////////////////////////

	pos=m_zilei.GetFirstSelectedItemPosition();
	if(pos!=NULL)
	{
		int nItem =m_zilei.GetNextSelectedItem(pos);
		gbb=m_zilei.GetItemText(nItem,0);
		if ( gbb!= "")
		{
			f=libpath+folder+gba+CString(_T("\\"))+gbb;
			m_pv.setFileName(f);
			m_lastselect=gbb;
			m_currentselect=gbb;
		}

	}
	/////////////////////////////////////////////////////
	//族表数据显示
	/////////////////////////////////////////////////////
 	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 CAsm2_1Dlg::OnNMClickListctrl(NMHDR *pNMHDR, LRESULT *pResult)
{
	CString list2;
	CString gba,gbb;
	POSITION pos=m_lingjian.GetFirstSelectedItemPosition();
	if(pos!=NULL)
	{
		int nItem = m_lingjian.GetNextSelectedItem(pos);
		gba=m_lingjian.GetItemText(nItem,0);
		if ( gba!= "")
		{
			list2=libpath+folder+gba+CString(_T("\\"))+gba+CString(_T(".mnu"));
		}

	}else{
		return;
	}
	m_zilei.DeleteAllItems();
	FILE *fp;
	CString gb0,gb1,gb2;
	char a[100],b[100],c[100];

	fp=fopen(LPCTSTR(list2),"r");
	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_zilei.AddItem( gb0, gb1, gb2);
		}
	}
	fclose(fp);

	m_zilei.SetItemState(m_zileiselect,0,LVS_SHOWSELALWAYS|LVIS_SELECTED); 
	m_zilei.SetItemState(0, LVS_SHOWSELALWAYS|LVIS_SELECTED,LVS_SHOWSELALWAYS|LVIS_SELECTED); 
	m_zileiselect=0;


	POSITION posa=m_lingjian.GetFirstSelectedItemPosition();
	POSITION posb=m_zilei.GetFirstSelectedItemPosition();
	CString f;
	if(posa!=NULL&&posb!=NULL)
	{
		int nItema = m_lingjian.GetNextSelectedItem(posa);
		m_lingjian.SetItemState(m_lingjianselect,0,LVS_SHOWSELALWAYS|LVIS_SELECTED); 
		m_lingjian.SetItemState(nItema, LVS_SHOWSELALWAYS|LVIS_SELECTED,LVS_SHOWSELALWAYS|LVIS_SELECTED); 
		m_lingjianselect=nItema;

		//int nItemb = m_zilei.GetNextSelectedItem(posb);


		CString gba=m_lingjian.GetItemText(nItema,0);
		CString gbb=m_zilei.GetItemText(0,0);
		if ( gba!= ""&&gbb!="")
		{
			f=libpath+folder+gba+CString(_T("\\"))+gbb;
			m_pv.setFileName(f);
			//需要删除加载到内存中的模型
			EraseModel(this->m_lastselect);
			m_lastselect=gbb;
		}else{
		return;
	}
		m_currentselect=gbb;
	}

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

 	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 CAsm2_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 CAsm2_1Dlg::OnNMClickList2(NMHDR *pNMHDR, LRESULT *pResult)
{
	POSITION posa=m_lingjian.GetFirstSelectedItemPosition();
	POSITION posb=m_zilei.GetFirstSelectedItemPosition();
	CString f;
	if(posa!=NULL&&posb!=NULL)
	{
		int nItema = m_lingjian.GetNextSelectedItem(posa);
		int nItemb = m_zilei.GetNextSelectedItem(posb);
		m_zilei.SetItemState(m_zileiselect,0,LVS_SHOWSELALWAYS|LVIS_SELECTED); 
		m_zilei.SetItemState(nItemb, LVS_SHOWSELALWAYS|LVIS_SELECTED,LVS_SHOWSELALWAYS|LVIS_SELECTED); 
		m_zileiselect=nItemb;

		CString gba=m_lingjian.GetItemText(nItema,0);
		CString gbb=m_zilei.GetItemText(nItemb,0);
		if ( gba!= ""&&gbb!="")
		{
			f=f=libpath+folder+gba+CString(_T("\\"))+gbb;
			m_pv.setFileName(f);
			//需要删除加载到内存中的模型
			EraseModel(this->m_lastselect);
			m_lastselect=gbb;
		}
		m_currentselect=gbb;
	}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;
	*pResult = 0;
}

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

//族表列表框消息响应函数
void CAsm2_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 CAsm2_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 CAsm2_1Dlg::OnBnClickedOk()
{

	OnOK();
	
	POSITION posa=m_lingjian.GetFirstSelectedItemPosition();
	POSITION posb=m_zilei.GetFirstSelectedItemPosition();
	POSITION poszb;
	if(posa!=NULL&&posb!=NULL)
	{
		int nItema = m_lingjian.GetNextSelectedItem(posa);
		CString gba=m_lingjian.GetItemText(nItema,0);
		int nItemb = m_zilei.GetNextSelectedItem(posb);
		CString gbb=m_zilei.GetItemText(nItemb,0);

		CString zb;
		CString f;
		if ( gba!=""&&gbb!="")
		{
			f=libpath+folder+gba+CString(_T("\\"))+gbb;

			poszb=m_zubiao.GetFirstSelectedItemPosition();
			if(poszb!=NULL)
			{
				int nItemzb = m_zubiao.GetNextSelectedItem(poszb);
				zb=m_zubiao.GetItemText(nItemzb,0);
			}
			UsrAssemblyComponentFn(f,zb);
		}

	}

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

void CAsm2_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 CAsm2_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 + -