0

一度に 1 つずつではなく、仮想リスト モードの CListCtrl でデータのチャンクを更新する方法はありますか?

デフォルトでは、リストがセルのデータを必要とする場合、LVS_GETDISPINFO を介して処理します。8x8 (64) 個のセルが表示され、常に更新されているとします。これは基本的に、ハンドラーを LVS_GETDISPINFO に対して 64 回呼び出していることになります。これは予想通りの動作ですが、この関数を繰り返し呼び出すと、64 個のセルすべてに対して for ループで実行するのとは対照的に、わずかなオーバーヘッドが生じると思います。そして、これは私にとって問題です。なぜなら、私のコントロールは常に 64 個のセルすべてを更新しているからです (TCP パケット トレースのようなものを想像してみてください)。

CListCtrl はもちろんキャッシングをサポートしています (私の状況では役に立ちませんが) が、LVS_GETDISPINFO ハンドラーを何度も呼び出すにはオーバーヘッドがあると感じています。簡単な例は、データを取得する前に、データベースへのポインタが有効かどうか (null でないかどうか) を判断することです... 本質的に、このコード行は 64 回呼び出されます。ポインターを for ループして、64 個のセルのデータを取得します。また、ポインターは単純な例にすぎません。コードが必要なため、説明しない (避けられない) ことは他にもあります。

時間が重要であるため、直接継承して楽しんでいる CListCtrl の他の利点を複製するには時間がかかるため、より効率的な独自のリスト ctrl を書き直すことはできません。現在の唯一の問題は速度です。方法があれば、null で終わるセルの配列を渡して更新するハンドラーのようなものを言って、これを 1 つの関数だけで一括更新できるようにします。

あるいは、LVS_GETDISPINFO でどのセルが更新を保留しているかを知ることができるので、可能であればすべてのセルを更新し、更新全体を検証して LVS_GETDISPINFO の取得を停止することはできますか?

何か案は?前もって感謝します。

4

0 に答える 0