mfc编程 对话框中的listbox和进度条不能实时刷新,求高手指点!

在主对话框中新建了一个对话框:mymodel=newCmyModel;mymodel->Create(IDD_MODEL,this);mymodel->MoveWindo... 在主对话框中 新建了一个对话框:

mymodel = new CmyModel;
mymodel->Create(IDD_MODEL, this);
mymodel->MoveWindow(1425, 0, 180, 230, TRUE);
mymodel->ShowWindow(SW_SHOW);
在创建的对话框中的OnCtlColor函数中,实现了对话框的透明:
switch(pWnd->GetDlgCtrlID())
{
pDC->SetBkMode(TRANSPARENT);
return (HBRUSH)GetStockObject(NULL_BRUSH);
break;

}
但是 我在 listbox控件中动态添加的内容删除后,内容还显示,没有实时刷新。我在listbox控件函数中加了Invalidate()和UpdateData()函数不管用,在Onpaint函数 中加了也不起作用。
滑动条滑动后 也没有实时刷新对话框。
这应该怎么解决呢?求支招,谢谢了!
展开
 我来答
bhtzu
2014-08-11 · TA获得超过1.1万个赞
知道大有可为答主
回答量:8088
采纳率:85%
帮助的人:4053万
展开全部

这里不能实时刷新存在多种可能,你的描述太少,不能确定。

常见可能分析几个你先试试:

  1. 透明造成的。测试方法,注销OnCtrlColor中的TRANSPARENT相关代码试试。

  2. 大循环无Idle空闲造成的,通常因为大数据量在循环中加入,在循环中无法实现刷新,判断根据:循环后会一起完成刷新。

  3. 非法界面控制代码造成的,即在无透明、无大数据循环下,正常更新代码无法控制界面。这种情况比较麻烦,如果MFC不是很熟悉,建议新建一个空工程,测试代码有效性。

更多追问追答
追问
是透明造成的。但又必须将对话框透明处理。您有什么好办法吗?
追答
控件透明后,Invalidate(TRUE)函数是有效的。一般安全的做法是进行两次。

即在同一个函数中,更新内容前线Invalidate一次,更新之后再次Invalidate。注意,这个函数不能在OnPaint中调用。
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
cicjoy
2018-08-03
知道答主
回答量:1
采纳率:0%
帮助的人:824
展开全部
试试AddString后面加下面这一句:

m_ListBox.RedrawWindow();
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式