定义文件bcsMessage.txt
PLM
PLM
PLM
#
login
login
测试
#
Active messagebox menu
Active messagebox menu
激活菜单
#
将Menu文件放置与程序同级的text文件夹下
配置ini文件
[BCS]
Path=C:\3
将配置文件放置Proe的工作目录下
代码如下:
C++
// bcsproe.cpp : 定义 DLL 的初始化例程。
//
#include "stdafx.h"
#include "bcsproe.h"
#include "afx.h"
#include "ProMenu.h"
#include "ProUtil.h"
#include "ProMenubar.h"
#include "ProPDF.h"
static uiCmdAccessState AccessDefault (uiCmdAccessMode);
void login();
void exportpdf();
#ifdef _DEBUG
#define new DEBUG_NEW
#endif
// CbcsproeApp
BEGIN_MESSAGE_MAP(CbcsproeApp, CWinApp)
END_MESSAGE_MAP()
// CbcsproeApp 构造
CbcsproeApp::CbcsproeApp()
{
// TODO: 在此处添加构造代码,
// 将所有重要的初始化放置在 InitInstance 中
}
// 唯一的一个 CbcsproeApp 对象
CbcsproeApp theApp;
// CbcsproeApp 初始化
BOOL CbcsproeApp::InitInstance()
{
CWinApp::InitInstance();
return TRUE;
}
extern "C" int user_initialize()
{
ProError status;
ProFileName message_file;
uiCmdCmdId cmd_id1;
ProFileName MsgFile;
ProStringToWstring(MsgFile, "bcsMessage.txt");
status=ProMenubarMenuAdd ("PLM", "PLM","Utilities", PRO_B_TRUE, MsgFile);
//login
status = ProCmdActionAdd("ShowTest1",(uiCmdCmdActFn)login,uiCmdPrioDefault,AccessDefault,
PRO_B_TRUE,PRO_B_TRUE,&cmd_id1);
status = ProMenubarmenuPushbuttonAdd("PLM", "login", "login","Active messagebox menu", NULL,
PRO_B_TRUE, cmd_id1, ProStringToWstring(message_file, "bcsMessage.txt"));
return status;
}
extern "C" void user_terminate()
{
AFX_MANAGE_STATE(AfxGetStaticModuleState());
}
/*================================================================*\
FUNCTION: AccessDefault()
\*================================================================*/
static uiCmdAccessState AccessDefault (uiCmdAccessMode access_mode)
{
return (ACCESS_AVAILABLE);
}
void login()/消息框
{
exportpdf();return;
}
void exportpdf()
{
ProError err;
ProPath current_path;
char c_p[200];
err=ProDirectoryCurrentGet(current_path);
if (err!=PRO_TK_NO_ERROR)
{
AfxMessageBox(_T("未获取到Proe起始目录"));
return;
}
ProWstringToString(c_p,current_path);
CString strcurrent_path = current_path;
获取配置文件路径
CString FileName =L"\\bcsConfiguration.ini";
LPTSTR lpPath = new TCHAR[MAX_PATH];
LPWSTR Path = new TCHAR[MAX_PATH];
strcurrent_path = strcurrent_path + FileName;
//AfxMessageBox(strcurrent_path);
GetPrivateProfileString(L"BCS",L"Path",L"",Path,MAX_PATH,strcurrent_path);
//AfxMessageBox(Path);
if (_tcslen(Path) < 1)
{
AfxMessageBox(L"未找到配置信息!");
return;
}
delete [] lpPath;
ProPDFOptions ops;
ProPDFoptionsAlloc(&ops);
ProMdl mdl;
//获取文件名
err = ProMdlCurrentGet(&mdl);
if (PRO_TK_NO_ERROR != err)
{
AfxMessageBox(_T("当前没有文件打开"));
return;
}
ProMode mode;
err = ProModeCurrentGet(&mode);
if (err != PRO_TK_NO_ERROR)
{
AfxMessageBox(_T("未获取到当前打开文件"));
return;
}
if (mode != PRO_MODE_DRAWING)
{
AfxMessageBox(_T("当前只支持DRW文件导出pdf"));
return;
}
ProName name;
err = ProMdlNameGet(mdl, name);
CString cstrName = name;
CString outfilepathname = Path;
outfilepathname = outfilepathname +L"\\" + cstrName + L".pdf";
//AfxMessageBox(outfilepathname.GetBuffer(0));
//导出pdf
ProPDFExport(mdl,outfilepathname.GetBuffer(0),ops);
ProPDFoptionsFree(ops);
AfxMessageBox(_T("导出完成!"));弹出一个消息框
}
下面是关于在Proe客户端的配置
定义注册文件
Protk.dat
内容如下:
NAME pt_inst_test
STARTUP DLL
ALLOW_STOP TRUE
DELAY_START FALSE
EXEC_FILE C:/Documents and Settings/Administrator/My Documents/bcsproe.dll
TEXT_DIR C:/Documents and Settings/Administrator/My Documents/text
REVISION 1000
END
若想实现Proe自动注册,则将此文件放置Proe的安装目录的text文件下,例如:C:\Program Files\proeWildfire 5.0\text,具体路径根据自己安装目录指定
注:文件名必须为Protk不能更换