问题标签 [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 投票
1 回答
309 浏览

dll - 使用 JNI 从 Java 打开 CDialog

我有一个应用程序需要打开一个在 DLL 中编写的 CDialog。问题是当在 DLL 中调用 DoModal() 时,程序崩溃并显示:“Debug Assertion Failed!”。有谁知道我怎样才能打开 CDialog?谢谢!

0 投票
4 回答
3179 浏览

mfc - 带有 WS_POPUP 对话框的自定义工具提示

我想创建自定义工具提示,我可以在其中放置任何类型的控件。我从 CDialog 派生并使用了这些WS_POPUP | WS_BORDER样式。我还在CS_DROPSHADOWOnInitDialog 中添加样式以获取工具提示阴影。

然后我自己管理WM_MOUSEHOVERWM_MOUSELEAVE事件来显示/隐藏工具提示。

我使用SetWindowPosSWP_NOACTIVATE来显示工具提示,以防止父级变为非活动状态以及新对话框变为活动状态。但无论如何,当我使用CDialog::Create方法创建对话框时......主窗口变得不活动......什么会产生非常糟糕的效果。

所以我的问题是如何创建一个具有 WS_POPUP 样式的 CDialog 而不会在新对话框出现时我的主窗口(或对话框的父窗口)变为非活动状态???

感谢您的帮助!

编辑:我不使用 WS_VISIBLE 样式来创建对话框......这是资源:

显示工具提示的代码是这样的:

第一次(即在调用创建时)主窗口失去焦点......其余的这种丑陋的效果没有发生......所以我确定是因为创建。

0 投票
4 回答
13650 浏览

c++ - 如何将焦点设置为 CButton,以便边框和焦点虚线可见?

我创建了一个简单的基于对话框的应用程序,并在默认的 CDialog 中使用 Visual Studio 编辑器添加了三个按钮(通过拖放它们)。

默认的确定和取消按钮也在那里。

当我单击按钮 3 时,我想将焦点设置到按钮 1。

我在 muy 按钮的属性中将属性 Flat 设置为 true。

我编码了这个:

但是 button1 中的边框从未被绘制。只有在单击按钮 3 之前按 TAB 键时才会绘制插入符号(表示焦点的虚线)。

我希望按钮看起来与单击后的外观完全相同。以编程方式显示按钮内的虚线将是一个加号。

我想要的是:

http://i33.tinypic.com/11t8pkl.png

我得到什么:

http://i37.tinypic.com/160q5hw.png

0 投票
1 回答
496 浏览

mfc - 映射两个按钮时CDialog未关闭

Visual Studio 2005、C++、Windows XP。

我有一个带有单个按钮的 CDialog,它调用如下函数:

单击“X”时对话框关闭。

我将上面的代码更改为:

我的对话窗口将不再关闭。每当单击 X 时,都会调用 Baz()。由于某种原因,第二个 ON_BN_CLICKED() 处理程序正在替换正常的对话框关闭行为。

如何关闭具有两个或更多按钮映射到功能的对话框?

0 投票
3 回答
5445 浏览

windows - 适用于 Windows 的命令行对话框工具

我需要一个类似于 cdialog(或whiptail)的对话工具,但可以在 Windows 上运行。

我有 MinGW 并且从源代码编译一些东西没有问题,但是我所知道的唯一 cdialog 和whiptail 都包含特定于 UNIX 的代码,因此它们不会在 Windows 上编译。

有没有我可以使用的替代品?我宁愿不必自己弄清楚和替换特定于平台的代码。

0 投票
1 回答
132 浏览

.net - .NET + COM 改变了键盘路由行为

我有一个很奇怪的问题,以至于我几乎无法给它一个适当的标题。

简而言之:我有一个用 MSVC++/MFC 编写的 COM 对象,其中有一个从 CDialog 派生的对话框。在那个对话框中,我有三个子“用户控件”——从普通 CWnd 派生的窗口。

当我从各个地方使用这个 COM 对象时,一切都按我的预期工作。但是当我从 C# 应用程序(.exe 文件)中使用它时,键盘行为是不同的,或者我应该说坏了。

我的意思是:

  • 当我的任何“用户控件”具有焦点时按下的每个键都会从某处产生“错误哔声”,即使我试图吞下 WM_KEYDOWN 消息
  • “用户控件”没有收到 WM_CHAR / OnChar,尽管 Spy++ 说有一个已发布
  • 如果我在 OnKeyDown 和 OnChar 中首先放置一个 MessageBox,那么突然 OnChar 被调用并且在显示位于 OnKeyDown 中的第一个 MessageBox 之前它被调用
  • 我可以通过从 OnKeyDown 发布消息来克服缺少 OnChar 被调用的问题,但我无法找到停止哔哔声的方法

与非 .NET 应用程序中使用的 COM 对象对话框相比,这完全是 CHANGED 行为。

我找到了一个我不太满意的工作,所以如果有人能对这个问题有所了解,我会很高兴!:-)

