在OnDraw()函数中,利用for循环更新SetWindowText,为什么CEdit不能实时显示

guzi19801130 2017-03-25 11:52:16
如题:
在OnDraw()函数中,利用for循环更新SetWindowText,为什么CEdit不能实时显示
代码如下:
void CMy1View::OnDraw(CDC* /*pDC*/)
{
CMy1Doc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
if (!pDoc)
return;
// TODO: 在此处为本机数据添加绘制代码
CString str;
for(int i=0;i<100;i++) {
str.Format(_T("%d"), i);
ENumber->SetWindowTextW(LPCTSTR(str));
Sleep(1000);

}

}
...全文
257 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
赵4老师 2017-03-28
  • 打赏
  • 举报
回复
Windows系统:“不要调用我,请先填写好未来收到某个消息时你的处理流程,在那个消息到来时我会调用你!”
Lorenzo-Xu 2017-03-28
  • 打赏
  • 举报
回复
建议楼主先搞清楚MFC六大机制再玩MFC,不然这些问题可多了我跟你讲
kakabulusi 2017-03-28
  • 打赏
  • 举报
回复
关键是你不知ondraw函数什么时候会调用
hurryboylqs 2017-03-28
  • 打赏
  • 举报
回复
一般不这么写的,不用放在OnDraw函数里
走好每一步 2017-03-26
  • 打赏
  • 举报
回复
建议楼主去把 win32的框架过一遍,再来玩MFC。 推荐孙鑫的 VC++深入详解 或者 候捷 深入浅出MFC void CMy1View::OnDraw(CDC* /*pDC*/) { //这个函数是供自绘界面用的!!! 不是让你去SetWindowText的。 } 楼主你的功能是想每隔1秒 更新一下Edit内容, 应该开1秒钟的Timer, 在Timer里去SetWindowText。 候杰物语:勿在浮沙筑高台!
schlafenhamster 2017-03-26
  • 打赏
  • 举报
回复
void DoEvents() { MSG msg; // Process existing messages in the application's message queue. // When the queue is empty, do clean up and return. while (::PeekMessage(&msg,NULL,0,0,PM_NOREMOVE)) {// has msg if (!AfxGetThread()->PumpMessage()) break; } } void CxxxxDlg::OnButton1() { // TODO: Add your control notification handler code here CString str; for(int i=0;i<100;i++) { str.Format("%d", i+1); m_Edit1.SetWindowText(str); Sleep(200);// low speed DoEvents(); } } 注意 DoEvents() 防止阻塞
worldy 2017-03-26
  • 打赏
  • 举报
回复
ENumber->SetWindowText,是系统的控件是通过消息来更新的数据的,但你的循环阻塞了消息的发送
zgl7903 2017-03-26
  • 打赏
  • 举报
回复
OnDraw 本身就是 WM_PAINT 消息的响应, 在里面Sleep 阻塞了消息环 而导致其它消息不能被及时响应 试试强制刷新 ENumber->SetWindowTextW(LPCTSTR(str)); ENumber->RedrawWindow(NULL, NULL, RDW_ALLCHILDREN | RDW_ERASENOW | RDW_UPDATENOW);

15,982

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 界面
社区管理员
  • 界面
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