kdub 发表于 2016-2-2 22:03:35

wxWidgets和Brx/Arx

第1步的另一个尝试是从https://www.wxwidgets.org/downloads/我正在使用3.0.2,这也是本文第2步的最新版本,使用与wxWidgets-x.xx.x\build\msw中的目标“visual studio版本”匹配的解决方案进行编译。构建库,而不是DLL,因为我们将使用静态链接
步骤3,在输出目录,即wxWidgets-3.0.2\lib中,我在库文件夹名称中插入了编译器版本,即从vc_
**** Hidden Message *****

MickD 发表于 2016-2-2 22:17:03


我注意到他们也有DotNet二进制文件
http://wxnet.sourceforge.net/binary.html

olegog 发表于 2016-2-2 22:24:43

步骤4,添加一个指向您的wxWidgets文件夹的Windows系统变量,我使用了WxArx步骤5,创建一个Arx项目并将路径添加到您的SDK,我不添加MFC支持。示例包含路径:$(_SDK_PATH_)\inc;$( _SDK_PATH_)\inc-$(PlatformName);$(WxArx)\Include;$(WxArx)\include\msvc示例库路径是:$(_SDK_PATH_)\lib-$(PlatformName);$(WxArx)\lib\vc120_x64_lib定义:__WXMSW__和wxMSVC_VERSION_AUTO将依赖项添加到您将要使用的小部件库中,我将其添加到我的StdAfx.h 。
#define __WXMSW__。
#define wxMSVC_VERSION_AUTO。

#ifdef __WXMSW__。
#include。
#include。
#include。

#pragma comment(lib, “wxbase30u.lib”)。
#pragma comment(lib, “wxtiff.lib”)。
#pragma comment(lib, “wxbase30u_net.lib”)。
#pragma comment(lib, “wxscintilla.lib”)。
#pragma comment(lib, “wxbase30u_xml.lib”)。
#pragma comment(lib, “wxregexu.lib”)。
#pragma comment(lib, “wxexpat.lib”)。
#pragma comment(lib, “wxpng.lib”)。
#pragma comment(lib, “wxjpeg.lib”)。
#pragma comment(lib, “wxmsw30u_xrc.lib”)。
#pragma comment(lib, “wxmsw30u_adv.lib”)。
#pragma comment(lib, “wxmsw30u_webview.lib”)。
#pragma comment(lib, “wxmsw30u_aui.lib”)。
#pragma comment(lib, “wxmsw30u_stc.lib”)。
#pragma comment(lib, “wxmsw30u_core.lib”)。
#pragma comment(lib, “wxmsw30u_richtext.lib”)。
#pragma comment(lib, “wxmsw30u_gl.lib”)。
#pragma comment(lib, “wxmsw30u_ribbon.lib”)。
#pragma comment(lib, “wxmsw30u_html.lib”)。
#pragma comment(lib, “wxmsw30u_qa.lib”)。
#pragma comment(lib, “wxmsw30u_media.lib”)。
#pragma comment(lib, “wxzlib.lib”)。
#pragma comment(lib, “wxmsw30u_propgrid.lib”)。
#endif。


olegog 发表于 2016-2-2 22:32:32


我还没有尝试过这些,可能会很有趣!

olegog 发表于 2016-2-2 22:39:09

接下来,我们需要一个从 wxApp 派生的应用程序类,重要的是我们要定义 IMPLEMENT_APP_NO_MAIN 或 wxIMPLEMENT_APP_NO_MAIN ,因为这是一个插件,我们希望使用主机应用程序消息 //WxRxApp.h。
类 WxRxApp : 公共 wxApp。
{。
公共:。
virtual bool OnInit();。
static bool initWxApp();。
static void uninitWxApp();。
static wxWindow* mainWindow();。
};。
//WxRxApp.cpp。
#include “stdafx.h”。
#include “WxRxApp.h”。
#include “wx/aui/aui.h”。

类 WinFrame : public wxFrame。
{。
公共:。
WinFrame(HWND HWND)。
{。
this->SetHWND(hwnd);。
this->AdoptAttributesFromHWND();。
this->m_isShown = true;。
wxTopLevelWindows.Append(this);。
}。
};。

static WinFrame* getMainWindow()。
{。
静态 WinFrame* win = NULL;。
如果 (win == NULL)。
win = new WinFrame(adsw_acadMainWnd());。
回报赢;。
}。

WXDLLIMPEXP_BASE void wxSetInstance(HINSTANCE hInst);。

