在调试模式下运行时如何显示主视图 - MFC

Posted

技术标签:

【中文标题】在调试模式下运行时如何显示主视图 - MFC【英文标题】:How to show main view when running in debug mode - MFC 【发布时间】:2011-08-13 21:08:41 【问题描述】:

我有一个当前正在调试模式下运行的 MFC 项目。

我有这个“运行”按钮,当我点击它时,我的算法就会运行,最终绘制出来。

过去,点击运行后,我一直看到主视图。 过了一会儿(不知道是什么改变了它),点击后视图回到了后面(在 Visual Studio 后面)。我能够通过在“运行”一开始使用 Show_Window(SW_SHOW) 来修复它。

现在似乎没有任何效果 - 我也尝试过 OnDraw 和

`SetWindowPos(&CWnd::wndTop,0, 0, 0, 0,SWP_NOMOVE | SWP_NOSIZE);`

单击运行后,我总是将 Visual Studio 放在我的视图顶部!!! (即使没有断点、异常……)

这是我的运行函数:

void CMaBakerView::maBakerRun()
SetWindowPos(&CWnd::wndTop,0, 0, 0, 0,SWP_NOMOVE | SWP_NOSIZE);

CRect ClientRect;
GetClientRect(ClientRect);
CDC* pDC = GetDC();
OnDraw(pDC);

int xMax = ClientRect.right;
int yMax = ClientRect.bottom;

//fillGUIData();

try

    ShowWindow(SW_SHOW);
    RunAlgorithm::run(xMax, yMax);//Here only pure logic is run, i can post the code of it if anyone thinks its relevant
            //Other nonimportant code
     catch...

我注意到,在注释掉 RunAlgorithm::run 时,并没有出现问题,但这可能是因为它是函数中唯一真正需要时间的东西...... 谁能给我指路?

我使用的是 Visual Studio 2008,专业版

谢谢!

【问题讨论】:

【参考方案1】:

听起来像是 Visual Studio 或插件的问题,而不是您的程序的问题。 看看这个:Visual Studio always on top when debugging

如果不起作用,那么您可以尝试使用SetForegroundWindow 函数将您的窗口强制为前台窗口。

【讨论】:

感谢您的回复。我试过setforegrounwindow,但没有帮助。还有其他方向吗?【参考方案2】:

RunAlgorithm::run 需要多长时间?我需要更多信息,但您似乎正在阻止 UI 线程。如果这是一个长时间的操作,您应该创建一个工作线程。

如果问题是即使在完成 RunAlgorithm::run 后您的视图也没有显示,您可以尝试移动 ShowWindow(SW_SHOW);经过代码中的长时间操作。

顺便说一句,我认为从这里调用OnDraw 没有任何意义。如果您希望在长时间操作后绘制视图,则应调用 Invalidate 并让视图自行绘制。

哈维尔

【讨论】:

感谢您的回复。 RunAlgorithm::run 确实需要很长时间。我尝试将它作为线程运行,并在创建线程后立即调用 ShowWindow(SW_SHOW)。它没有解决问题...你能想出一个原因吗?

以上是关于在调试模式下运行时如何显示主视图 - MFC的主要内容,如果未能解决你的问题,请参考以下文章

应用程序仅在调试模式下崩溃

使用 mfc 的 EXE(调试)无法在其他 PC 上运行

网站在IE下运行时,IE下开调试模式才显示正常是什么原因?

Visual Studio 2010 新项目向导制造的 MFC Dialog 程序在调试模式下无法编译?

如何在调试模式下运行 wildfly,作为 Windows 上的服务?

如何准确找到调用了哪个类 DoModal() ?