【发布时间】:2012-12-15 15:09:39
【问题描述】:
我们有一个 VB6 应用程序,我们通过 MFC DLL 提供了扩展功能。但是,DLL 中基于 CDialog 的类存在一个特定问题。我们从 VB6 应用程序的主窗体传入 Me.hWnd 以提供给 CDialog 构造函数,以便 DoModal() 知道它的父级是什么。尽管基于 CDialog 的类在 DoModal() 上位于 VB6 应用程序的顶部,但它们不会像模式对话框所期望的那样阻止 VB6 应用程序。也就是说,当 DLL 对话框仍然在 EXE 的窗口前面时,我仍然可以单击调用 DLL 的按钮,再次(一次又一次)显示该对话框。
VB6 代码没有什么可显示的。正如我提到的,它只是通过Me.hWnd。 MFC代码很简单:
HWND exeHwnd = pSessionContext->GetHWnd(); // our state container for the DLL
CWnd* exeWnd = CWnd::FromHandle(exeHwnd);
MyCDialog dlg(exeWnd);
INT_PTR result = dlg.DoModal();
// waits, stays in front, but does not "block" the window
switch (result) // ...
我沿途跟踪了这些值,并使用 Spy++ 确认了窗口句柄。一切似乎都很好。任何想法我错过了什么或做错了什么?
附加信息
该 hwnd 值在 MessageBox 的其他地方使用并按预期工作。
【问题讨论】:
-
pSessionContext->GetHWnd返回 VB6 的Me.hWnd?
标签: mfc vb6 modal-dialog cdialog