gpt4 book ai didi

.net - ListView 空标记文本

转载 作者:行者123 更新时间:2023-12-04 07:11:21 24 4
gpt4 key购买 nike

Vista 引入了一个新的 API,用于在 ListView 控件中没有任何项目时显示文本。正如 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。有任何想法吗?

最佳答案

我自己在这个问题上挣扎了很多。

要使原始问题中的代码起作用,请使用 [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)] 标记 NMLVEMPTYMARKUP 结构(CharSet.Unicode 很重要)。

此外,在设置标记值后,调用 Marshal.StructureToPtr(nmlvemptymarkup, m.LParam, false) 将数据复制回 LParam 指向的缓冲区。

关于.net - ListView 空标记文本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/287298/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com