问题标签 [cdialog]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
0 回答
968 浏览

c++ - 使用 CDialogEx 类时不会出现的问题

1.- 你好。在这周搜索了很多网站和论坛之后,我发现了我遇到的问题的重点。问题是,当我在 Visual C++ 中创建一个新的 MFC 项目时,如果我将应用程序类型设置为“基于对话框”并让相应的对话框类从其默认 CDialogEx 派生,那么问题显示立即编译和执行程序而无需修改任何代码(我不知道你是否可以在你的机器上试试这个)。

2.-有线行为是在对话框窗口处于活动状态时,如果我单击任务栏中的空闲空间(甚至在另一个未最大化的窗口中),则对话框窗口的边框(包括标题栏)基于 -based 的应用程序保持“聚焦”(非灰色),即单击任务栏或另一个未完全覆盖我的应用程序窗口的窗口,那么我的应用程序窗口应该有点失去焦点。

3.-我在大量代码之后意识到这一点,因为我使用 CFileDialog 类发现了这种行为,因为当我创建(DoModal)一个 CFileDialog 实例时,当文件对话框打开时我的应用程序窗口失去焦点(变得“变灰”) (应该如此)但是当文件对话框完成时,我的窗口的边框保持灰色(这是不正确的),并且它一直保持这种状态,直到我最小化并恢复我的窗口,或者我切换到另一个窗口并返回到我的窗口.

4.-我发现问题出在从 CDialogEx 类继承,因为我从头开始创建了一个 New 项目(如第 1 段所述),看看是不是我修改了一些使我的程序行为错误的东西,以及事实证明,新项目的行为与我在第 2 段中描述的一样。

5.-好消息是我尝试创建一个新项目,但这次继承自 CDialog 而不是 CDialogEx。令我惊讶的是,这个新程序的行为是正确的,我的意思是,第 2 段中描述的有线行为在这个新项目中不存在。正如我在第 3 段中所描述的,我的另一个问题是文件对话框(CFileDialog 类),幸运的是我的项目代码更改为从 CDialog 继承,而不是 CDialogEx,也解决了这个问题。我的意思是,问题出在 CDialogEx 类上。

6.-我决定写这个问题并提供我发现的信息,因为当我搜索时,我看到不同论坛中的很多人都有同样的问题而没有得到解决方案。我想提一下,我尝试了论坛中提供的所有建议,至于它们,对我没有任何帮助。

7.-正如我所说,一种解决方案是将继承从 CDialogEx 更改为 CDialog。但是我的问题是,如果您知道我应该做些什么来使我的程序在 CDialogEx 类下正常运行,因为我更喜欢使用新接口而不是旧接口。我也想知道你是否在你的视觉工作室中尝试过和我一样的问题。

我希望我的信息和您的回答对其他人有用。非常感谢您的回答。

0 投票
6 回答
5090 浏览

mfc - 带有 ActiveX 控件的对话框的 CDialog::Create 失败

我有一个模块可以创建一个包含 ActiveX 控件的无模式对话框。该模块是 MFC EXE 应用程序的一部分,对话框的创建工作正常。最近,我将模块移到 ATL/COM 服务器中,并将对话框资源从 EXE 复制到 COM 服务器中。尝试使用CDialog::Create()错误创建无模式对话框时。

我调试CDialog::Create并注意到它在::CreateDialogIndirect()返回NULLGetLastError返回时失败0。我在对话框资源属性中将“No Fail Create”标志更改为 True,并获得了有关错误的更多详细信息。问题发生在宏DoDataExchange()内的对话框中。DDX_Control这将调用CDataExchange::PrepareCtrl()控件的资源 ID,如下所示:

由于传递的资源 ID ,对该函数的调用m_pDlgWnd->GetOleControlSite()失败。顺便说一下,资源 ID 是控件的 ID。

关于为什么这在 EXE 中有效并在 COM 服务器中失败的任何建议?

0 投票
1 回答
503 浏览

mfc - 带有 MFC DLL 的 VB6 主机错误地显示模式对话框

我们有一个 VB6 应用程序,我们通过 MFC DLL 提供了扩展功能。但是,DLL 中基于 CDialog 的类存在一个特定问题。我们Me.hWnd从 VB6 应用程序的主窗体传递给 CDialog 构造函数,以便DoModal()知道它的父级是什么。尽管基于 CDialog 的类位于 VB6 应用程序的顶部DoModal(),但它们不会像模式对话框所期望的那样阻止VB6 应用程序。也就是说,当 DLL 对话框仍然在 EXE 的窗口前面时,我仍然可以单击调用 DLL 的按钮,再次(一次又一次)显示该对话框。

VB6 代码没有什么可显示的。正如我提到的,它只是传入Me.hWnd。MFC 代码很简单:

我一路跟踪这些值并使用 Spy++ 确认窗口句柄。一切似乎都很好。任何想法我错过了什么或做错了什么?

附加信息

该 hwnd 值在其他地方用于 MessageBox 并按预期工作。

0 投票
1 回答
99 浏览

visual-c++ - 有没有办法在 VC++ 的 CDialog 中散焦字段?

