用虚列表显示大量数据的问题 本帖最后由 tiger9991 于 2013-04-25 08:47:06 编辑 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 请问该如何解决这个问题曾经尝试过把第31行改为int i = m_current / 5000 ;单击的时候正常了,但是很遗憾,和程序的其他功能有冲突 难为这位大神了,我也是研究了好几晚上,现在问题解决了这个问题也可以这么表述:初始化时一次读入了1至5000项并选中了其中一项(比如说第25项,这个数字是被保存起来的,以备显示选中的项的信息),然后拖动滚动条拖到5000项以外(比如显示第8000项),这个时候就要重新读入5001至10000项了,此时显示是正常的。但是单击列表框某一项时(比如单击的是第8000项),这一项消失了(就是这一项的位置被选中,但是条目看不见了)。调试发现此时函数中的iItemIndx并不是选中的7999,而是24(第一次选中的第25项),所以m_temp里此时存储的不是第5001至10000项,而是1至5000项,显示就要出错,读取也不正常解决办法就是用我在二楼贴的语句,并且把9至17行改为m_current = m_list.GetTopIndex () ;21行改为(m_current > m_Lastorder || m_current < m_Firstorder)其实就是个逻辑问题,没什么技术含量,见笑了 难为这位大神了,我也是研究了好几晚上,现在问题解决了这个问题也可以这么表述:初始化时一次读入了1至5000项并选中了其中一项(比如说第25项,这个数字是被保存起来的,以备显示选中的项的信息),然后拖动滚动条拖到5000项以外(比如显示第8000项),这个时候就要重新读入5001至10000项了,此时显示是正常的。但是单击列表框某一项时(比如单击的是第8000项),这一项消失了(就是这一项的位置被选中,但是条目看不见了)。调试发现此时函数中的iItemIndx并不是选中的7999,而是24(第一次选中的第25项),所以m_temp里此时存储的不是第5001至10000项,而是1至5000项,显示就要出错,读取也不正常解决办法就是用我在二楼贴的语句,并且把9至17行改为m_current = m_list.GetTopIndex () ;21行改为(m_current > m_Lastorder || m_current < m_Firstorder)其实就是个逻辑问题,没什么技术含量,见笑了解决了?? 这个是我一个不太成熟的想法,因为对虚列表一点都不熟悉:比如此时显示区域内第一条是是第4998项(索引4997),由于我一屏显示25条,所以此时OnGetdispinfoList会响应25次,每次iItemIndx都会增加,假如增到了5000,就该读取5001至10000项了,然而第4998项还得显示,所以就会出错。每次多读的50项是为了处理这个边界问题,我的那个m_bNeedRead也是为了防止这种错误而设置的一个flag,当还有前5000项的条目需要显示时就不读后5000项。由于设置的关卡太多到最后自己都晕菜了,改进后的方法简洁了很多,我在五楼贴出来了 难为这位大神了,我也是研究了好几晚上,现在问题解决了这个问题也可以这么表述:初始化时一次读入了1至5000项并选中了其中一项(比如说第25项,这个数字是被保存起来的,以备显示选中的项的信息),然后拖动滚动条拖到5000项以外(比如显示第8000项),这个时候就要重新读入5001至10000项了,此时显示是正常的。但是单击列表框某一项时(比如单击的是第8000项),这一项消失了(就是这一项的位置被选中,但是条目看不见了)。调试发现此时函数中的iItemIndx并不是选中的7999,而是24(第一次选中的第25项),所以m_temp里此时存储的不是第5001至10000项,而是1至5000项,显示就要出错,读取也不正常解决办法就是用我在二楼贴的语句,并且把9至17行改为m_current = m_list.GetTopIndex () ;21行改为(m_current > m_Lastorder || m_current < m_Firstorder)其实就是个逻辑问题,没什么技术含量,见笑了解决了??嗯,现在可以随便拽滚动条了 STDMETHOD_ 这个宏在哪个文件中定义? 如何用图片填充图形 请教http request的POST详细格式 对话框资源问题 感谢大家对我的支持~~~!!!特别是毛毛老师和小三版主! 为什么用CStdioFile.WriteString(CString)的时候总是说文件已满? 如何获得 表中定位的 消息? help me!!(a very simple problem to you) combox扁平化 答对问题者,我赠送股票分析源代码一份。!!!!!我相信重伤之下必有勇夫!! 为了2005年的诺言,现在发帖散分 vc中的程序备份后,改一个,另一个也被改动?????
单击的时候正常了,但是很遗憾,和程序的其他功能有冲突
初始化时一次读入了1至5000项并选中了其中一项(比如说第25项,这个数字是被保存起来的,以备显示选中的项的信息),然后拖动滚动条拖到5000项以外(比如显示第8000项),这个时候就要重新读入5001至10000项了,此时显示是正常的。
但是单击列表框某一项时(比如单击的是第8000项),这一项消失了(就是这一项的位置被选中,但是条目看不见了)。调试发现此时函数中的iItemIndx并不是选中的7999,而是24(第一次选中的第25项),所以m_temp里此时存储的不是第5001至10000项,而是1至5000项,显示就要出错,读取也不正常解决办法就是用我在二楼贴的语句,并且把9至17行改为
m_current = m_list.GetTopIndex () ;
21行改为(m_current > m_Lastorder || m_current < m_Firstorder)其实就是个逻辑问题,没什么技术含量,见笑了
初始化时一次读入了1至5000项并选中了其中一项(比如说第25项,这个数字是被保存起来的,以备显示选中的项的信息),然后拖动滚动条拖到5000项以外(比如显示第8000项),这个时候就要重新读入5001至10000项了,此时显示是正常的。
但是单击列表框某一项时(比如单击的是第8000项),这一项消失了(就是这一项的位置被选中,但是条目看不见了)。调试发现此时函数中的iItemIndx并不是选中的7999,而是24(第一次选中的第25项),所以m_temp里此时存储的不是第5001至10000项,而是1至5000项,显示就要出错,读取也不正常解决办法就是用我在二楼贴的语句,并且把9至17行改为
m_current = m_list.GetTopIndex () ;
21行改为(m_current > m_Lastorder || m_current < m_Firstorder)其实就是个逻辑问题,没什么技术含量,见笑了
解决了??
每次多读的50项是为了处理这个边界问题,我的那个m_bNeedRead也是为了防止这种错误而设置的一个flag,当还有前5000项的条目需要显示时就不读后5000项。由于设置的关卡太多到最后自己都晕菜了,改进后的方法简洁了很多,我在五楼贴出来了
初始化时一次读入了1至5000项并选中了其中一项(比如说第25项,这个数字是被保存起来的,以备显示选中的项的信息),然后拖动滚动条拖到5000项以外(比如显示第8000项),这个时候就要重新读入5001至10000项了,此时显示是正常的。
但是单击列表框某一项时(比如单击的是第8000项),这一项消失了(就是这一项的位置被选中,但是条目看不见了)。调试发现此时函数中的iItemIndx并不是选中的7999,而是24(第一次选中的第25项),所以m_temp里此时存储的不是第5001至10000项,而是1至5000项,显示就要出错,读取也不正常解决办法就是用我在二楼贴的语句,并且把9至17行改为
m_current = m_list.GetTopIndex () ;
21行改为(m_current > m_Lastorder || m_current < m_Firstorder)其实就是个逻辑问题,没什么技术含量,见笑了
解决了??嗯,现在可以随便拽滚动条了