回 帖 发 新 帖 刷新版面

主题:位图资源的加载

本例调用一幅坦克的图片,并在用户窗口区上显示。
具体的源程序代码如下:
//位图示例.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        //定义位图资源

请问上面程序的位图资源如何加载

回复列表 (共1个回复)

沙发

使用API函数:

HBITMAP LoadBitmap(
  HINSTANCE hInstance,  // handle to application instance
  LPCTSTR lpBitmapName  // address of bitmap resource name
);

我来回复

您尚未登录,请登录后再回复。点此登录或注册