我用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);但这样连图像都不能显示,请问这是为什么,用什么方法可以解决。
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);但这样连图像都不能显示,请问这是为什么,用什么方法可以解决。
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;我的可以啊,你看看吧!
http://www.codeproject.com/gdi/coolrgn.asp
Bitmap.Attach(hBitmap);
memDC.SelectObject(&Bitmap);
BitBlt(...);