主题:一个有关位图的加载问题
本例调用一幅坦克的图片,并在用户窗口区上显示。
具体的源程序代码如下:
//位图示例.c
#include <windows.h>
#include <string.h>
#include <stdlib.h>
#include <stdio.h>
LRESULT CALLBACK WndProc(HWND,UINT,WPARAM,LPARAM);
//定义变量
HDC hdc; //设备环境句柄
HDC hdcmem; //内存设备环境句柄
HBITMAP hBm; //位图句柄
BITMAP bm; //BITMAP结构
int WINAPI WinMain
(
HINSTANCE hInstance,
HINSTANCE hPrevInst,
LPSTR lpszCmdLine,
int nCmdShow
)
{
HWND hwnd ;
MSG Msg ;
WNDCLASS wndclass ;
char lpszClassName[] = "位图";
char lpszTitle[]= "Example_For_BitMap";
wndclass.style = 0;
wndclass.lpfnWndProc = WndProc ;
wndclass.cbClsExtra = 0 ;
wndclass.cbWndExtra = 0 ;
wndclass.hInstance = hInstance ;
wndclass.hIcon = LoadIcon( NULL, IDI_APPLICATION) ;
wndclass.hCursor = LoadCursor( NULL, IDC_ARROW) ;
wndclass.hbrBackground = GetStockObject( WHITE_BRUSH) ;
wndclass.lpszMenuName = NULL ;
wndclass.lpszClassName = lpszClassName ;
if( !RegisterClass( &wndclass))
{
MessageBeep(0) ;
return FALSE ;
}
hwnd = CreateWindow( lpszClassName,
lpszTitle,
WS_OVERLAPPEDWINDOW,
CW_USEDEFAULT,
CW_USEDEFAULT,
CW_USEDEFAULT,
CW_USEDEFAULT,
NULL,
NULL,
hInstance,
NULL) ;
hBm=LoadBitmap(hInstance,"pic7_2"); //加载位图
GetObject( hBm, sizeof( BITMAP), (LPVOID)&bm) ; //获取位图尺寸
ShowWindow( hwnd, nCmdShow) ;
UpdateWindow(hwnd);
while( GetMessage(&Msg, NULL, 0, 0))
{
TranslateMessage( &Msg) ;
DispatchMessage( &Msg) ;
}
return Msg.wParam;
}
LRESULT CALLBACK WndProc( HWND hwnd,
UINT message,
WPARAM wParam,
LPARAM lParam)
{ PAINTSTRUCT ps;
switch(message){
case WM_CREATE:
hdc=GetDC(hwnd); //获取设备环境
hdcmem=CreateCompatibleDC(hdc); //获取内存设备环境
ReleaseDC(hwnd,hdc); //释放设备环境
case WM_PAINT:
hdc=BeginPaint(hwnd,&ps);
SelectObject(hdcmem,hBm); //将位图选入内存设备环境
//调用函数BitBlt将内存设备环境中的位图拷贝到设备环境中
BitBlt(hdc,180,80,bm.bmWidth,bm.bmHeight,hdcmem,0,0,SRCCOPY);
EndPaint(hwnd,&ps); //释放设备环境句柄
break;
case WM_DESTROY:
DeleteObject(hBm); //释放位图
PostQuitMessage(0);
break;
default:
return DefWindowProc(hwnd,message,wParam,lParam);
}
return 0;
}
本例的资源文件如下:
pic7_2 BITMAP pic7_2.bmp //定义位图资源
请问上面程序的位图资源如何加载
主要是vc++里面的操作问题
为什么我调试时图片老是显示不出来
具体的源程序代码如下:
//位图示例.c
#include <windows.h>
#include <string.h>
#include <stdlib.h>
#include <stdio.h>
LRESULT CALLBACK WndProc(HWND,UINT,WPARAM,LPARAM);
//定义变量
HDC hdc; //设备环境句柄
HDC hdcmem; //内存设备环境句柄
HBITMAP hBm; //位图句柄
BITMAP bm; //BITMAP结构
int WINAPI WinMain
(
HINSTANCE hInstance,
HINSTANCE hPrevInst,
LPSTR lpszCmdLine,
int nCmdShow
)
{
HWND hwnd ;
MSG Msg ;
WNDCLASS wndclass ;
char lpszClassName[] = "位图";
char lpszTitle[]= "Example_For_BitMap";
wndclass.style = 0;
wndclass.lpfnWndProc = WndProc ;
wndclass.cbClsExtra = 0 ;
wndclass.cbWndExtra = 0 ;
wndclass.hInstance = hInstance ;
wndclass.hIcon = LoadIcon( NULL, IDI_APPLICATION) ;
wndclass.hCursor = LoadCursor( NULL, IDC_ARROW) ;
wndclass.hbrBackground = GetStockObject( WHITE_BRUSH) ;
wndclass.lpszMenuName = NULL ;
wndclass.lpszClassName = lpszClassName ;
if( !RegisterClass( &wndclass))
{
MessageBeep(0) ;
return FALSE ;
}
hwnd = CreateWindow( lpszClassName,
lpszTitle,
WS_OVERLAPPEDWINDOW,
CW_USEDEFAULT,
CW_USEDEFAULT,
CW_USEDEFAULT,
CW_USEDEFAULT,
NULL,
NULL,
hInstance,
NULL) ;
hBm=LoadBitmap(hInstance,"pic7_2"); //加载位图
GetObject( hBm, sizeof( BITMAP), (LPVOID)&bm) ; //获取位图尺寸
ShowWindow( hwnd, nCmdShow) ;
UpdateWindow(hwnd);
while( GetMessage(&Msg, NULL, 0, 0))
{
TranslateMessage( &Msg) ;
DispatchMessage( &Msg) ;
}
return Msg.wParam;
}
LRESULT CALLBACK WndProc( HWND hwnd,
UINT message,
WPARAM wParam,
LPARAM lParam)
{ PAINTSTRUCT ps;
switch(message){
case WM_CREATE:
hdc=GetDC(hwnd); //获取设备环境
hdcmem=CreateCompatibleDC(hdc); //获取内存设备环境
ReleaseDC(hwnd,hdc); //释放设备环境
case WM_PAINT:
hdc=BeginPaint(hwnd,&ps);
SelectObject(hdcmem,hBm); //将位图选入内存设备环境
//调用函数BitBlt将内存设备环境中的位图拷贝到设备环境中
BitBlt(hdc,180,80,bm.bmWidth,bm.bmHeight,hdcmem,0,0,SRCCOPY);
EndPaint(hwnd,&ps); //释放设备环境句柄
break;
case WM_DESTROY:
DeleteObject(hBm); //释放位图
PostQuitMessage(0);
break;
default:
return DefWindowProc(hwnd,message,wParam,lParam);
}
return 0;
}
本例的资源文件如下:
pic7_2 BITMAP pic7_2.bmp //定义位图资源
请问上面程序的位图资源如何加载
主要是vc++里面的操作问题
为什么我调试时图片老是显示不出来