橡皮 发表于 2025-8-22 14:53
https://4brubberi-my.sharepoint.com/:f:/g/personal/tao_4brubberi_onmicrosoft_com/EhqlSC_PPXhLmfs5p ...
好的,谢谢
如果wxwindow不设置父窗口,那么他和cad就没有关系,他们是两个窗口,而showmodal只是消息阻塞,cad还能点击,如果点击就会挡住wxwindow。
模态窗口的创建大概是这么个流程,构建对象,设置父窗口,弹窗窗口,窗口的焦点自然从父窗口到了子窗口,系统创建模态窗口的时候会禁用父窗口,关闭的时候启用父窗口,焦点自然就回到了父窗口。
而wxwindow如果不能设置正确的设置父窗口,那么他是当做一个独立的窗口运行,关闭时焦点不会切换会父窗口,手动设置焦点就会闪屏。
手动模态对话框
CWnd* mfcWnd = acedGetAcadFrame();
mfcWnd->EnableWindow(FALSE);
CArxWxDialog dlg(nullptr);
dlg.ShowModal();
mfcWnd->EnableWindow(TRUE);
mfcWnd->SetFocus();
edata 发表于 2025-8-22 17:30
如果wxwindow不设置父窗口,那么他和cad就没有关系,他们是两个窗口,而showmodal只是消息阻塞,cad还能点 ...
是的,所以如果要使用的话就是设置 wxwidgets 的对话框样式为 置顶。焦点不会切换我只在 2026遇见有,同时我测试 MFC 在 2026上对话框交点也会被 CAD 夺走
本帖最后由 橡皮 于 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 大晚上可以试一试有没有问题,我先干个饭先,,,逃。。。
这个sample 实际上我也看到了,设置父窗口的问题倒是解决了,但是wxdialog的ShowModal貌似也不会禁用这个父窗口,会导致父窗口还能收到消息,比如你点一下cad菜单,可能就崩了。如果调用enable,还是会有焦点的问题。切换焦点还是会闪屏。
不知道你那边闪不闪。
思路基本理清了,
HWND acadHwnd = adsw_acadMainWnd();
wxNativeContainerWindow parent((WXHWND)acadHwnd);
CArxWxDialog theDialog(&parent);
parent.Enable(false);//禁用父窗口
theDialog.ShowModal();
parent.Enable(true);//避免忘记启用
在关闭按钮的事件中,提前解锁,这样对话框退出的时候,才能把焦点给cad,否则在解开禁用时就会出现cad不在前面的问题。
void CArxWxDialog::OnCancel(wxCommandEvent& WXUNUSED(event)) {
wxWindow*pParent=GetParent();
if (pParent)
{
pParent->Enable(true); //对话框结束前解开禁用
}
EndModal(wxID_CANCEL);
//Show(false); // 或 EndModal(wxID_CANCEL); // 模态对话框
}
大致是这个思路,封装封装,应该可以作为基类使用了。
try it
edata 发表于 2025-8-22 19:30
这个sample 实际上我也看到了,设置父窗口的问题倒是解决了,但是wxdialog的ShowModal貌似也不会禁用这个父 ...
我这好像没有你说的那个问题,或者说我们测试的方式可能有点不太一样
橡皮 发表于 2025-8-22 20:08
我这好像没有你说的那个问题,或者说我们测试的方式可能有点不太一样
能搞停靠CAD的么
gzxl 发表于 2025-8-22 20:33
能搞停靠CAD的么
不知道,找时间试一试吧
橡皮 发表于 2025-8-22 20:08
我这好像没有你说的那个问题,或者说我们测试的方式可能有点不太一样
可以结案了,我用的3.2.8的库的问题,3.3.1没我说的问题。不知道更新了啥。