在调试模式下运行时如何显示主视图 - 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的主要内容,如果未能解决你的问题,请参考以下文章
Visual Studio 2010 新项目向导制造的 MFC Dialog 程序在调试模式下无法编译?