问题标签 [mfc]

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 投票
5 回答
2510 浏览

visual-c++ - 屏幕截图在 Vista 中的 MFC 应用程序上不起作用

我们有一些在 MFC 中构建的内部应用程序,带有 OpenGL 绘图例程。他们都使用相同的代码在屏幕上绘图并打印屏幕或将其保存为 JPEG 文件。在 Windows XP 中一切都运行良好,我需要找到一种方法让它们在 Vista 上运行。

在我们的三个应用程序中,一切正常。在剩下的一个中,我可以得到窗口边框、标题栏、菜单和任务栏,但内部从来没有出现过。正如我所说,这些应用程序使用完全相同的代码来写入屏幕并捕获窗口图像,我看到的唯一区别可能是相关的问题应用程序使用 MFC 多文档界面,而那些该工作使用单一文档界面。

要么答案不在网上,要么我在谷歌上的搜索比我想象的要差。我在 MSDN 论坛上问过,我得到的唯一实用建议是使用 GDI+ 而不是 GDI,这并没有什么不同。我对捕获和打印或保存的代码的每一部分都尝试了不同的东西,给出了一个指向窗口的指针,所以显然这是窗口本身的问题。我还没有使用 SDI 重建有问题的应用程序,我真的没有任何其他想法。

有没有人见过这样的事情?


我有四个应用程序。他们使用很多通用代码,并共享实际的 .h 和 .cpp 文件,所以我知道绘图和屏幕截图代码是相同的。

有一个 WindowtoDIB() 例程,它采用 *pWnd、源矩形和目标大小。它看起来像是经过略微改编的 Microsoft 代码,我在 Microsoft 网站上的此文件中找到了其他功能。在我的四个应用程序中,三个处理得很好,但一个没有。最明显的区别是问题之一是MDI。

在我看来,*pWnd 是问题所在。我绝对不是 MFC 专家,在我看来,问题可能在于我们在 SDI 中设置了一个窗口,而在 MDI 中设置了多个窗口。我可能将错误的 *pWnd 传递给函数。

同时,它已经开始在 64 位 Vista 测试机上正常工作,但在 32 位 Vista 机器上仍然无法正常工作。我不知道为什么。自上次测试以来,我没有改变任何东西,我认为其他人也没有。(在 32 位版本上,Print Screen 键按预期工作,但它不会将屏幕保存为 JPEG。)

0 投票
3 回答
4068 浏览

visual-c++ - CTreeCtrl 对象上的 TVN_SELCHANGED 问题

我有使用 CTreeCtrl MFC 类创建的树控件对象。树控件需要支持重命名。当我左键单击 Tree 中的任何项目时,将调用 TVN_SELCHANGED 事件,我可以从中获取树的选定项目,如下所示: HTREEITEM h = m_moveListTree.GetSelectedItem(); CString s = m_moveListTree.GetItemText(h);

但是,当我右键单击树中的任何项目时,我没有收到任何 TVN_SELCHANGED 事件,因此我选择的项目仍然与左键单击事件相同。这导致了以下问题:1)用户左键单击项目 A 2)用户右键单击项目 B 并说重命名 3)由于所选项目仍然是 A,因此重命名正在申请项目 A。

请帮助解决问题。

-普拉文

0 投票
2 回答
3112 浏览

c++ - 如何在 CEdit 控件中保留插入符号位置?

我正在 MFC 中编写一个应用程序(不要问),我有一个包含数字的 CEdit 框。编辑该数字时,我想对更改采取行动,然后将插入符号替换为我对更改采取行动之前的位置-如果用户就在“。”之前 在“35.40”中,如果他们将其更改为“345.40”,我希望它仍然放在点之前。我目前正在接收 CHANGE 消息,但可以切换到其他内容(更新?)。我怎样才能做到这一点?

0 投票
6 回答
2583 浏览

c++ - 如何在 Windows 的 C++ 中检测拨号、宽带或无线 Internet 连接?

我有一个安装程序(只是一个常规的 C++ MFC 程序,不是基于 Windows Installer),它需要根据 Internet 连接的类型设置一些注册表值:宽带、拨号和/或无线。目前,这些信息是通过询问一系列是或否问题来确定的。问题是进行安装的人与拥有和使用计算机的人不同,因此他们并不总是确定这些问题的答案应该是什么。有没有办法以编程方式确定这些信息?该代码是用 C++(和可选的 MFC)编写的,适用于 Windows XP 及更高版本。基于 .NET 的解决方案不是一个选项,因为我不想在我们的安装程序可以运行之前确定是否安装了框架。

