如題,向一個CListBox中插入7萬多條之后,滾動條不好用,debug下邊好用,release不好用,滾動條無法按照預想位置拖動,
有沒有大神知道是什么導致的以及解決方法。
翻頁這種規避這個問題的方法都不要,跪求幫忙mm
uj5u.com熱心網友回復:
http://www.codeguru.com/cpp/controls/listview/dragdrop/article.php/c16161/Overcome-Window-Flicker-While-Dragging.htmuj5u.com熱心網友回復:
7w到了 你清空下內容再AddString
uj5u.com熱心網友回復:
首先謝謝樓上回復, 不過我不是特別明白,下邊是我的測驗代碼。//CListBox m_List;
for(int i = 0; i < 100000; i++)
{
char szMsg[32];
memset(szMsg, 0, 32);
_snprintf(szMsg, 31, "%d", i);
int nindex = m_List.AddString(CString(szMsg));
ASSERT(nindex == i);
}
uj5u.com熱心網友回復:
只要條數不超過最大值就沒有問題,問題是,不想更改方案,改成翻頁或者洗掉資料這樣解決,只能勇往直前了uj5u.com熱心網友回復:
@paschen這個現象不是閃爍,就是滾動條位置不能移動了,看起來list里面的數值也不對的感覺,
感覺和文章說的不是一個問題,總覺得是CListBox里的某個變數越界了,不過代碼跟不進去
uj5u.com熱心網友回復:
要不你用2個ListBox 大于7w了用另外個來顯示
uj5u.com熱心網友回復:
是否可以嘗試改成CListCtrl控制元件?用這個控制元件可以只用一列而且把列標題隱藏起來,效果應該和CListBox差不多。
CListCtrl可以使用虛擬串列,這樣其ui的互動效果不會有任何滯后的感覺,我用它大約七、八列,數量1500w是沒有任何問題的
這樣你的改動也不會太大
uj5u.com熱心網友回復:
那就使用CListCtrl,可以使用虛擬串列技術http://blog.chinaunix.net/uid-20617446-id-79386.html
uj5u.com熱心網友回復:
有沒有知道導致這種現象原因的呢?
uj5u.com熱心網友回復:
WM_VSCROLL看MSDN, 位置資訊保存用了2個位元組, 所以最多65536
有些代碼甚至把這個當成有符號的資料, 可能會只有32768
uj5u.com熱心網友回復:
http://download.csdn.net/detail/zhao4zhong1/7610833uj5u.com熱心網友回復:
不吃虧不會回頭的這回可以安心回到自繪了
保存的資料和顯示的是兩碼事
你的螢屏再牛B,也只是顯示二三十條記錄
顯示的只是總資料中的一小段
前后翻動只是移動著二三十條記錄的開始和結束指標而已
uj5u.com熱心網友回復:
什么虛擬串列都是扯雞巴蛋的玩意兒不服氣再去試試
uj5u.com熱心網友回復:
vc6 上char szMsg[32];
for(int i = 0; i < 100000; i++)
{
memset(szMsg, 0, 32);
sprintf(szMsg,"% 30d", i);
int index = m_ListBox.AddString(szMsg);
if(LB_ERRSPACE == index) AfxMessageBox("No enough Space!");
}
沒問題 !!!
uj5u.com熱心網友回復:
vc6 win7// TODO: Add extra initialization here
char szMsg[32];
for(int i = 0; i < 600000; i++)
{
memset(szMsg, 0, 32);
sprintf(szMsg,"% 30d", i);
int index = m_ListBox.AddString(szMsg);
if(LB_ERRSPACE == index)
{
AfxMessageBox("No enough Space!");
afxDump << i << "\n";
break;
}
}
還是沒問題
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/126468.html
標籤:界面
下一篇:求教MapX控制元件的兩個問題
