Как добавить графический блок в Win32 API с помощью Visual C ++ - PullRequest
11 голосов
/ 18 ноября 2009

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

1 Ответ

8 голосов
/ 18 ноября 2009

Это довольно сложная задача, чтобы опубликовать полный код здесь, но я постараюсь дать несколько рекомендаций о том, как это сделать:

Первый способ - загрузить изображение и нарисовать его

  1. Загрузите ваше изображение (к сожалению, простой Win32 API поддерживает несколько форматов изображений BMP, ICO ...).

    HBITMAP hImage = (HBITMAP)LoadImage(NULL, (LPCSTR)file, IMAGE_BITMAP, 0, 0, LR_LOADFROMFILE | LR_LOADTRANSPARENT);
    
  2. Храните дескриптор выше где-нибудь в вашем приложении, где вы можете получить к нему доступ из своей WindowProcedure

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

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