请大家帮我看下LoadImage();

marveson 2010-01-17 05:21:08
case WM_CREATE:
hInstance = ((LPCREATESTRUCT) lParam)->hInstance ;
SetButton.Style = BS_PUSHBUTTON;
SetButton.Text = TEXT("陈杰");
hButton = CreateWindow(TEXT("button"),SetButton.Text,WS_CHILD | WS_VISIBLE | SetButton.Style,10,10,100,50,hWnd,NULL,NULL,NULL);//创建BUTTON。
//hInstance = ((LPCREATESTRUCT) lParam)->hInstance ;

//GetObject (Bt_Chen, sizeof (BITMAP), &bitmap) ;
return 0;
case WM_SIZE:
cxApplication = LOWORD(lParam);
cyApplication = HIWORD(lParam);
return 0;
case WM_COMMAND:
wmId = LOWORD(wParam);
wmEvent = HIWORD(wParam);
// Parse the menu selections:
switch (wmId)
{
case IDM_ABOUT:
DialogBox(hInst, MAKEINTRESOURCE(IDD_ABOUTBOX), hWnd, About);
break;
case IDM_EXIT:
//DeleteObject(Bt_Chen) ;
DestroyWindow(hWnd);
break;
default:
return DefWindowProc(hWnd, message, wParam, lParam);
}
break;
case WM_PAINT:

hdc = BeginPaint(hWnd, &ps);
HdcWindow=CreateCompatibleDC(hdc);
Bt_Chen = (HBITMAP)LoadImage(NULL,TEXT("C:\\Documents and Settings\\edgar.caya\\My Documents\\Visual Studio 2008\\Projects\\DYControler\\DYControler\\chenjie.bmp"),IMAGE_BITMAP,10,10,LR_CREATEDIBSECTION | LR_DEFAULTSIZE |LR_LOADFROMFILE );
//bitmap.Attach(hbitmap);
SelectObject(HdcWindow,Bt_Chen);
BitBlt(hdc, 10, 10, 100, 50,HdcWindow, 0, 0, SRCCOPY);
ReleaseDC(hWnd,HdcWindow);
EndPaint(hWnd, &ps);
break;
case WM_DESTROY:
DeleteObject (HdcWindow) ;
PostQuitMessage(0);
break;




我为什么始终都弄不上去图片。
...全文
171 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
cuihaoyun 2010-01-18
  • 打赏
  • 举报
回复
看错 说了写废话!!!~_~
cuihaoyun 2010-01-18
  • 打赏
  • 举报
回复
因为你把关联的DC释放了 这句:ReleaseDC(hWnd,HdcWindow);
许文君 2010-01-17
  • 打赏
  • 举报
回复
style&=BS_BITMAP;
wltg2001 2010-01-17
  • 打赏
  • 举报
回复
估计和你的图片有关吧
菜鸟二号 2010-01-17
  • 打赏
  • 举报
回复
无论怎样我的都能显示,真的很奇怪啊,但是你的就是不显示,你换个图看看吧(最好放D盘之类的,D:\1.bmp多简单啊),如果还是不行那就奇怪的很乐
wltg2001 2010-01-17
  • 打赏
  • 举报
回复
我试了你的代码,将LoadImage中的图片大小全改为0后就可以正常显示了
sjdev 2010-01-17
  • 打赏
  • 举报
回复
这是Paint里面的使用,比较一下吧。

case WM_PAINT:
{
PAINTSTRUCT ps;
HBITMAP hBitmap, hOldBitmap;
HPALETTE hPalette, hOldPalette;
HDC hDC, hMemDC;
BITMAP bm;

hDC = BeginPaint( hWnd, &ps );

if( LoadBitmapFromBMPFile( szFileName, &hBitmap, &hPalette ) )
{
GetObject( hBitmap, sizeof(BITMAP), &bm );
hMemDC = CreateCompatibleDC( hDC );
hOldBitmap = (HBITMAP)SelectObject( hMemDC, hBitmap );
hOldPalette = SelectPalette( hDC, hPalette, FALSE );
RealizePalette( hDC );

BitBlt( hDC, 0, 0, bm.bmWidth, bm.bmHeight,
hMemDC, 0, 0, SRCCOPY );

SelectObject( hMemDC, hOldBitmap );
DeleteObject( hBitmap );
SelectPalette( hDC, hOldPalette, FALSE );
DeleteObject( hPalette );
}
EndPaint( hWnd, &ps );

}
break;
sjdev 2010-01-17
  • 打赏
  • 举报
回复
和下面这个函数比较一下,下面的函数是一个封装。

