Как использовать макрос ListView_GetBkImage в C # - PullRequest
0 голосов
/ 14 апреля 2010

Как я могу использовать макрос 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 Ответ

2 голосов
/ 14 апреля 2010

Вы не можете. Макрос обрабатывается во время компиляции компилятором C / C ++, но вы хотите получить доступ к двоичной библиотеке. Вам просто нужно найти макрос в исходном коде, посмотреть, что он делает, и сделать то же самое в коде C #. Это не должно быть слишком сложным. Скачайте Platform SDK, если у вас его еще нет, и посмотрите файл .h, упомянутый в документации.

Редактировать: ОК, поэтому макрос определен как:

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

SNDMSG просто определяется как SendMessage. LVM_GETBKIMAGE - это целое число: 0x1045 для версии ASCII и 0x108B для версии Unicode. (Возможно, вам нужна версия Unicode, если вы не уверены.) Итак, все решается следующим образом:

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

Там должно быть достаточно легко сопоставить с C #. Посмотрите в System.Windows.Forms, используя Reflector, чтобы увидеть, как Microsoft импортировала функцию SendMessage. Он будет помечен как внутренний, поэтому вы не можете его назвать, но вы можете скопировать его. plvbki - указатель на структуру - вам нужно создать C # эквивалент LVBKIMAGE. На самом деле, MS, вероятно, сделал это и для вас, так что поищите.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...