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/