周围的工作是这样的。而不是创建我的“用户控件”,如下所示:

我将其更改为:

然后我必须确保屏蔽键盘、鼠标和焦点消息,这样底层的编辑控件就不会干扰我。我只是害怕我会错过阻止一些重要的消息,并且用户会在我自己发现之前发现一些意想不到的行为......

简而言之:“某事”(与周围的 .NET 环境有关)认为我的“CWnd 控件”无法进行键盘处理并与我混淆。从“编辑”派生使这个“东西”改变了它的想法。例如,当周围的进程是 VB6 应用程序时,所有这些都不会发生。

有人吗?

0 投票
2 回答
4767 浏览

c++ - MFC CDialog::Create 失败

我在创建基于 CDialog 的窗口时遇到了一些代码问题。该代码上周运行良好。我所做的唯一更改是将 C++ 双端队列替换为哈希数组。我已经注释掉了调用 Create 方法的代码行,以允许我跳过加载窗口。现在代码不再创建窗口了。

Create 函数返回 false,GetLastError 函数返回 0。我没有在窗口内使用任何自定义控件 - 只是一个复选框和一个列表控件。据我所知(此时我无法连接调试器) OnCreate 和 OnInitDialog 函数根本没有被调用。

我粘贴了下面的代码,用于测试 Create 函数的返回和 GetLastError

更新:我终于设法让调试器附加(这是一个加载在第三方应用程序中的插件,由于某种原因不喜欢调试器)。单步执行代码后,似乎 AfxGetMainWnd() 返回 NULL。我现在正在对此进行更多测试。

0 投票
2 回答
534 浏览

mfc - 在屏幕一角创建一个 CDialog

我有一个创建 CDialog 的 MFC 应用程序。我希望这个 CDialog 不显示在屏幕中间,而是显示在屏幕的一侧,这样它几乎不可见甚至最小化都会很好。

我怎样才能做到这一点?

0 投票
3 回答
8429 浏览

mfc - 在运行时将无模式对话框转换为模式

我有一个对话框(CDialog 派生类),可以以两种不同的方式(编辑模式和编程模式)使用。

当对话框打开以在编程模式下使用时,它是一个无模式对话框,用于修改主视图(一种工具栏)。当它以编辑模式打开时,用户可以更改对话框本身的配置,在这种情况下它是一个模态对话框。

现在它们是两个不同的对话框,几乎没有区别,我只想有一个对话框,让用户只需按下对话框中的一个按钮就可以在编程模式和编辑模式之间切换。

所以我需要在模式对话框中转换无模式对话框,反之亦然。有没有办法做到这一点?

谢谢。

0 投票
1 回答
311 浏览

mfc - CDialog不是主框架后代

有没有办法使对话框(CDialog)不是主框架的后代?

如果我在创建时没有指定父窗口,则父窗口就是主应用程序窗口。我尝试将 SetOwner 和 SetParent 与 NULL 参数一起使用,但没有奏效。

那么有没有办法让对话框不是主窗口的子窗口或任何其他最终是主窗口子窗口的窗口?