澄清一下,问题主要是无线和拨号连接不是“永远在线”,这导致我们的产品需要以不同的方式运行,因为我们的服务器并不总是可用。因此,严格的速度测量解决方案无济于事,尽管有一个与速度相关的设置,因此产品在连接后不会尝试通过拨号连接发送 MB 的信息。

0 投票
2 回答
919 浏览

qt - 与没有 MFC 的 CMutex 交互

我们有多个 MFC 应用程序,它们使用 CMutex(false, "blah"),其中 "blah" 允许互斥锁跨进程边界工作。

其中一个应用程序是在没有 MFC 的情况下重写的(改用 Qt)。如何使用 Win32 调用模拟 CMutex?(Qt 的 QMutex 不是进程间的。)我不想修改 MFC 应用程序。

0 投票
4 回答
16513 浏览

c++ - 如何在非客户区绘图?

我希望能够在窗口的非客户区的菜单栏右侧进行一些绘图。

这可能吗,使用 C++ / MFC?

0 投票
2 回答
870 浏览

windows-mobile - 如何通过 MFC 在 windows mobile 6 中将软键与基于 CDialog 的应用程序一起使用?

如何通过 MFC 在 windows mobile 6 中将软键与基于 CDialog 的应用程序一起使用?

我有一个基于 CDialog 的 Windows Mobile 6(触摸屏)专业应用程序,我正在使用它。

WM6 Professional 中基于 CDialog 的应用程序的默认行为是默认不使用任何软键...我想将软键映射到“取消”和“确定”功能,将 IDOK 和 IDCANCEL 发送到我的主对话框类。

我一直在尝试与 CCommandBar 一起工作,但没有成功,而且 SHCreateMenuBar 也不适合我。

有没有人有如何让它工作的样本?

0 投票
7 回答
12121 浏览

c++ - 单元测试 MFC UI 应用程序?

如何对大型 MFC UI 应用程序进行单元测试?

我们有一些已经开发多年的大型 MFC 应用程序,我们使用一些标准的自动化 QA 工具来运行基本脚本来检查基础、文件打开等。这些由 QA 组在每日构建后运行。

但是我们想介绍一些程序,以便各个开发人员在将代码提交到日常构建之前,可以针对应用程序的对话框、菜单和其他可视元素构建和运行测试。

我听说过诸如仅在调试版本中出现的对话框上的隐藏测试按钮之类的技术,是否有任何标准工具包。

环境是 C++/C/FORTRAN、MSVC 2005、Intel FORTRAN 9.1、Windows XP/Vista x86 & x64。

0 投票
4 回答
2831 浏览

c++ - 什么是最好的 Ribbon UI 控件,可以重新适应使用 VC2005 构建的传统 MFC 应用程序?

您在将 Ribbon 样式控件引入传统 MFC 应用程序方面有什么经验?

我知道它存在于新的 VC2008 功能包中,但是从 VC2005 更改编译器对于我们的源代码库和集成到我们的环境、英特尔 FORTRAN、ClearCase 和许多第三库来说是一件大事。

有一些不同的商业实现,大多数专注于 C#/VB .NET,只有少数用于原生 C++ MFC。

我已经阅读了谷歌发现的所有常见评论,现在大多数评论都已经过时了,所以我对那些实际做过的人感兴趣,经历过痛苦的障碍,发布了一个带有 VC2005 和功能区 UI 的遗留应用程序。

我们目前使用非常旧版本的 Stingray Objective Toolkit 来提供我们的 MFC 扩展,例如可自定义的工具栏和停靠窗口等。


任何使用Prof-UIS的人,与其他商业软件相比,它相对便宜、无限制的开发者许可成本是其他人的十分之一。

是否有任何免费的、开源的或 L-GPL 可用的?

0 投票
5 回答
6621 浏览

windows - 以编程方式更新具有 SVN 修订号的 MFC 应用程序中的 FILEVERSION

如何以编程方式更新 MFC 应用程序中的 FILEVERSION 字符串?我有一个构建过程,用于生成包含给定版本的 SVN rev 的头文件。我正在使用来自http://www.compuphase.com/svnrev.htm的 SvnRev来更新用于设置 MFC 应用程序标题栏的头文件。现在我想将此#define 用于我的 FILEVERION 信息。

最好的方法是什么?