当前位置: 代码迷 >> VC/MFC >> 关于界面上控件发现奇怪有关问题
  详细解决方案

关于界面上控件发现奇怪有关问题

热度:158   发布时间:2016-05-02 03:48:53.0
关于界面上控件发现奇怪问题
最近在做界面相关的东西,还是直接进入主题:

一个对话框,属性是child(不解释为什么是这个类型,但是程序所需),上面有个进度条子。还有一个按钮。

功能是:上传文件。

这个小界面的功能是,点击按钮后,选择要上传的文件,然后开启一个小线程去专门处理上传文件的部分。

在这里面,为了对对话框上的进度条子进行setpos,调用了诸如:hProgress=GetDlgItem、CProgressCtrl * cProgress = (CProgressCtrl *)CWnd::FromHandle(hProgress);等相关的代码

在开始的时候,这个代码没有问题。然后当进度条走到一段距离后,程序突然报错。显示afxcmn2.inl 363行。异常

去这里看了下,说 assert( iswindow(hwnd) 大致的意思就是说 这个hwnd为null。

然后为了验证这个问题,在代码增加了判断 if( cProgress  == NULL ||  hProgress== NULL )等类似的判断

然后又debug程序,跑了会,就在这里弹出提示

说这个hwnd为null

=========================================================================================



如果这个有问题,为什么在开始到报错之间的一段时间内,这样调用上面的代码,却没有问题呢。

而是用着用着就报错了。

而且中途没有其他的操作 ,就是看着它走动进度条子。

用spy++ 也看了下,没看出什么问题来


------解决思路----------------------
以前做过显示进度条的功能,希望对你有用,做法如下:
新开线程进行数据上传,同时设置一个共享变量Var,对上传次数进行计数。界面线程中把SetPos(Var)放在timer中,可以实现对进度条的更新。
------解决思路----------------------
上面的 “// 工作者线程,处理所有的IOCP的完成通知”注释请无视
------解决思路----------------------
确定窗口线程没有被阻塞或者在进行耗时调用?表现形式就是窗口无响应,消息队列被阻塞,然后队列......满了
  相关解决方案