我怎样才能绘制RGB HBITMAP并使用C在STATIC WINDOW中显示它?

时间:2013-12-05 20:47:08

标签: c windows

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。这个想法是创建和显示一个图像序列,它应该及时生成而不加载文件中的任何内容。

1 个答案:

答案 0 :(得分:0)

为什么你从hwnd获取GetDC,而将STM_SETIMAGE添加到hFrame。从hFrame尝试GetDC。