编辑问题已解决,请参阅下文
我们不得不将MFC应用程序从Visual Studio 2003迁移到2008年。大部分都没问题,除了一个巨大的缺陷:发布版本没有正确显示我们的对话框,而调试版本工作正常。
以下是它应该是什么样子的示例(以及它在调试中的样子): http://img11.hostingpics.net/pics/864144InterfaceOK1OUT.png
(故意将黑色方块放在图片上) 这是发布版本的样子: http://img11.hostingpics.net/pics/813251InterfaceKO1OUT.png
现在,为了解决这个问题,我经历了不同的步骤:
我起初认为它是一些不在这里的DLL或版本错误的版本(哦,可能有点提到我们也从x86到x64系统;应用程序仍然以32位开发),但自发布调试以来,我不太确定,因为它不使用调试DLL(在进程资源管理器中验证它)。
我在这里不知所措,而且真的不懂c ++,所以任何帮助都会非常感激:)
编辑两个对话框实际上包含相同的组件,Release版本中的一个显示为“折叠”,大部分位于左上角,就好像它不知道放置组件的位置一样。
编辑好的,问题解决了:
好的,那太傻了......
问题出现在以下代码中:
CMainFrame* pFrame = new CMainFrame;
m_pMainWnd = pFrame;
CRect rect;
pFrame->Create(NULL, formatString(IDR_TITRE), WS_CAPTION | MFS_SYNCACTIVE, rect, 0);
(“CMainFrame”继承自CMiniFrameWnd)
“CRect rect;”在VS2003中没问题,甚至在VS 2008中的Debug构建中看起来还行,但回想起来我认为它一直都是错误的,因为它没有初始化对象(如下所述:msdn.microsoft.com/fr-fr /library/9y3502k0(v=vs.90).aspx)。因此,出于某种原因,这在Release版本中不起作用。
我必须像这样编辑它:
CMainFrame* pFrame = new CMainFrame;
m_pMainWnd = pFrame;
CRect rect(0,0,0,0);
pFrame->Create(NULL, formatString(IDR_TITRE), WS_CAPTION | MFS_SYNCACTIVE, rect, 0);
框架的尺寸稍后会重新设计,因此我分配给它的值并不重要,但似乎我必须分配它们。
完成后,应用程序正常运行并且显示正常。
感谢迈克尔指出我正确的方向,我想要一个更加遥远的解决方案。
答案 0 :(得分:0)
CFrameWnd::Create的文档明确指出,您必须提供一个包含窗口所需大小和位置的矩形,或者您必须提供默认矩形(rectDefault),以便Windows选择大小和位置。
此默认矩形在MFC中定义如下:
const AFX_DATADEF CRect CFrameWnd::rectDefault( CW_USEDEFAULT, CW_USEDEFAULT, 0, 0);
CW_USEDEFAULT在WinUser.h中定义如下:
#define CW_USEDEFAULT ((int)0x80000000)
现在我想你可能只是很幸运,你的应用程序可能会失败,这取决于矩形的未初始化值,即使使用VS2K3也是如此。