如何在 C# 中使用 ListView_GetBkImage 宏

发布于 2024-08-28 14:00:09 字数 519 浏览 5 评论 0原文

如何使用 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 ) 引用桌面背景位图的结构。

How can I use the ListView_GetBkImage macro:

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

... from a C#/WinForms application? I think this macro just wraps the SendMessage method, but I'm not sure. I couldn't find any C#-based samples on this.

Basically I'm trying to get a LVBKIMAGE ( http://msdn.microsoft.com/en-us/library/bb774742(v=VS.85).aspx ) structure that references the Desktop's background bitmap.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

毁梦 2024-09-04 14:00:10

你不能。宏由 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 可能也为您做到了这一点,所以请四处寻找。

You cannot. A macro is processed at compile time by the C/C++ compiler, but you want to access the binary library. You will just have to find the macro in the source, see what it does and do the same in your C# code. It shouldn't be anything too complex. Download the Platform SDK if you don't already have it and look in the .h file mentioned in the documentation.

Edit: OK, so the macro is defined as:

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

SNDMSG is simply defined as SendMessage. LVM_GETBKIMAGE is an integer - it's 0x1045 for the ASCII version and 0x108B for the Unicode version. (You probably want the Unicode version if you're unsure.) So the entire thing resolves to:

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

There should be easy enough to map to C#. Look in System.Windows.Forms using Reflector to see how Microsoft have imported the SendMessage function. It will be marked internal, so you cannot call it, but you can copy it. plvbki is a pointer to a struct - you'll need to create a C# equivalent of LVBKIMAGE. Actually, MS have probably done that for you too, so look around for that.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文