@BrianR.Bondyアイテムの数を取得する方法について明示的なヘルプをありがとう。実際、私はListView_GetCountPerPageで(リストまたはレポートビューに対して)実行できることを理解する準備ができていて、他の人のためにそれを取得する方法を使用しますが、私はListView_ExplicitViewRectを必要としないのですべての準備ができて、ListViewの新しいサイズを知ることができます。
@Lars Truijens私はすでにLVN_ODCACHEHINTを使用しており、それを使用してバッファーサイズを設定することを検討していましたが、SQLデータの最後まで読み取って、ODBCから返される行数を取得する最後の項目を見つける必要があります。'end cache'を埋めるのに最適な時期なので、LVN_ODCACHEHINを呼び出す前に、アイテムの数を設定する(したがって、バッファーを埋める)必要があると思います。
私の本当の質問は、ブライアンが答えをほのめかした最適化の1つだと思います。バッファを破棄してメモリを再割り当てする際のオーバーヘッドの量は、ネットワークに接続してODBC読み取りを行う場合のオーバーヘッドよりも少なく、バッファをかなり小さくして頻繁に変更するものもあります。
これは正しいですか?
もう少し遊んでみましたが、LVN_ODCACHEHINTは通常、メインバッファーを正しく埋め、行(レポートモード)が部分的に表示されている場合にのみ失敗すると思われます。
したがって、キャッシュのサイズの答えは次のとおりです。表示されたアイテムの総数に加えて、表示されたアイテムの1行(アイコンビューでは行ごとに複数のアイテムがあるため)。
次に、開始項目番号と終了項目番号が異なる場合は、WM_SIZEとLVN_ODCACHEHINTごとにキャッシュを再読み取りします。