当我使用 VC++ 的 CDialog 项目制作对话框时,我无法在此对话框(CDialog)上散焦任何字段。我想要做的是当我用鼠标单击该字段的外部时如何使某些字段散焦。

感谢您的任何建议和意见。

0 投票
1 回答
1307 浏览

c++ - CWnd::GetParent 导致异常

我正在尝试调用 CWnd 类的函数 GetParent()。每次都会抛出异常。我正在从工作线程调用该函数。

这是导致异常的行: CWnd* parent = this->GetParent();

我也试过“GetParent()->PostMessage(........);”,但仍然抛出异常。

我在 CDialog 中使用此方法。

我注意到 CWnd 成员 m_hWnd 有时是 0x00000000 或 0x00000001。在另一台计算机上,我没有收到此异常。这是项目设置或我的代码中的问题吗?

0 投票
0 回答
537 浏览

mfc - MFC浮动CDialog控件剪辑问题

我正在制作一个使用框架视图为用户提供一组控件(按钮、编辑框等)的 SDI MDF 应用程序。该视图还拥有一组 CDialogs,用于显示可以通过 tabcontrol 和其他方式显示或隐藏的附加控件。直到最近,对话框在创建时被静态放置在屏幕上的正确位置,但我想添加一个对话框,用户可以四处移动但仍然是视图的子级。当我创建一个带有标题和系统菜单的对话框时,用户可以移动我遇到的问题是,当窗口放置在视图拥有的另一个控件上时,(比如说一个按钮)当调用绘制方法时按钮,它会覆盖对话框。对话框仍然在顶部,并且仍然可以与对话框控件进行交互,但按钮会绘制在它们之上,直到重新绘制对话框。我尝试更改对话框的 clipchild 和 clipsiblings 设置,并且能够让对话框正确地相互剪辑,但似乎无法让子对话框正确地剪辑父视图控件。有没有人对什么设置可以解决这个剪辑问题有任何想法。

0 投票
2 回答
1435 浏览

c++ - 是否有在 MFC 对话框中定义的控件列表或控件容器

我在询问 mfc 对话框中的列表或控件容器?我并不是说像这个问题那样列出对话框的子窗口Loop through MFC Child Dialogs, MDIFrames etc,我想要的是在对话框类中定义为变量的控件列表,这些控件应用了 DDX_Control 方法。

我需要在对话框中定义所有控制变量的列表

0 投票
0 回答
375 浏览

c++ - 未创建 CDialog 对象

我有一个 MFC 项目的问题。该项目最近已转换为无窗口项目,这意味着它仍然被创建但它被隐藏的窗口。它工作得很好,没有问题。

现在它有一个问题,由派生CDialog的类创建的对象没有创建。

问题出现在这里:

代码没有进入 if 循环,并且 hWnd 保持未寻址。

上面的代码在第一行BOOL CCRViewerApp::InitInstance()

你能帮我找出这个问题的原因吗?

谢谢。

0 投票
0 回答
166 浏览

visual-c++ - 无法访问子窗口的控件(使用 CDialog::Create 创建)

我一直有一些难以理解的问题,也许你们可以提供帮助。

我有一个使用 CDialog 的项目,我一直在尝试创建一个从主窗口检索一些信息的子窗口(主/子窗口有它们自己的类),编辑内容并将编辑后的信息发送回主窗口。

当我尝试使用CDialog::Create()时,我无法使用子窗口上的任何控件。(示例:按钮不响应)

当我创建子窗口时,DoModal()它适得其反。按钮是响应式的,我可以访问子窗口的类函数,但是当我试图从主窗口类中获取信息时,我被应用程序崩溃击倒了。我试过手动传递 CWnd 但它仍然崩溃..(无法检索主窗口句柄)

关于如何在仍然可以访问主应用程序的变量和子窗口的事件处理程序的同时创建子窗口的任何想法?

编辑:好的,我终于发现了问题所在:我正在使用

相反,我应该像这样创建窗口:

从按钮到数据传输的一切似乎现在都在工作。我希望它可以帮助将来像我一样愚蠢的人。

0 投票
0 回答
142 浏览

mfc - 有什么方法可以“分离”对话框的一部分?

我正在开发一个使用 Codejock XTP的旧的基于 CDialog 的应用程序。在这个对话框中,我在对话框的右边缘有一个单独的TaskPanel。(我还不能发布图片,没有足够的声誉)

我想为用户提供一种能够从对话框中分离/附加任务面板的方法。因此,如果面板被分离,用户可以单独移动主对话框和现在分离的“任务”对话框(可能在多个监视器上)。如果附加,面板只是主对话框的一部分。

面板上有很多控件,我想尝试将它们分开。大多数控件修改多个控件,这些控件可能属于也可能不属于任务面板(因此假设我创建了一个新对话框,可能是两个对话框中的任何一个的一部分)。

我应该遵循什么方法来分离和取消分离面板?我认为我不可避免地必须为那个单独的面板创建一个新对话框。我需要考虑到控件可能已经改变了我需要保持同步的值和状态。此外,控件的当前处理程序可能正在引用其他控件,假设它们在同一个对话框中。有很多控件,因此更改它需要大量工作。

任何人都可以建议任何资源/样本或任何可能有帮助的东西吗?