Как добавить окно изображения в win32 API с помощью Visual С++

У меня есть приложение Window (win32 API) на Visual С++. Я не использую MFC. Я должен добавить ящик picutre в свое приложение и периодически менять изображение этого окна. Может ли кто-нибудь помочь мне в достижении вышеуказанной задачи? Спасибо заранее.

Ответ 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 - это дескриптор вашего статического контроля.