作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我是 MFC 的新手,正在制作一个将不断更新两个编辑框的简单程序。编辑框包含鼠标光标的 x 和 y 坐标。该程序仅在单击开始按钮时才开始抓取光标坐标,并且应该在单击停止按钮时停止。但只要我点击开始按钮,整个窗口就会卡住。
这是我目前所拥有的:
//Way up high in the code:
#include <windows.h>
//way down low in the code
void CmfcpixelDlg::OnBnClickedButtonStart()
{
POINT p;
CString x;
CString y;
int px;
int py;
while(stop == false){
GetCursorPos(&p);
px = p.x;
//convert x coordinate to a CString
x.Format(L"%d", px);
//convert y coordinate to a CString
py = p.y;
y.Format(L"%d", py);
m_x.SetWindowTextW(x.GetBuffer());
m_y.SetWindowTextW(y.GetBuffer());
}
}
最佳答案
您正在阻止事件循环。您不能执行需要用户干预才能在 GUI 线程中结束的循环 - 您需要在单独的线程中执行。
事实上,您不应该在主线程中执行任何冗长的操作。
基本上,运行循环的线程就是负责显示和更新 GUI 的线程。因为此线程现在正在等待 GUI 更新以退出循环并且此线程与应该更新 GUI 的线程相同,所以您遇到了 Catch-22,或者用程序员的话来说,就是死锁。
要解决此问题,您可以将代码拆分到一个新线程中,或者更好的是,将其设计为完全消除循环。您的代码相当简单,并且可以无循环地完成:
关于c++ - 如何在不卡住窗口的情况下在 MFC 中连续运行函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14362339/
我是一名优秀的程序员,十分优秀!