- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
直到现在,我从未真正需要我正在开发的大型 MFC(如果重要,则为单文档界面)应用程序的 Winapp ExitInstance()。但现在我这样做了,主要是为了清理内存分配、卸载一些 DLL 等。好吧,我很快就从明显的内存泄漏中了解到,ExitInstance 没有被调用。我错过了一些明显的东西吗?我是否需要向消息映射手动添加一些内容以确保调用我的 ExitInstance 覆盖?
我想我可以在其他地方进行清理,但如果我可以让它运行的话,这是最好的地方。有趣的是,我通过在 Google 中输入诸如“ExitInstance never called”之类的字符串找到了很多这样的实例,但在任何情况下都没有提供任何真正的答案。当有人单击关闭框或"file"菜单中的“退出”时,应用程序通常会关闭,而且大型机窗口的 OnClose() 肯定总是会被调用。我什至尝试通过放置 AfxGetMainWnd()->DestroyWindow(); 来强制执行操作;在该大型机 OnClose() 事件中,但我仍然无法让 ExitInstance() 实际运行。也许这只是一个大的虚拟函数?或者我只是个大笨蛋? :-)
最佳答案
我遇到了与您类似的问题...我的问题是由混合 Unicode 和 MBCS 构建代码引起的...也许这是您的根本原因?
我不得不将一个 MBCS 应用程序转换为 Unicode,但不可能转换整个项目,所以我不得不混合使用 Unicode 编译代码(应用程序)和 MBCS 编译代码(DLL)。
一些 MBCS DLL 是 MFC 扩展 DLL,其他是常规 DLL。
其中一个 MFC 扩展 DLL 包含资源(位图图像列表和公共(public)对话框)。
我没有将 DLL 转换为 UNICODE,因为它有很多依赖 DLL,这些 DLL 也必须进行转换,此外,我不需要通用对话框中的控件来支持 Unicode 文本。
所以我将 DLL 保留为 MBCS,并在使用 MBCS DLL 中使用资源的任何类之前使用 AfxSetResourceHandle.....这是为了直接从 DLL 中提取资源,而不是通过 MFC 资源链,因为否则 MFC 找不到非 unicode 资源。
我猜 MFC 不喜欢你混合使用包含资源的 Unicode 和非 Unicode 编译代码......资源链中的查找失败(我猜与资源 ID 的转换有关到 ID 字符串,即通过 MAKEINTRESOURCE)。
我将主应用程序设为 UNICODE,并确保 MBCS DLL 中类的 C++ header 在函数原型(prototype)中使用 CStringA,或接受宽字符串并在内部进行转换。
我发现我的应用程序无法正常退出...它将停留在 MFC CWinThread::PumpMessage/AfxInternalPumpMessage() 调用中,并且永远不会调用 ExitInstance。
为了解决它,在我的 CMainFrame::OnDestroy() 中,我将以下内容作为最后 2 个语句:
void CMainFrame::OnDestroy()
{
....
CFrameWnd::OnDestroy();
AfxPostQuitMessage(0);
}
关于mfc - MFC 应用程序中未调用 ExitInstance,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3186965/
我有一个 MFC 项目,它链接到第三方 dll。在程序退出时,IDE 会报告“检测到内存泄漏!”并倾倒泄漏物。 这些泄漏来自第三方 dll。我很确定这些是错误的报道。 (Google 的快速检查表明
首先我想要的是:能够显示具有多列的网格,每个单元格都有一个自定义渲染回调。因此,您可以使用这样的控件在游戏中显示您的库存,或者类似于 Google Chrome 中的行为,它会显示您访问的热门页面的网
在新的 MFC 功能(功能包)中,菜单出现在三个地方: 在菜单栏中 (CMFCMenuBar) 在弹出菜单中 (CMFCPopupMenu) 在 CMFCButton 的“下拉菜单”版本中 我想在所有
在我的 MFC 项目中,我想动态生成标签。例如:我必须为它们生成 4 个编辑控件和相应的标签——比如“Label1”“Label2”...... CStatic *label[MAX_THREAD];
我有第一个对话框,上面有一个简单的按钮,单击该按钮时,使用 CDialog::Create(IDD,this) 创建了第二个对话框。我希望在销毁第二个对话框但不向第二个对话框添加任何代码时通知父级,即
我们的代码库中的添加到剪贴板代码非常低级 - 分配全局内存等等。对于简单的情况,我只想将一些纯文本放在剪贴板上,是否有任何例程可以包装所有这些内容? 一个例子是 CRichEditCtrl 具有 Co
我对 mfc 中事件和消息之间的区别有点困惑。 他们是一样的吗? 最佳答案 由于您专门询问 MFC,我假设您指的是可以在 MFC 类的属性窗口中定义的事件处理程序和消息处理程序。 在“事件”下,您可以
如何以编程方式检测我的 MFC 应用程序当前是否正在显示模式对话框或属性表?目前我正在使用以下内容,但我觉得该代码也会触发无模式对话框。 bool HasModalDialog(const CWnd*
我有两个按钮: 单选按钮:“十六进制” 按钮:“A” 我想在用户选中“十六进制”按钮时启用“A”(“A”在创建时的状态为“禁用”),我该怎么做?谢谢大家。 最佳答案 您需要使用 CButton 's
通常情况下,窗口的厚度为 4 个像素,可以通过 GetSystemMetrics 方法获取。我可以更改它的值,例如 2 个像素吗? 非常感谢! 最佳答案 简单的回答:不。不适用于特定窗口。 复杂的答案
我需要打开一个从同一个类实例化的对话框两次。当我尝试这个时 CdelmeDlg dlg; dlg.DoModal(); dlg.DoModal(); 第二个调用只打开对话框一瞬间,然后关闭。我敢打赌消
如何通过代码在 mfc 中减少标题栏的窗口? 最佳答案 用: ModifyStyle (WS_CAPTION, 0); // to hide ModifyStyle (0, WS_CAPTION);
我使用 AfxMessageBox 关键字显示消息框。基本的东西。 但是,由于路径的长度,它显示如下: 有什么方法可以阻止它以这种方式自动换行吗? 抱歉,如果这是一个愚蠢的问题。但如果我只有一个句子,
所以,我有一个 MFC 程序的插件。我正在使用鼠标事件 Hook (来自 SetWindowsHookEx)来捕获点击。主机应用程序可以打开任意数量的(可能重叠的)子窗口,但我只想拦截特定子窗口中的点
我正在尝试将图像添加到现有按钮..我在一定程度上做到了这一点,问题是我可以添加一个所有者绘制的图像,但无法添加我想要的确切图像..示例见下文代码 CButton* pBtn= (CButton*)Ge
我想在对话框的标题栏上放置一些控件。一种可能的解决方案是,我只是从对话框中删除标题栏并绘制自己的标题栏。 但是如果我自己画标题栏,标题栏的外观不会根据窗口的主题而改变。而且我也不得不忍受接近、最小化和
我已经使用 MinGW 开发了 WinAPI 应用程序,没有问题。现在,我可以用 MFC 做同样的事情吗? 最佳答案 你不能。 MFC 代表 Microsoft Foundation Classes,
(我正在使用VS ++ 2005) 我在对话框上放置了编辑框控件(ID为ID_edit_box),并为其关联了两个变量(使用处理程序向导):控件(c_editbox)和值(v_editbox)变量。我
我有一个自定义 MFC 对话框 CMyDialog,使用资源编辑器添加了一个类型为 CMyControl 的自定义控件 - 该对话框有一个控件的成员变量并且有 DDX设置。 该控件正在接收绘制消息,并
直到现在,我从未真正需要我正在开发的大型 MFC(如果重要,则为单文档界面)应用程序的 Winapp ExitInstance()。但现在我这样做了,主要是为了清理内存分配、卸载一些 DLL 等。好吧
我是一名优秀的程序员,十分优秀!