乐筑天下

搜索
欢迎各位开发者和用户入驻本平台 尊重版权,从我做起,拒绝盗版,拒绝倒卖 签到、发布资源、邀请好友注册,可以获得银币 请注意保管好自己的密码,避免账户资金被盗
查看: 154|回复: 11

Bricscad 和 wxWidgets

[复制链接]

6

主题

46

帖子

4

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
69
发表于 2010-1-8 23:09:02 | 显示全部楼层 |阅读模式
现在Bricscad到Linux的端口已经开始了...还不要太兴奋,它仍然是prealpha。我一直在考虑如何制作可能与这个新的杀手级应用程序一起工作的插件。我知道官方发展援助库应该是独立于平台的(尽管Linux还没有DRX SDK!),所以我假设在某个时候BricscadLinux会加载DRX模块。我也知道BRX应用程序可能无法工作,因为它们已经链接到MFC。因此,我们需要使用像wxWidgets这样的跨平台GUI,与Bricscad使用的GUI相同。
为自己获取wxWidgets的副本,使用VC8/Unicode编译它,
使用必要的路径设置VC8 i. e
$(DRX206)\include
$(BRICSDS)
$(WxW)\include
$(WxW)\msvc\include
and
$(DRX206)\lib\VC8md
$(BRICSDS)
$(WxW)lib\vc_lib
添加这些预处理器定义
DRXWX_EXPORTS
wxUSE_GUI=1
__WXMSW__
为您的DLLMain使用这样的
  1. // __WXMSW__ needs to be defined
  2. #ifdef __WXMSW__
  3. static HANDLE ThreadId;
  4. class WXEXPORT wxDLLApp : public wxApp
  5. {
  6. public:
  7.   bool OnInit()
  8.   {
  9.     //Set the Bricscad main frame as the top level wxWindow
  10.     wxWindow * win = new wxWindow();
  11.     win->SetHWND((WXHWND)sds_getmainhwnd());
  12.     win->AdoptAttributesFromHWND();
  13.     SetTopWindow(win);
  14.     return true;
  15.   }
  16. };
  17. IMPLEMENT_APP_NO_MAIN(wxDLLApp)
  18. DWORD WINAPI ThreadProc(LPVOID lpParameter)
  19. {
  20.   wxApp::SetInstance(new wxDLLApp());
  21.   wxEntry(GetModuleHandle(NULL),NULL,NULL,SW_SHOW);
  22.   return true;
  23. }
  24. BOOL APIENTRY DllMain(HANDLE hModule,
  25.                       DWORD  ul_reason_for_call,
  26.                       LPVOID lpReserved
  27.                       )
  28. {
  29.   switch (ul_reason_for_call)
  30.   {
  31.   case DLL_PROCESS_ATTACH:
  32.     ThreadId = CreateThread(NULL,0,ThreadProc,NULL,0,NULL);
  33.     break;
  34.   case DLL_THREAD_ATTACH: break;
  35.   case DLL_THREAD_DETACH: break;
  36.   case DLL_PROCESS_DETACH:
  37.     wxEntryCleanup();
  38.     break;
  39.   }
  40.   return TRUE;
  41. }
  42. #endif

本帖以下内容被隐藏保护;需要你回复后,才能看到!

游客,如果您要查看本帖隐藏内容请回复
回复

使用道具 举报

6

主题

46

帖子

4

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
69
发表于 2010-1-8 23:12:44 | 显示全部楼层
接下来,设置一个对话框,我只使用了一个快速示例
  1. class CustomDialog : public wxDialog
  2. {
  3. public:
  4.    CustomDialog(const wxString& title , wxWindow* parent = NULL);
  5. };
  1. CustomDialog::CustomDialog(const wxString & title , wxWindow* parent/* = NULL*/)
  2. : wxDialog(parent, -1, title, wxDefaultPosition, wxSize(250, 230))
  3. {
  4.   wxPanel *panel = new wxPanel(this, -1);
  5.   wxBoxSizer *vbox = new wxBoxSizer(wxVERTICAL);
  6.   wxBoxSizer *hbox = new wxBoxSizer(wxHORIZONTAL);
  7.   wxStaticBox *st = new wxStaticBox(panel, -1, wxT("Colors"),
  8.     wxPoint(5, 5), wxSize(240, 150));
  9.   wxRadioButton *rb = new wxRadioButton(panel, -1,
  10.     wxT("256 Colors"), wxPoint(15, 30), wxDefaultSize, wxRB_GROUP);
  11.   wxRadioButton *rb1 = new wxRadioButton(panel, -1,
  12.     wxT("16 Colors"), wxPoint(15, 55));
  13.   wxRadioButton *rb2 = new wxRadioButton(panel, -1,
  14.     wxT("2 Colors"), wxPoint(15, 80));
  15.   wxRadioButton *rb3 = new wxRadioButton(panel, -1,
  16.     wxT("Custom"), wxPoint(15, 105));
  17.   wxTextCtrl *tc = new wxTextCtrl(panel, -1, wxT(""),
  18.     wxPoint(95, 105));
  19.   wxButton *okButton = new wxButton(this, -1, wxT("Ok"),
  20.     wxDefaultPosition, wxSize(70, 30));
  21.   wxButton *closeButton = new wxButton(this, -1, wxT("Close"),
  22.     wxDefaultPosition, wxSize(70, 30));
  23.   hbox->Add(okButton, 1);
  24.   hbox->Add(closeButton, 1, wxLEFT, 5);
  25.   vbox->Add(panel, 1);
  26.   vbox->Add(hbox, 0, wxALIGN_CENTER | wxTOP | wxBOTTOM, 10);
  27.   SetSizer(vbox);
  28. }

