📄 asm7_1dlg.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 + -