BOOL LoadBitmapFromBMPFile( LPTSTR szFileName, HBITMAP *phBitmap,
HPALETTE *phPalette )
{

BITMAP bm;

*phBitmap = NULL;
*phPalette = NULL;

// Use LoadImage() to get the image loaded into a DIBSection
*phBitmap = (HBITMAP)LoadImage( NULL, szFileName, IMAGE_BITMAP, 0, 0,
LR_CREATEDIBSECTION | LR_DEFAULTSIZE | LR_LOADFROMFILE );
if( *phBitmap == NULL )
return FALSE;

// Get the color depth of the DIBSection
GetObject(*phBitmap, sizeof(BITMAP), &bm );
// If the DIBSection is 256 color or less, it has a color table
if( ( bm.bmBitsPixel * bm.bmPlanes ) <= 8 )
{
HDC hMemDC;
HBITMAP hOldBitmap;
RGBQUAD rgb[256];
LPLOGPALETTE pLogPal;
WORD i;

// Create a memory DC and select the DIBSection into it
hMemDC = CreateCompatibleDC( NULL );
hOldBitmap = (HBITMAP)SelectObject( hMemDC, *phBitmap );
// Get the DIBSection's color table
GetDIBColorTable( hMemDC, 0, 256, rgb );
// Create a palette from the color tabl
pLogPal = (LOGPALETTE *)malloc( sizeof(LOGPALETTE) + (256*sizeof(PALETTEENTRY)) );
pLogPal->palVersion = 0x300;
pLogPal->palNumEntries = 256;
for(i=0;i<256;i++)
{
pLogPal->palPalEntry[i].peRed = rgb[i].rgbRed;
pLogPal->palPalEntry[i].peGreen = rgb[i].rgbGreen;
pLogPal->palPalEntry[i].peBlue = rgb[i].rgbBlue;
pLogPal->palPalEntry[i].peFlags = 0;
}
*phPalette = CreatePalette( pLogPal );
// Clean up
free( pLogPal );
SelectObject( hMemDC, hOldBitmap );
DeleteDC( hMemDC );
}
else // It has no color table, so use a halftone palette
{
HDC hRefDC;

hRefDC = GetDC( NULL );
*phPalette = CreateHalftonePalette( hRefDC );
ReleaseDC( NULL, hRefDC );
}
return TRUE;

}
marveson 2010-01-17
  • 打赏
  • 举报
回复
路径我检查了,没有错误。PAINT这里怎么回事啊,是不是别的地方写错了。
marveson 2010-01-17
  • 打赏
  • 举报
回复
还是不行啊。``~crazy.~~
wltg2001 2010-01-17
  • 打赏
  • 举报
回复
Bt_Chen = (HBITMAP)LoadImage(NULL,TEXT("C:\\Documents and Settings\\edgar.caya\\My Documents\\Visual Studio 2008\\Projects\\DYControler\\DYControler\\chenjie.bmp"),IMAGE_BITMAP,10,10,LR_CREATEDIBSECTION | LR_DEFAULTSIZE |LR_LOADFROMFILE );
===========
改成这样:
Bt_Chen = (HBITMAP)LoadImage(NULL,TEXT("C:\\Documents and Settings\\edgar.caya\\My Documents\\Visual Studio 2008\\Projects\\DYControler\\DYControler\\chenjie.bmp"),IMAGE_BITMAP,0,0, LR_DEFAULTSIZE |LR_LOADFROMFILE );
marveson 2010-01-17
  • 打赏
  • 举报
回复
我加了判断
非NULL。
很是疑惑啊,尺寸都是我自己随便加的,尺寸不对不会显示吗。不会吧。
菜鸟二号 2010-01-17
  • 打赏
  • 举报
回复
另外吧
ReleaseDC(hWnd,HdcWindow); //这个应该用DeleteDC()吧
EndPaint(hWnd, &ps);
break;
case WM_DESTROY:
DeleteObject (HdcWindow) ; //这里是不是DeleteObject(Bt_Chen);?
PostQuitMessage(0);
break;
而且程序其他的地方貌似没什么问题了,基本可以肯定是你的位图路径有问题
菜鸟二号 2010-01-17
  • 打赏
  • 举报
回复
不是,貌似是我看错了,那你就检测下位图有没有载入啊,Bt_Chen?0:1;
菜鸟二号 2010-01-17
  • 打赏
  • 举报
回复
Bt_Chen = (HBITMAP)LoadImage(NULL,TEXT("C:\\Documents and Settings\\edgar.caya\\My Documents\\Visual Studio 2008\\Projects\\DYControler\\DYControler\\chenjie.bmp"),IMAGE_BITMAP,10,10,LR_CREATEDIBSECTION | LR_DEFAULTSIZE |LR_LOADFROMFILE );
//bitmap.Attach(hbitmap);
SelectObject(HdcWindow,Bt_Chen);
BitBlt(hdc, 10, 10, 100, 50,HdcWindow, 0, 0, SRCCOPY);


就是这里的问题LoadImage(.......IMAGE_BITMAP,10,10...);这个尺寸有问题噻
sjdev 2010-01-17
  • 打赏
  • 举报
回复
Bt_Chen = (HBITMAP)LoadImage(NULL,TEXT("C:\\Documents and Settings\\edgar.caya\\My Documents\\Visual Studio 2008\\Projects\\DYControler\\DYControler\\chenjie.bmp"),IMAGE_BITMAP,10,10,LR_CREATEDIBSECTION | LR_DEFAULTSIZE |LR_LOADFROMFILE );

资源句柄,设置一下。

15,979

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 界面
社区管理员
  • 界面
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