我有一个MFC项目,我目前正在调试模式下运行。
我有这个“运行”按钮,当我点击它时,我的算法运行,最终得到的东西。
过去,点击运行后,我一直看到主视图。 过了一会儿(不确定是什么改变了它),点击后,视图转到后面(在Visual Studio后面)。我能够在“run”的最开始使用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专业版
谢谢!
答案 0 :(得分:0)
听起来像是Visual Studio或插件的问题,而不是您的程序。 看看这个:Visual Studio always on top when debugging
如果它不起作用,那么您可以尝试强制您的窗口成为具有SetForegroundWindow功能的前景窗口。
答案 1 :(得分:0)
RunAlgorithm::run
需要多长时间?我需要更多信息,但似乎你正在阻止UI线程。如果这是一个很长的操作,你应该创建一个工作线程。
如果问题是你的视图即使在完成RunAlgorithm :: run之后也没有出现,你可以尝试移动ShowWindow(SW_SHOW)
;在代码中长时间操作之后。
顺便说一下,我认为从这里调用OnDraw
没有任何意义。如果您希望在长时间操作后绘制视图,则应调用Invalidate
并让视图自行绘制。
哈维尔