я хочу отобразить растровое изображение на моем Picture Control,
но на самом деле независимо от того, что я пытаюсь, это не работает.
Прямо сейчас мой метод выглядит так:
SendDlgItemMessage(hWnd ,picture_CTRL, BM_SETIMAGE , IMAGE_BITMAP, (LPARAM) MAKEINTRESOURCE(IDB_BITMAP1));
Я также уже пытался использовать
STM_SETIMAGE
Сообщение, но оно не сработает.
Для свойства «Мой Picture Control» «Тип» задано значение «Растровое изображение», а у моего растрового изображения есть идентификатор в resource.h
Надеюсь, вы, ребята, можете помочь 🙂
Во-первых, вы не можете просто смешивать и сопоставлять сообщения в стандартных элементах управления Windows. BM_SETIMAGE
а также STM_SETIMAGE
имеют совершенно разные значения. Если вы используете статический элемент управления, используйте STM_SETIMAGE
, Если вы используете элемент управления Button, используйте BM_SETIMAGE
,
Во-вторых, документация для STM_SETIMAGE
говорит, что LPARAM
должен быть ручкой к изображению. Вы передаете идентификатор ресурса. Вам нужно получить ручку по телефону LoadImage
первый. Например:
HBITMAP hBitmap = reinterpret_cast<HBITMAP>(LoadImage(
GetModuleHandle(NULL),
MAKEINTRESOURCE(IDB_BITMAP1),
IMAGE_BITMAP,
0,
0,
0));
SendDlgItemMessage(
hWnd,
picture_CTRL,
STM_SETIMAGE,
IMAGE_BITMAP,
reinterpret_cast<LPARAM>(hBitmap));
Обратите внимание, что согласно документации вы несете ответственность за удаление растрового изображения, когда вы закончите с ним.
РЕДАКТИРОВАТЬ: Обратите внимание, что у меня были две проблемы в моей исходной версии кода, вызванные копированием и вставкой из вопроса. Я не смог передать ручку как LPARAM
я и я использовали BM_SETIMAGE
вместо STM_SETIMAGE
, Я также добавлю примечание в ответ, что, как указал Коди Грей, документация MSDN для функции или сообщения скажет вам, можете ли вы использовать MAKEINTRESOURCE
,
Других решений пока нет …