明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
楼主: 橡皮

ARX wxwidgets 界面开发

[复制链接]
发表于 昨天 16:31 | 显示全部楼层
橡皮 发表于 2025-8-22 14:53
https://4brubberi-my.sharepoint.com/:f:/g/personal/tao_4brubberi_onmicrosoft_com/EhqlSC_PPXhLmfs5p ...

好的,谢谢
回复 支持 反对

使用道具 举报

发表于 昨天 17:30 | 显示全部楼层
如果wxwindow不设置父窗口,那么他和cad就没有关系,他们是两个窗口,而showmodal只是消息阻塞,cad还能点击,如果点击就会挡住wxwindow。
模态窗口的创建大概是这么个流程,构建对象,设置父窗口,弹窗窗口,窗口的焦点自然从父窗口到了子窗口,系统创建模态窗口的时候会禁用父窗口,关闭的时候启用父窗口,焦点自然就回到了父窗口。
而wxwindow如果不能设置正确的设置父窗口,那么他是当做一个独立的窗口运行,关闭时焦点不会切换会父窗口,手动设置焦点就会闪屏。

手动模态对话框
  1. CWnd* mfcWnd = acedGetAcadFrame();
  2.                 mfcWnd->EnableWindow(FALSE);
  3.                 CArxWxDialog dlg(nullptr);
  4.                 dlg.ShowModal();
  5.                 mfcWnd->EnableWindow(TRUE);
  6.                 mfcWnd->SetFocus();

回复 支持 反对

使用道具 举报

 楼主| 发表于 昨天 18:51 | 显示全部楼层
edata 发表于 2025-8-22 17:30
如果wxwindow不设置父窗口,那么他和cad就没有关系,他们是两个窗口,而showmodal只是消息阻塞,cad还能点 ...

是的,所以如果要使用的话就是设置 wxwidgets 的对话框样式为 置顶。焦点不会切换我只在 2026遇见有,同时我测试 MFC 在 2026上对话框交点也会被 CAD 夺走
回复 支持 反对

使用道具 举报

 楼主| 发表于 昨天 19:11 | 显示全部楼层
本帖最后由 橡皮 于 2025-8-22 19:14 编辑
edata 发表于 2025-8-22 17:30
如果wxwindow不设置父窗口,那么他和cad就没有关系,他们是两个窗口,而showmodal只是消息阻塞,cad还能点 ...
HWND acadHwnd = adsw_acadMainWnd();
wxNativeContainerWindow parent((WXHWND)acadHwnd);
CContourDialog theDialog(&parent, entIds);
theDialog.ShowModal();

我参照 wxwidgets 中使用 MFC 的 sample 发现这个是可以的,

e 大晚上可以试一试有没有问题,我先干个饭先,,,逃。。。
回复 支持 反对

使用道具 举报

发表于 昨天 19:30 | 显示全部楼层
这个sample 实际上我也看到了,设置父窗口的问题倒是解决了,但是wxdialog的ShowModal貌似也不会禁用这个父窗口,会导致父窗口还能收到消息,比如你点一下cad菜单,可能就崩了。如果调用enable,还是会有焦点的问题。切换焦点还是会闪屏。
不知道你那边闪不闪。
回复 支持 反对

使用道具 举报

发表于 昨天 20:02 | 显示全部楼层
思路基本理清了,
  1.                 HWND acadHwnd = adsw_acadMainWnd();
  2.                 wxNativeContainerWindow parent((WXHWND)acadHwnd);
  3.                 CArxWxDialog theDialog(&parent);
  4.                 parent.Enable(false);//禁用父窗口
  5.                 theDialog.ShowModal();
  6.                 parent.Enable(true);//避免忘记启用       
复制代码


在关闭按钮的事件中,提前解锁,这样对话框退出的时候,才能把焦点给cad,否则在解开禁用时就会出现cad不在前面的问题。
  1. void CArxWxDialog::OnCancel(wxCommandEvent& WXUNUSED(event)) {
  2.         wxWindow*pParent=GetParent();
  3.         if (pParent)
  4.         {
  5.                 pParent->Enable(true); //对话框结束前解开禁用
  6.         }
  7.         EndModal(wxID_CANCEL);
  8.         //Show(false); // 或 EndModal(wxID_CANCEL); // 模态对话框
  9. }
复制代码


大致是这个思路,封装封装,应该可以作为基类使用了。
try it
回复 支持 反对

使用道具 举报

 楼主| 发表于 昨天 20:08 | 显示全部楼层
edata 发表于 2025-8-22 19:30
这个sample 实际上我也看到了,设置父窗口的问题倒是解决了,但是wxdialog的ShowModal貌似也不会禁用这个父 ...



我这好像没有你说的那个问题,或者说我们测试的方式可能有点不太一样

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

x

评分

参与人数 1明经币 +1 收起 理由
gzxl + 1 赞一个!

查看全部评分

回复 支持 反对

使用道具 举报

发表于 昨天 20:33 | 显示全部楼层
橡皮 发表于 2025-8-22 20:08
我这好像没有你说的那个问题,或者说我们测试的方式可能有点不太一样

能搞停靠CAD的么
回复 支持 反对

使用道具 举报

 楼主| 发表于 昨天 20:41 | 显示全部楼层
gzxl 发表于 2025-8-22 20:33
能搞停靠CAD的么

不知道,找时间试一试吧
回复 支持 反对

使用道具 举报

发表于 昨天 22:06 | 显示全部楼层
橡皮 发表于 2025-8-22 20:08
我这好像没有你说的那个问题,或者说我们测试的方式可能有点不太一样

可以结案了,我用的3.2.8的库的问题,3.3.1没我说的问题。不知道更新了啥。
回复 支持 反对

使用道具 举报

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

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2025-8-23 23:13 , Processed in 0.173542 second(s), 18 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表