Vista では、項目がない場合にリスト ビュー コントロールにテキストを表示する新しい API が導入されました。MSDN ライブラリに記載されているように、LVN_GETEMPTYMARKUP
通知を処理する必要があります。
継承されたListView
コントロールでは、WndProc
メソッドがオーバーライドされます。
protected override void WndProc(ref Message m) {
try {
if(m.Msg == 78 /* WM_NOTIFY */) {
var nmhdr = (NMHDR)Marshal.PtrToStructure(m.LParam, typeof(NMHDR));
if(nmhdr.code == -187 /* LVN_GETEMPTYMARKUP */) {
var nmlvemptymarkup =
(NMLVEMPTYMARKUP)Marshal.PtrToStructure(m.LParam, typeof(NMLVEMPTYMARKUP));
nmlvemptymarkup.szMarkup = "The ListView is empty.";
m.Result = (IntPtr)1;
}
}
} finally {
base.WndProc(ref m);
}
}
ただし、機能しません (ただし、例外はスローされません)。実際にnmhdr.code
は、-187 に等しくなることはありません。何か案は?