resource.h中
#define IDB_BITMAP1                     101b.rs中
#include "resource.h"
IDB_BITMAP1             BITMAP  DISCARDABLE     "me.BMP"main.cpp中
#include <windows.h>
#include <string.h>
#include <stdlib.h>
#include <stdio.h>
#include "resource.h"
LRESULT CALLBACK WndProc(HWND,UINT,WPARAM,LPARAM);HDC  hdc;
HDC  hdcmem;
HBITMAP  hbm;
BITMAP  bm;
int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInst,LPSTR lpszCmdLine,int nCmdShow)
{
 HWND hwnd;
 MSG Msg;
 WNDCLASS wndclass;
 char lpszClassName[]="bitmap";
 char lpszTitle[]="bitmap test."; wndclass.cbClsExtra =0;
 wndclass.cbWndExtra =0;
 wndclass.hbrBackground =(HBRUSH)(BLACK_BRUSH);
 wndclass.hCursor =LoadCursor(NULL,IDC_ARROW);
 wndclass.hIcon =LoadIcon(NULL,IDI_APPLICATION);
 wndclass.hInstance =hInstance;
 wndclass.lpfnWndProc =WndProc;
 wndclass.lpszClassName =lpszClassName;
 wndclass.lpszMenuName =0;
 wndclass.style =0;
 
 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,"IDB_BITMAP1");
 GetObject(hbm,sizeof(BITMAP),&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);
  break;
 case WM_PAINT:
  hdc=BeginPaint(hwnd,&ps);
  SelectObject(hdc,hbm);
  BitBlt(hdc,100,100,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;
}
//高手指教!

解决方案 »

  1.   

    me.BMP 和resource.h等文件是在同一个文件夹下的
      

  2.   

    case WM_PAINT:
      hdc=BeginPaint(hwnd,&ps);
      HBITMAP holdbm = (HBITMAP)SelectObject(hdcmem,hbm);//位图句柄要选入内存设备环境
      BitBlt(hdc,100,100,bm.bmWidth,bm.bmHeight,hdcmem,0,0,SRCCOPY);
      SelectObject(hdcmdm, holdbmp);//用过的位图句柄要选出设备环境
      EndPaint(hwnd,&ps);
      break;
      

  3.   

    1)我用改了相应的部分,程序编译连接都没问题,就是执行还是没有显示那个位图.
    2)
    WinMain函数中我有
    hbm=LoadBitmap(hInstance,"IDB_BITMAP1");
    而且
    case WM_PAINT:
      hdc=BeginPaint(hwnd,&ps);
      SelectObject(hdc,hbm);
    请问这个算不算是位图句柄要选入内存设备环境?
    bm,hbm,hdcmem我都用的是全局变量.
      

  4.   

    hdc=BeginPaint(hwnd,&ps);
      SelectObject(hdc,hbm);错误,位图句柄要选入内存DC。请照我的代码改改看。
      

  5.   

    to Mackz,我用了你的代码,好象还是不行。
    #include <windows.h>
    #include <string.h>
    #include <stdlib.h>
    #include <stdio.h>
    #include "resource.h"
    LRESULT CALLBACK WndProc(HWND,UINT,WPARAM,LPARAM);HDC  hdc;
    HDC  hdcmem;
    HBITMAP  hbm;
    BITMAP  bm;
    int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInst,LPSTR lpszCmdLine,int nCmdShow)
    {
     HWND hwnd;
     MSG Msg;
     WNDCLASS wndclass;
     char lpszClassName[]="bitmap";
     char lpszTitle[]="bitmap test."; wndclass.cbClsExtra =0;
     wndclass.cbWndExtra =0;
     wndclass.hbrBackground =(HBRUSH)(BLACK_BRUSH);
     wndclass.hCursor =LoadCursor(NULL,IDC_ARROW);
     wndclass.hIcon =LoadIcon(NULL,IDI_APPLICATION);
     wndclass.hInstance =hInstance;
     wndclass.lpfnWndProc =WndProc;
     wndclass.lpszClassName =lpszClassName;
     wndclass.lpszMenuName =0;
     wndclass.style =0;
     
     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,"IDB_BITMAP1");
     GetObject(hbm,sizeof(BITMAP),&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);
      break;
     case WM_PAINT:
      /*
      hdc=BeginPaint(hwnd,&ps);
      SelectObject(hdc,hbm);
      BitBlt(hdc,100,100,bm.bmWidth,bm.bmHeight,hdcmem,0,0,SRCCOPY);
      EndPaint(hwnd,&ps);
      break;
      */
     {
     hdc=BeginPaint(hwnd,&ps);
      HBITMAP holdbm = (HBITMAP)SelectObject(hdcmem,hbm);//位图句柄要选入内存设备环境
      BitBlt(hdc,100,100,bm.bmWidth,bm.bmHeight,hdcmem,0,0,SRCCOPY);
      SelectObject(hdcmem, holdbm);//用过的位图句柄要选出设备环境
      EndPaint(hwnd,&ps);
     }
      break; case WM_DESTROY:
      DeleteObject(hbm);
      PostQuitMessage(0);
      break;
     default:
      return DefWindowProc(hwnd,message,wParam,lParam);
     }
     return 0;
    }