回 帖 发 新 帖 刷新版面

主题:一个有关位图的加载问题

本例调用一幅坦克的图片,并在用户窗口区上显示。
具体的源程序代码如下:
//位图示例.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++里面的操作问题
为什么我调试时图片老是显示不出来

回复列表 (共7个回复)

沙发

是不是加载位图时要这样:
hBm=LoadBitmap(hInstance,MAKEINTRESOURCE(pic7_2));

板凳

你能提供一下加载过程中
vc++6.0操作的全过程吗?
急啊!!!
帮帮忙啊!

3 楼

你的代码中不是有加载和显示图片的过程吗?
现在图片能不能显示出来?
位图这方面我还没学到呢,呵呵

4 楼

谢谢啦
这个问题我已经解决啦
主要是vc++的操作问题
这方面不太好学啊
书上一般没有介绍
很多情况要自己摸索
祝你学的愉快!早日出关,哈哈!!

5 楼


好啊
能不能
说一下解决的办法~~!

6 楼

wndclass.hbrBackground = GetStockObject( WHITE_BRUSH) ;

这里改一下:
wndclass.hbrBackground = HBRUSH(COLOR_WINDOW+1) ;

7 楼

加载资源文件中的位图直接
hBm=LoadBitmap(hInstance,TEXT("FileName");
就可以了.FileName是资源文件中位图的名字.

我来回复

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