直到我通过鼠标触摸RichEdit窗口时,其内容实时更新,但将鼠标悬停在其上可将箭头变为沙漏光标。然后窗口不会对通过标题栏移动它的三次或四次随后尝试做出反应。当它最终对鼠标拖动做出反应时,它会正常移动,但不再刷新其内容,并且标题栏变空。当我尝试点击窗口的客户区时,也会产生类似的效果。这次在没有反应窗口的几次点击后也停止更新,并且其标题栏变为(未响应)。为什么向RichEdit窗口添加文本会冻结它?
当循环最终停止节目回来窗口更新和回来“活着”。当客户区域更新时,怎样才能操作窗口(并查看它的更新内容)?
#include <windows.h>
#include <sstream>
int main() {
using namespace std;
LoadLibrary("Msftedit.dll");
HWND richeditWindow = CreateWindowExW (
WS_EX_TOPMOST,
L"RICHEDIT50W",
L"window text",
WS_SYSMENU | WS_VSCROLL | ES_MULTILINE | ES_NOHIDESEL | WS_VISIBLE,
50, 50, 500, 500,
NULL, NULL, NULL, NULL
);
for (int i = 0 ; i<100000; i++) {
wstringstream wss;
wss << i << L", ";
SendMessageW(richeditWindow, EM_REPLACESEL, FALSE, (LPARAM) wss.str().c_str());
}
MSG msg;
while(GetMessageW(&msg, richeditWindow, 0, 0)) {
TranslateMessage(&msg);
DispatchMessageW(&msg);
}
}
该代码是完全错误的。你需要检查PeekMessage的返回值。那里可能没有消息。如果有什么东西,你应该清空队列。否则,你会做一个关键,然后添加更多的文字,然后做一个关键,等等。那会好吗?你应该打电话翻译信息。但是,为什么不只是一次性添加所有文本呢?更糟糕的是,搞乱像这样的混乱队列是混乱和糟糕的形式。在另一个线程中运行循环。另外,如果用户开始输入,该怎么办。现在他们的文本与你的文字混淆了。 –
是的,我知道代码看起来并不专业,但工作起来,我并不是那么迷恋发生在引擎盖下的事情,让计算机感受到痛苦,计算机对于人类来说不是其他方式。无论如何,这只是一个例子。 – rsk82
没有数量的抛光修复了这一点。我很努力地知道我的答案有什么问题。 –