Диалоговая форма и ее подключение

Автор OlegD, 18.10.18, 12:30:52

« назад - далее »

0 Пользователи и 1 гость просматривают эту тему.

OlegD

Добрый день. Возник вопрос с обращением к Dialog в visual studio C++.
Надо что бы библиотека при запуске в Компасе при нажатии на кнопку на рис.


открывало форму Dialog. Как в примерах из SDK AUTO. Но ни как не могу понять как это сделать. В самих примерах SDK "gayka" и "studs3d" в принципе это и реализовано. Но сколько я бы не смотрел, не могу разобраться как это там сделано.

Единственное что понял, что это делается в "void WINAPI LIBRARYENTRY(unsigned int comm)". Сейчас у меня там смотрится открыта ли сборка, и если что создает ее, а потом должно появляться окно Dialog, и вот тут то я и встал в ступор.

Буду благодарен если что то подскажете по этому поводу.

#include "stdafx.h"
#include "step3D1.h"
#include "Dialog.h"
#include "afxdialogex.h"


#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

ksPartPtr part;

BEGIN_MESSAGE_MAP(Dialog, CDialogEx)
ON_BN_CLICKED(IDC_BUTTON1, &Dialog::OnBnClickedButton1)
END_MESSAGE_MAP()

unsigned int WINAPI LIBRARYID() {
return IDS_LIBID;
}

KompasObjectPtr kompas(NULL);

void CreateExtrusion(ksDocument3DPtr& doc);

void GetKompas() {
if (!kompas) {
CString filename;
if (::GetModuleFileName(NULL, filename.GetBuffer(255), 255)) {
filename.ReleaseBuffer(255);
CString libname;

#ifdef __LIGHT_VERSION__
libname.LoadString(IDS_STRING5);  //klAPI5.dll
#else
libname.LoadString(IDS_STRING4);  //kAPI5.dll
#endif

filename.Replace(filename.Right(filename.GetLength() - (filename.ReverseFind('\\') + 1)),
libname);

HINSTANCE hAppAuto = LoadLibrary(filename); // идентификатор kAPI5.dll
if (hAppAuto) {
typedef LPDISPATCH(WINAPI *FCreateKompasObject)();
FCreateKompasObject pCreateKompasObject =
(FCreateKompasObject)GetProcAddress(hAppAuto, "CreateKompasObject");
if (pCreateKompasObject)
kompas = pCreateKompasObject();
FreeLibrary(hAppAuto);
}
}
}
}


void WINAPI LIBRARYENTRY(unsigned int comm) {
// по умолчанию ресурсы берутся из .exe файла, для того чтобы их достать
// из нашей dll вызовем этот define
AFX_MANAGE_STATE(AfxGetStaticModuleState());

GetKompas();
if (kompas) {
ksDocument3DPtr doc(kompas->ActiveDocument3D());
if (!doc) {
// Если не является 3D деталью, то создаю его
doc = kompas->Document3D();
if (doc->Create(false, false)) {
doc->author = _T("");
doc->comment = _T("3D");
doc->UpdateDocumentParam();
}
}

if (doc)
{

}
}
}

// диалоговое окно Dialog

IMPLEMENT_DYNAMIC(Dialog, CDialogEx)

Dialog::Dialog(CWnd* pParent /*=NULL*/)
: CDialogEx(IDD_DIALOGBAR, pParent)
{

}

Dialog::~Dialog()
{
}

void Dialog::DoDataExchange(CDataExchange* pDX)
{
CDialogEx::DoDataExchange(pDX);
}

// обработчики сообщений Dialog
void Dialog::OnBnClickedButton1()
{
// TODO: добавьте свой код обработчика уведомлений
}