如何在C#中使用ListView_GetBkImage宏

时间:2010-04-13 21:55:16

标签: c# .net pinvoke

如何使用ListView_GetBkImage宏:

http://msdn.microsoft.com/en-us/library/bb761246(v=VS.85).aspx

...来自C#/ WinForms应用程序?我认为这个宏只包含SendMessage方法,但我不确定。我找不到任何基于C#的样本。

基本上我正在尝试获取引用桌面背景位图的LVBKIMAGE(http://msdn.microsoft.com/en-us/library/bb774742(v=VS.85).aspx)结构。

1 个答案:

答案 0 :(得分:2)

你做不到。编译时由C / C ++编译器处理宏,但您想要访问二进制库。您只需在源代码中找到宏,查看它的作用并在C#代码中执行相同的操作。它不应该太复杂。如果您还没有它,请下载Platform SDK并查看文档中提到的.h文件。

编辑:确定,因此宏定义为:

#define ListView_GetBkImage(hwnd, plvbki) \
    (BOOL)SNDMSG((hwnd), LVM_GETBKIMAGE, 0, (LPARAM)(plvbki))

SNDMSG简单定义为SendMessage。 LVM_GETBKIMAGE是一个整数 - 对于ASCII版本它是0x1045而对于Unicode版本是0x108B。 (如果你不确定,你可能想要Unicode版本。)所以整个过程解决了:

(BOOL)SendMessage(hwnd, 0x108B, 0, plvbki)

应该很容易映射到C#。使用Reflector查看System.Windows.Forms,了解Microsoft如何导入SendMessage函数。它将被标记为内部,因此您无法调用它,但您可以复制它。 plvbki是指向结构的指针 - 您需要创建一个等效于LVBKIMAGE的C#。实际上,MS也可能已经为你做了这个,所以环顾四周。