如何使用visual c ++在win32 API中添加图片框

Rav*_*kar 11 c++ winapi

我在visual c ++中有一个Window(win32 API)应用程序.我没有使用MFC.我必须在我的应用程序中添加一个picutre框并定期更改此图片框的图像.任何人都可以帮助我完成上述任务吗?提前致谢.

Fer*_*eak 8

在这里发布完整代码这是一项相当复杂的任务,但我会尝试给出一些如何做到这一点的指导:

第一种方法是加载图像并绘制它

  1. 加载你的图像(不幸的是,普通的Win32 API支持很多图像格式BMP,ICO ...).

    HBITMAP hImage = (HBITMAP)LoadImage(NULL, (LPCSTR)file, IMAGE_BITMAP, 0, 0, LR_LOADFROMFILE | LR_LOADTRANSPARENT);
    
    Run Code Online (Sandbox Code Playgroud)
  2. 将句柄存储在应用程序的某个位置,您可以从WindowProcedure访问它

  3. 在WM_PAINT消息的WinProc中,您需要绘制图像.代码类似于:

    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
    
    Run Code Online (Sandbox Code Playgroud)

应该管用.

现在,第二种方法是创建一个静态控件,类型为SS_BITMAP并将其图像设置为:

hImage = LoadImage(NULL, file, IMAGE_BITMAP, w, h, LR_LOADFROMFILE);
SendMessage(hwnd, STM_SETIMAGE, IMAGE_BITMAP, (LPARAM)hImage);
Run Code Online (Sandbox Code Playgroud)

其中hwnd是静态控件的句柄.