HBITMAP DisplayMap(HDC hThisDC){
    HDC hDC=CreateCompatibleDC(hThisDC);

    BITMAPINFOHEADER bi;
    bi.biSize=sizeof(BITMAPINFOHEADER);
    bi.biWidth=670;
    bi.biHeight=540;
    bi.biPlanes=1;
    bi.biBitCount=24;
    bi.biCompression=BI_RGB;
    int lineSize=((((bi.biWidth*bi.biBitCount)+31)&~31)>>3);
    bi.biSizeImage=lineSize*bi.biHeight;

    unsigned char* data=(unsigned char*)malloc(bi.biSizeImage);
    int off=0;
    for(int y=0;y<bi.biHeight;y++){
        for(int x=0;x<bi.biWidth;x++){
            data[off+3*x]=255;
            data[off+3*x+1]=0;
            data[off+3*x+2]=127;
        }
        off+=lineSize;
    }

    HBITMAP hBitmap=CreateDIBitmap(hDC,&bi,CBM_INIT,data,(BITMAPINFO*)&bi,DIB_RGB_COLORS);
    SetDIBits(hDC,hBitmap,0,bi.biHeight,data,(BITMAPINFO*)&bi,DIB_RGB_COLORS);
    return hBitmap;
}

//
HBITMAP hBitmap=DisplayMap(GetDC(hwnd));
if(hBitmap==NULL||true){
    char* str=(char*)malloc(15);
    sprintf(str,"ERROR: %d!",GetLastError());
    MessageBox(NULL,str,"ALERT",MB_OK|MB_ICONEXCLAMATION);
}

ShowWindow (hwnd, nFunsterStil);
SendMessage(hFrame, STM_SETIMAGE, (WPARAM)IMAGE_BITMAP, (LPARAM)hBitmap);
//


如果我使用“(HBITMAP)LoadImage()”来显示它,则没有问题。但是当我使用我的函数“ DisplayMap()”时,它应该一无是处创建一个HBITMAP,这是行不通的。该脚本没有显示错误,并且“ hBitmap”返回有效的HBITMAP(非NULL),但是无论我选择填充位图的颜色如何,它始终显示相同的全黑图像。

我通过多种渠道在Google中寻找解决方案,但无法找出问题所在。我感谢您的帮助,很长时间以来我都没有使用c。这个想法是创建并显示一个图像序列,该序列将在不加载文件的情况下及时生成。

最佳答案

为什么从hwnd获取DC,但是从STM_SETIMAGE到hFrame。从hFrame尝试GetDC。

关于c - 如何使用C绘制RGB HBITMAP并将其显示在STATIC WINDOW中?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/20410343/

10-13 05:55