我用SDK编程请看以下代码
case WM_PAINT:
hdc = BeginPaint(hWnd, &ps);
SetBkColor(hdc, 0x000000ff);
hdcMem = CreateCompatibleDC(hdc);
SelectObject(hdcMem, (HBITMAP)LoadImage(NULL, "d:\\临时文件\\字模.bmp", IMAGE_BITMAP,0,0,LR_LOADFROMFILE));
BitBlt(hdc, 200, 200, 50, 50, hdcMem, 0, 0, SRCCOPY);
EndPaint(hWnd, &ps);
break;这是一个典型的Paint消息处理,但却每次都要访问硬盘,于是我试着用全局变量HBITMAP hBitmap = (HBITMAP)LoadImage(NULL, "d:\\临时文件\\字模.bmp", IMAGE_BITMAP,0,0,LR_LOADFROMFILE);然后在处理Paint消息时将SelectObject 一句改为SelectObject(hdcMem, hBitmap);但这样连图像都不能显示,请问这是为什么,用什么方法可以解决。

解决方案 »

  1.   

    case WM_PAINT:
    hdc = GetDC(hwnd);
    hBitmap = (HBITMAP)LoadImage(hInstance, "F:\\bkg.bmp", /*MAKEINTRESOURCE(IDB_BITMAP),*/ IMAGE_BITMAP, 0, 0, LR_LOADFROMFILE);
    GetObject((HGDIOBJ)hBitmap, sizeof(bitmap),&bitmap); hMemDC = CreateCompatibleDC(hdc);
    hOldBitmap = (HBITMAP)SelectObject(hMemDC, hBitmap);
    BitBlt(hdc, (cxClient - bitmap.bmWidth) / 2, (cyClient - bitmap.bmHeight) / 2, cxClient, cyClient, (HDC)hMemDC, 0, 0, SRCCOPY); SelectObject(hMemDC, (HGDIOBJ)hOldBitmap);
    DeleteDC(hMemDC);
    DeleteObject(hBitmap);
    ReleaseDC(hwnd, hdc);
                      break;我的可以啊,你看看吧!
      

  2.   

    See the sample below :http://www.codeproject.com/bitmap/transbitmapmask.asp
      

  3.   

    See the links below  : http://www.codeproject.com/shell/shellextguide7.asp
    http://www.codeproject.com/gdi/coolrgn.asp
      

  4.   

    CBitmap Bitmap;
    Bitmap.Attach(hBitmap);
    memDC.SelectObject(&Bitmap);
    BitBlt(...);