#include<windows.h>
#include"resource.h"LRESULT CALLBACK WndProc(HWND,UINT,WPARAM,LPARAM);int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInst,LPSTR lpszCmdLine,int nCmdShow)
{
  MSG Msg;
  WNDCLASS wndclass;
  char lpszClassName[]="图片窗口";
  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 = (HBRUSH) GetStockObject(WHITE_BRUSH);
  wndclass.lpszMenuName = NULL;
  wndclass.lpszClassName = lpszClassName;
  //窗口初始化完成  //窗口注册
  if(!RegisterClass(&wndclass))
  {
   return FALSE;
  }
  //注册完成  //窗口创建
  HWND hwnd;
  char lpszTitle[] = "图片显示";
///////////////////////////////////////////////////////////////////////////////////////////////////////////////
  hbm=LoadBitmap(hInstance,MAKEINTRESOURCE(IDB_BITMAP1));
 //hbm未定义? 怎么查看使用hbm这个变量 这个变量的类型是什么? 应该定义在代码的什么位置?
/////////////////////////////////////////////////////////////////////////////
  hwnd=CreateWindow(
   lpszClassName, 
   lpszTitle,
   WS_OVERLAPPEDWINDOW,
   CW_USEDEFAULT,
   CW_USEDEFAULT,
   CW_USEDEFAULT,
   CW_USEDEFAULT,
   NULL,
   NULL,
   hInstance,
   NULL
  );
  //窗口创建完成
  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;
 HDC hdc,hdmem; 
 switch(message)
 {
  case WM_CREATE:
  hdc=GetDC(hwnd);
  hdmem=CreateCompatibleDC(hdc);
  ReleaseDC(hwnd,hdc);
  break;
   
  case WM_PAINT:
  hdc=::BeginPaint(hwnd,&ps);
         //////////////////////////////////////////////////////////////////////////////////
         ///hbm在上面定以后为什么 在这里会显示这个hbm未定义?
  SelectObject(hdmem,hbm);
         ///////////////////////////////////////////////////////////////////////////////////
          ///bm是什么类型的变量 该怎么初始化他,如何从图片获得数据?
  BitBlt(hdc,20,20,bm.bmWidth,bm.bmHeight,hdmem,0,0,SRCCOPY);
  EndPaint(hwnd,&ps);
  break;
  case WM_DESTROY:
  PostQuitMessage(0);
  break;
  default:
  return DefWindowProc(hwnd,message,wParam,lParam);
 }
 return 0;
}一下是运行结果及报错

解决方案 »

  1.   

    HBITMAP LoadBitmap(
    HINSTANCE hInstance, 
    LPCTSTR lpBitmapName
    ); 
    所以是HBITMAP类型
      

  2.   

    HBITMAP hbm;
    BITMAP  bm;
    LRESULT CALLBACK WndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
    //
    GetObject(hbm, sizeof(BITMAP), (LPSTR)&bm); 
      

  3.   

    谢了啊! 顺便再问下 里面的HBITMAP hbm;
     HDC hdc,hdmem;
     这三个变量貌似我都把他声明成全局的! 这样做真的好吗?
      

  4.   

    可以放函数内。有个问题是如果函数2次调用间这个变量要保持上次值那么要加static如:
    LRESULT CALLBACK WndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
    {
    static HBITMAP hbm;