CreateBitmaplndirect

      函数功能:该函数可以创建一个具有特定宽度、高度和颜色格式的位图。

    函数原型:HBITMAP CreateBitmaplndirect(CONST BITMAP *lpbm);

    参数:

    ipbm:指向BITMAP结构的指针。该结构包含有关位图的信息。如果应用程序将其成员bmWidth或bmHeight设为0,那么CreateBitmaplndirect将返加一个只有1个像素点的单色位图的句柄。

  1. #include <windows.h>
  2. #pragma   comment(lib,"Msimg32.lib")
  3. HINSTANCE g_hIns;
  4. HWND g_hWnd;
  5. LRESULT CALLBACK WndProc(HWND,UINT,WPARAM,LPARAM);
  6. int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPSTR lpCmdLine,int iCmdShow)
  7. {
  8.     g_hIns=hInstance;
  9.     static TCHAR szAppName[]=TEXT("HelloWin");
  10.     HWND hWnd;
  11.     MSG msg;
  12.     WNDCLASS wndClass;
  13.     wndClass.style=CS_HREDRAW|CS_VREDRAW;
  14.     wndClass.lpfnWndProc=WndProc;
  15.     wndClass.cbClsExtra=0;
  16.     wndClass.cbWndExtra=0;
  17.     wndClass.hInstance=hInstance;
  18.     wndClass.hIcon=LoadIcon(NULL,IDI_APPLICATION);
  19.     wndClass.hCursor=LoadCursor(NULL,IDC_ARROW);
  20.     wndClass.hbrBackground=(HBRUSH)GetStockObject(WHITE_BRUSH);
  21.     wndClass.lpszMenuName=NULL;
  22.     wndClass.lpszClassName=szAppName;
  23.     if(!RegisterClass(&wndClass))
  24.     {
  25.         MessageBox(NULL,TEXT("error"),szAppName,MB_ICONERROR|MB_OK);
  26.         return 0;
  27.     }
  28.     hWnd=CreateWindow(szAppName,TEXT("The hello program"),WS_OVERLAPPEDWINDOW,
  29.         CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT,NULL,NULL,hInstance,NULL);
  30.     ShowWindow(hWnd,iCmdShow);
  31.     UpdateWindow(hWnd);
  32.     while(GetMessage(&msg,hWnd,0,0))
  33.     {
  34.         TranslateMessage(&msg);
  35.         DispatchMessage(&msg);
  36.     }
  37.     return msg.wParam;
  38. }
  39. LRESULT CALLBACK WndProc(HWND hWnd,UINT message,WPARAM wParam,LPARAM lParam)
  40. {
  41.     static HDC hdc;
  42.     static HDC hBitmapDC,hBitmapDC1;
  43.     static HBITMAP hBitmap,hBitmap1;
  44.     static BITMAP bm;
  45.     static BYTE *p;
  46.     int index = 0;
  47.     PAINTSTRUCT ps;
  48.     switch (message)
  49.     {
  50.     case   WM_PAINT :
  51.         hdc=BeginPaint(hWnd,&ps);
  52.         hBitmapDC1 = CreateCompatibleDC(hdc);
  53.         hBitmap1 = CreateCompatibleBitmap(hdc,100,100);
  54.         SelectObject(hBitmapDC1,hBitmap1);
  55.         TextOut(hBitmapDC1,0,0,TEXT("asdf"),4);
  56.         GetObject(hBitmap1,sizeof(BITMAP),&bm);
  57.         p = new BYTE[bm.bmHeight * bm.bmWidth * bm.bmBitsPixel];
  58.         if (p == NULL)
  59.         {
  60.             return E_FAIL;
  61.         }
  62.         COLORREF col;
  63.         for(int i = 0;i<bm.bmHeight*bm.bmWidth;i++)
  64.         {
  65.             col = GetPixel(hBitmapDC1,(i+1)%bm.bmWidth,(i+1)/bm.bmWidth);
  66.             p[index++] = (BYTE)GetRValue(col);
  67.             p[index++] = (BYTE)GetGValue(col);
  68.             p[index++] = (BYTE)GetBValue(col);
  69.             p[index++] = 255;
  70.         }
  71.         bm.bmBits = p;//注意GetObject只是取得结构信息,并没有取得数据,所以数据要手动添加
  72.         hBitmap = CreateBitmapIndirect(&bm);
  73.         hBitmapDC = CreateCompatibleDC(hdc);
  74.         SelectObject(hBitmapDC,hBitmap);
  75.         BitBlt(hdc,0,0,100,100,hBitmapDC,0,0,SRCCOPY);
  76.         DeleteObject(hBitmap);
  77.         DeleteObject(hBitmap1);
  78.         DeleteObject(hBitmapDC);
  79.         DeleteObject(hBitmapDC1);
  80.         EndPaint (hWnd, &ps) ;
  81.         break;
  82.     case WM_DESTROY :
  83.         PostQuitMessage (0) ;
  84.         break ;
  85.     default:
  86.         return DefWindowProc (hWnd, message, wParam, lParam) ;
  87.     }
  88.     return 1;
  89. }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值