RichEdit的显示 在一个for循环中,for(int i=0;i<5;i++){ // do something... richedit.SetSel(-1,-1); richedit.ReplaceSel("some words"); //问题: 我想显示的some words不能很快的更新到richedit的控件中,只有等到5次完成了,才一下子把五个 // somewords全部显示,请问如何将其一个一个的显示。 // 注:增加函数UpdateData(false);不起作用。} 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 richedit.Invalidate()试验下另外如果有其它阻塞刷新的操作 那就得想办法分线程 或者自己写个消息循环 楼主这个功能是要做什么用? 如果之后循环里面的内容 那速度应该是超快的 就是一次显示追加5个some words 把这个放在for里面 他一个一个的步骤 你用肉眼是看不到的 楼主解释一下是要做什么功能 我的do something是往com口发送码字,然后再从com口读码字。com那边有一个线程,我发现写第一个码字,读第一个码字用了很长的时间,后边用到的时间就比较少。也可能后边的运行很快,所以好像一下子五个都显示了。哎...我有点晕掉了。 你这个需求和RichEdit无关应该用独立线程处理 up up 修改如下for(int i=0;i<5;i++){ // do something... richedit.SetSel(-1,-1); richedit.ReplaceSel("some words"); UpdateWindow();} 显示一次somewords,更新一次控件 用线程去做;AfxBeginThread(ThreadProc, (LPVOID)GetSafeHwnd());UINT __cdecl ThreadProc(LPVOID lParam){ HWND hWnd = (HWND)lParam; ASSERT(hWnd); for(int i=0; i<5; i++) { ::PostMessage(hWnd, UM_MSG, 0, 0); Sleep(1000); } return 0;}#define UM_MSG WM_USER+111BEGIN_MESSAGE_MAP(CXXDlg, CDialog)...ON_MESSAGE(UM_MSG, &CXXDlg::OnHandleMsg)END_MESSAGE_MAP()LRESULT CXXDlg::OnHandleMsg(WPARAM wParam, LPARAM lParam){ richedit.SetSel(-1,-1); richedit.ReplaceSel("some words"); return 0;} 请问VisualEleven,我的do something可以放到线程函数中完成吗?do something函数是一个类的函数,CXXDlg::dosomething().把它也放到线程中是不是更好一些呢? AfxBeginThread(ThreadProc, (LPVOID)GetSafeHwnd());UINT __cdecl ThreadProc(LPVOID lParam){ HWND hWnd = (HWND)lParam; ASSERT(hWnd); ::PostMessage(hWnd, UM_MSG, 0, 0); } return 0;}#define UM_MSG WM_USER+111BEGIN_MESSAGE_MAP(CXXDlg, CDialog)...ON_MESSAGE(UM_MSG, &CXXDlg::OnHandleMsg)END_MESSAGE_MAP()LRESULT CXXDlg::OnHandleMsg(WPARAM wParam, LPARAM lParam){ do_my_work(); return 0;}void CXXDlg::do_my_work(WPARAM wParam, LPARAM lParam){ for(...) { 与com线程交互; richedit.SetSel(-1,-1); richedit.ReplaceSel(显示与com交互的结果); }}我按照上边的思路做了,还是不行。我的界面依然不能及时显示出内容,必须等到循环次数全部完成才可以。而且,我的界面的其它按钮被堵塞,点击没有相应,必须等到与com的交互完成了,才可以显示。 我基本搞定:void CXXDlg::do_my_work(WPARAM wParam, LPARAM lParam){ for(...) { 与com线程交互; richedit.SetSel(-1,-1); richedit.ReplaceSel(显示与com交互的结果); } while(PeekMessage()) { TranslateMessage(); DispatchMessage(); }}这样就可以基本相应界面的消息了。不过还不是非常的及时。有待高手继续出招。 opengl 如何实现左视图 鼠标右击显示菜单的一些问题!!! 求一个WIN32下的位图菜单的例程 开发完成的MFC ActiveX控件,本机使用正常,客户机注册成功,创建失败...谢谢! 请真的熟悉COM进程空间的朋友来指点一下 !!!关于ADO的_RecordsetPtr对象的三个问题!!! 【好文共享】VC中预处理指令与宏定义的妙用(2)-源代码版本控制 vc使用msxml4的dom解析xml文档的一个问题 救命啊!!!VC++编译器出问题了!!! map 迭代报错 VC程序 急!急!急! 关于可以直接输入内容的表格控件
我的do something是往com口发送码字,然后再从com口读码字。com那边有一个线程,
我发现写第一个码字,读第一个码字用了很长的时间,后边用到的时间就比较少。也可能
后边的运行很快,所以好像一下子五个都显示了。哎...我有点晕掉了。
应该用独立线程处理
修改如下
for(int i=0;i<5;i++)
{
// do something...
richedit.SetSel(-1,-1);
richedit.ReplaceSel("some words");
UpdateWindow();
}
AfxBeginThread(ThreadProc, (LPVOID)GetSafeHwnd());UINT __cdecl ThreadProc(LPVOID lParam)
{
HWND hWnd = (HWND)lParam;
ASSERT(hWnd);
for(int i=0; i<5; i++)
{
::PostMessage(hWnd, UM_MSG, 0, 0);
Sleep(1000);
}
return 0;
}#define UM_MSG WM_USER+111BEGIN_MESSAGE_MAP(CXXDlg, CDialog)
...
ON_MESSAGE(UM_MSG, &CXXDlg::OnHandleMsg)
END_MESSAGE_MAP()LRESULT CXXDlg::OnHandleMsg(WPARAM wParam, LPARAM lParam)
{
richedit.SetSel(-1,-1);
richedit.ReplaceSel("some words");
return 0;
}
请问VisualEleven,我的do something可以放到线程函数中完成吗?do something函数是一个类的函数,CXXDlg::dosomething().把它也放到线程中是不是更好一些呢?
AfxBeginThread(ThreadProc, (LPVOID)GetSafeHwnd());UINT __cdecl ThreadProc(LPVOID lParam)
{
HWND hWnd = (HWND)lParam;
ASSERT(hWnd);
::PostMessage(hWnd, UM_MSG, 0, 0);
}
return 0;
}#define UM_MSG WM_USER+111BEGIN_MESSAGE_MAP(CXXDlg, CDialog)
...
ON_MESSAGE(UM_MSG, &CXXDlg::OnHandleMsg)
END_MESSAGE_MAP()LRESULT CXXDlg::OnHandleMsg(WPARAM wParam, LPARAM lParam)
{
do_my_work();
return 0;
}void CXXDlg::do_my_work(WPARAM wParam, LPARAM lParam)
{
for(...)
{
与com线程交互;
richedit.SetSel(-1,-1);
richedit.ReplaceSel(显示与com交互的结果);
}
}我按照上边的思路做了,还是不行。我的界面依然不能及时显示出内容,必须等到循环次数全部完成才可以。
而且,我的界面的其它按钮被堵塞,点击没有相应,必须等到与com的交互完成了,才可以显示。
我基本搞定:
void CXXDlg::do_my_work(WPARAM wParam, LPARAM lParam)
{
for(...)
{
与com线程交互;
richedit.SetSel(-1,-1);
richedit.ReplaceSel(显示与com交互的结果);
}
while(PeekMessage())
{
TranslateMessage();
DispatchMessage();
}
}这样就可以基本相应界面的消息了。不过还不是非常的及时。有待高手继续出招。