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。有任何想法吗?