|
分類:[C#]
仮想ListViewを作成してアイテムの表示をしています。(件数が多いので
その各アイテム上に独自に描画を行いたいのですがうまくいきません。
(大きなアイコン、アイコン上に描画)
RetrieveVirtualItemイベントが発生した時に描画を行おうとすると
描画によってRetrieveVirtualItemイベントが発生→無限ループとなるようです。
private void listView1_RetrieveVirtualItem(object sender, RetrieveVirtualItemEventArgs e)
{
e.Item = this.ListViewItems[e.ItemIndex];
// 描画処理〜
}
そこでWndProcからWM_PAINTを拾い描画を行おうとしました。
protected override void WndProc(ref Message m)
{
if (m.Msg == 0xF) //WM_PAINT
{
this.OnPaint(new PaintEventArgs(this.CreateGraphics(),this.Bounds));
}
base.WndProc(ref m);
}
protected override void OnPaint(PaintEventArgs e)
{
base.OnPaint(e);
for (int i = 0; i < this.Items.Count; i++)
{
// 各アイテムに描画
}
}
とすると今度は無限ループは発生せず、描画も行われます。
しかしRetrieveVirtualItemイベントが発生したアイテムについては上書きされるようで描画されません。
またスクロールさせて一度に表示する項目が増えた場合や画面切り替えでもうまく描画できないようです。
(せっかく仮想にしたのに重くなるし・・・)
ダメもとでSelectedIndexChangedイベントの時に描画しても予想通り上書きされます。
なにかいいアイデアはありませんでしょうか。
|