user3728026
user3728026

Reputation: 1

Void to HBITMAP conversion Issue

I keep getting an error at line 123:

123 C:\Dev-Cpp\Window_main_2.c invalid conversion from `void*' to `HBITMAP__*'

I don't know what to make of this and its driving me crazy.

void DrawBitmap(HDC hdcDest, char *filename, int x, int y)
{
    HBITMAP image;
    BITMAP bm;
    HDC hdcMem;

    // This is the line that brings about the issue (just ask me if more code is required because
    // there is a lot more. Essentially this whole function points to a file and I call this
    // function in another function that will compile a windows screen filled with the following
    // image path. But I cant get this HBITMAP to agree with the image datatype. Please let me
    // know if more info is required and thank you.) The line is below.     
    image = LoadImage(0, "C:\\Users\\Lillian\\Pictures\\c.bmp", IMAGE_BITMAP, 0, 0, LR_LOADFROMFILE);

    GetObject(image, sizeof(BITMAP), &bm);

    hdcMem = CreateCompatibleDC(global_hdc);
    SelectObject(hdcMem, image);

    BitBlt(
        global_hdc,
        x,
        y,
        bm.bmWidth,
        bm.bmHeight,
        hdcMem,
        0,
        0,
        SRCCOPY);

    DeleteDC(hdcMem);
    DeleteObject((HBITMAP)image);
}

Upvotes: 0

Views: 435

Answers (1)

Joseph Willcoxson
Joseph Willcoxson

Reputation: 6040

LoadImage() returns a HANDLE. Your need a cast when assigning the result to your variable:

image = (HBITMAP) LoadImage(0, "C:\\Users\\Lillian\\Pictures\\c.bmp", IMAGE_BITMAP, 0, 0, LR_LOADFROMFILE);

Also, before you DeleteDC(), you need to select the original HBITMAP back into hdcMem - you need to save it when you call SelectObject() earlier.

Upvotes: 2

Related Questions