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。这个想法是创建和显示一个图像序列,它应该及时生成而不加载文件中的任何内容。
答案 0 :(得分:0)
为什么你从hwnd获取GetDC,而将STM_SETIMAGE添加到hFrame。从hFrame尝试GetDC。