У меня есть приложение Window (win32 API) на Visual С++. Я не использую MFC. Я должен добавить ящик picutre в свое приложение и периодически менять изображение этого окна. Может ли кто-нибудь помочь мне в достижении вышеуказанной задачи? Спасибо заранее.
Как добавить окно изображения в win32 API с помощью Visual С++
Ответ 1
Это довольно сложная задача, чтобы опубликовать полный код здесь, но я постараюсь дать несколько рекомендаций о том, как это сделать:
Первый способ - загрузить изображение и нарисовать его
-
Загрузите свое изображение (к сожалению, простой API Win32 поддерживает несколько форматов BMP, ICO...).
HBITMAP hImage = (HBITMAP)LoadImage(NULL, (LPCSTR)file, IMAGE_BITMAP, 0, 0, LR_LOADFROMFILE | LR_LOADTRANSPARENT);
-
Храните дескриптор выше в своем приложении, где вы можете получить доступ к нему из окна WindowProcedure
-
В WinProc по сообщению WM_PAINT вам нужно будет нарисовать изображение. Код выглядит примерно так:
HDC hdcMem = CreateCompatibleDC(hDC); // hDC is a DC structure supplied by Win32API SelectObject(hdcMem, hImage); StretchBlt( hDC, // destination DC left, // x upper left top, // y upper left width, // destination width height, // destination height hdcMem, // you just created this above 0, 0, // x and y upper left w, // source bitmap width h, // source bitmap height SRCCOPY); // raster operation
Должен работать.
Теперь второй способ сделать это - создать статический элемент управления с типом SS_BITMAP и установить его образ как:
hImage = LoadImage(NULL, file, IMAGE_BITMAP, w, h, LR_LOADFROMFILE);
SendMessage(hwnd, STM_SETIMAGE, IMAGE_BITMAP, (LPARAM)hImage);
где hwnd - это дескриптор вашего статического контроля.