bool WxRxApp::OnInit()。
{。
wxSetInstance(acrxGetApp()->GetModuleInstance());。
wxTheApp->SetTopWindow(getMainWindow());。
::wxInitAllImageHandlers();。
wxXmlResource::Get()->InitAllHandlers();。
return (wxTheApp->GetTopWindow() != NULL);。
}。

bool WxRxApp::initWxApp()。
{。
if (wxInitialize())。
{。
wxApp::SetInstance(new WxRxApp());。
if (wxTheApp && wxTheApp->CallOnInit())。
返回 true;。
}。
返回 false;。
}。

void WxRxApp::uninitWxApp()。
{。
wxUninitialize();。
}。

wxWindow* WxRxApp::mainWindow()。
{。
return getMainWindow();。
}。

IMPLEMENT_APP_NO_MAIN(WxRxApp); //need this。
IMPLEMENT_WX_THEME_SUPPORT;。
编辑添加了WXDLLIMPEXP_BASE void wxSetInstance(HINSTANCE hInst);。

MickD 发表于 2016-2-2 22:46:54

现在我们可以在On_kInitAppMsg中初始化我们的wxApp,并在On_kUnloadAppMsg中取消初始化    virtual AcRx::apprecode On _ kInitAppMsg(void * PKT){ 。
// TODO:在此加载依赖项。

//您*必须*在此处调用_ kintappmsg 。
AcRx::AppRetCode retCode = acrxaxapp::On _ kintappmsg(PKT);。


如果(!WxRxApp::initWxApp()) //。
acutPrintf(_ T(" \ n初始化wxWidgets时出错\ n ");。

ret(retCode);。
}。

virtual AcRx::AppRetCode On _ kUnloadAppMsg(void * PKT){ 。
// TODO:在此添加您的代码。

WxRxApp::uninitWxApp();。

//您*必须*在此处调用_ kUnloadAppMsg 。
AcRx::AppRetCode retCode = acrxaxapp::On _ kUnloadAppMsg(PKT);。

// TODO:在此卸载依赖项。

ret(retCode);。
}。

MickD 发表于 2016-2-2 23:01:01

在第一篇帖子中添加了VS2015项目示例。

olegog 发表于 2016-2-3 00:37:04

谢谢丹尼尔。我会尽快去看一看,因为BRX已经在我的待办事项列表上有一段时间了。

MickD 发表于 2016-2-3 02:06:25


很酷

MickD 发表于 2016-2-3 02:08:48

示例对话框
类MyDialog:public wxDialog
{
公共:
MyDialog(wxWindow*parent)
<div>无效按钮(wxCommandEvent和事件)
虚拟WXLRESULT-MSWWindowProc(WXUINT-nMsg、WXWPARAM-wParam、WXLPARAM-lParam)
私人版:
wxButton*m_btnModal,
*m_btnmodels,
*m_btnDelete
wxDECLARE_EVENT_TABLE()
}
包括“stdafx.h”
#包括“SampWxDialog1.h”
wxBEGIN_EVENT_TABLE(MyDialog,wxDialog)
EVT_BUTTON(wxID_ANY,MyDialog::OnButton)
wxEND_EVENT_TABLE()
MyDialog::MyDialog(wxWindow*parent)
:wxDialog(父、wxID_ANY、wxString(wxT(“模态对话框”))
{
wxBoxSizer*sizerTop=新的wxboksizer(wxHORIZONTAL)
sizerTop->Add(新的wxButton(这个,wxID_CLOSE),0,wxALIGN_CENTER|wxALL,5)
<div>设置SizerAndft(sizerTop)
SetEscapeId(wxID_CLOSE)
CenterOnParent()
}
<div>作废MyDialog::OnButton(wxCommandEvent&event)</div>
{
如果(this->IsModal())
EndModal(wxID_CANCEL)
其他
这个->销毁()
}
WXLRESULT-MyDialog::MSWWindowProc(WXUINT-nMsg、WXWPARAM-wParam、WXLPARAM-lParam)
{
开关(nMsg)
{
案例WM_ACAD_KEEPFOCUS:
返回TRUE
}
返回wxDialog::MSWWindowProc(nMsg、wParam、lParam)
}
静态无效WxRxProject_
{
wxWindow*win=WxRxApp::mainWindow()
如果(赢)
{
<div>MyDialog客户诊断(win)
custDiag.showmodel()
}
}
静态空隙WxRxProject_wxTest5(空隙)
{
wxWindow*win=WxRxApp::mainWindow()
如果(赢)
{
MyDialog*custDiag=新建MyDialog(win)
custDiag->Show()
}
}
页: [1] 2
查看完整版本: wxWidgets和Brx/Arx