,现在调用新的对话框
  1. class CommandDRXTest : public OdStaticRxObject
  2. {
  3. public:
  4.   const OdString localName() const { return globalName(); }
  5.   const OdString groupName() const { return DD_T("DRXGLOBAL"); }
  6.   const OdString globalName() const { return DD_T("DRXTest"); }
  7.   //++--
  8.   void execute(OdEdCommandContext* pCmdCtx)
  9.   {
  10.     OdDbCommandContextPtr pDbCmdCtx(pCmdCtx); //++-- downcast for database access
  11.     OdDbUserIO* pDbIO = pDbCmdCtx->dbUserIO(); //++-- User IO
  12.     OdDbDatabasePtr pDb = pDbCmdCtx->database(); //++-- Current database
  13.    
  14.     CustomDialog custom(wxT("CustomDialog"));
  15.     custom.ShowModal();
  16.   }
  17. };

回复

使用道具 举报

116

主题

996

帖子

9

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1466
发表于 2010-1-8 23:15:35 | 显示全部楼层

回复

使用道具 举报

6

主题

46

帖子

4

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
69
发表于 2010-1-9 09:16:59 | 显示全部楼层
酷!!!我想知道如何做到这一点……我知道有人要求提供一个包含基于wx的界面的示例应用程序,但我没有找到。我想知道他们是在考虑包装所需的MFC依赖项还是什么Connect(wxEVT_MOVE, wxMoveEventHandler(CustomDialog::OnMove));
  this->Centre();
}
void CustomDialog::OnMove( wxMoveEvent & event )
{
  wxPoint size = event.GetPosition();
  st1->SetLabel(wxString::Format(wxT("x: %d"), size.x ));
  st2->SetLabel(wxString::Format(wxT("y: %d"), size.y ));
}
[/code]
回复

使用道具 举报

6

主题

46

帖子

4

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
69
发表于 2010-1-9 09:26:32 | 显示全部楼层
模态和非模态Dan?
回复

使用道具 举报

6

主题

46

帖子

4

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
69
发表于 2010-1-9 10:33:11 | 显示全部楼层
是的,先生
回复

使用道具 举报

6

主题

46

帖子

4

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
69
发表于 2010-1-9 20:36:22 | 显示全部楼层
嘿,这个wxWidgets的东西就像完全整洁,它应该与ARX / BRX / SDS等一
起工作,我只需要弄清楚如何在getXXX函数
期间让位于编辑器窗口
回复

使用道具 举报

6

主题

46

帖子

4

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
69
发表于 2010-1-9 21:35:14 | 显示全部楼层
是的,正确传递信息似乎是个问题。我能够获得键盘和鼠标事件,由于一些奇怪的原因,点击按钮事件失败。当将按钮事件映射到mouse_ left_。哦,好吧
回复

使用道具 举报

6

主题

46

帖子

4

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
69
发表于 2010-1-9 21:44:49 | 显示全部楼层
我想我之前读到的关于将wx插件加载到wxApp中的内容表明我会使用wx RTTI宏:
  1. DECLARE_ABSTRACT_CLASS and IMPLEMENT_ABSTRACT_CLASS
  2. DECLARE_DYNAMIC_CLASS and IMPLEMENT_DYNAMIC_CLASS

然后在wxApp中使用wxPluginManager::LoadLibrary()完成加载,然后由主wxApp注册。我不确定这一点如何适用于金砖四国。我已经问过了,所以希望会有结果。
我没有特别指出,但我似乎记得其他人说过在DLL中创建wxApp并将其加载到基于wx的应用程序中是不安全的,但我可能是错的,或者它可能与某些特定的用法有关。
伙计,你似乎学东西学得太快了...
回复

使用道具 举报

116

主题

996

帖子

9

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1466
发表于 2010-1-9 21:51:04 | 显示全部楼层

很高兴从马的嘴里听到Linux /MacAPI/SDK的计划,这样我们就可以计划
回复

使用道具 举报

发表回复

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

QQ|关于我们|小黑屋|乐筑天下 繁体中文

GMT+8, 2025-2-5 22:01 , Processed in 0.412904 second(s), 72 queries .

© 2020-2025 乐筑天下

联系客服 关注微信 帮助中心 下载APP 返回顶部 返回列表