读书人

最后10分问个有关问题关于WinAPI显示

发布时间: 2012-03-19 22:03:04 作者: rapoo

最后10分问个问题,关于WinAPI显示位图的。
请问用Windows SDK把一个存在桌面上的BMP显示到桌面DC上的话,是不是要用到以下5个函数啊,请问他们之间的组合关系是什么样的啊,以前在VB里面用来着,现在都忘了,现在在C++里面用。
BitBlt
CreateDC
CreateCompatibleDC
CreateBitmap
CreateCompatibleBitmap
能不能给出一个简单流程呢,如果有源码最好了。
用不用include什么呢?

谢谢,分不多了。。。。

[解决办法]
我有MFC显示位图的
[解决办法]
CClientDC dc(this); //获得用户显示dc
CBitmap *bmp=new CBitmap; //位图对象
bmp-> LoadBitmap(IDB_BGBMP); //我一般用LoadBitmap从资源中加载位图,CreateBitmap没用过
CDC *mdc = new CDC; //缓冲的dc
mdc-> CreateCompatibleDC(&dc);
mdc-> SelectObject(bmp);
dc.BitBlt(0,0,600,650,mdc,0,0,SRCCOPY); //显示缓冲dc中的内容
[解决办法]
LRESULT CALLBACK WndProc (HWND hwnd, UINT message, WPARAM wParam,LPARAM lParam)

{
static HBITMAP hBitmapImag, hBitmapMask ;
static HINSTANCE hInstance ;
static int cxClient, cyClient, cxBitmap, cyBitmap ;
BITMAP bitmap ;
HDC hdc, hdcMemImag, hdcMemMask ;
int x, y ;
PAINTSTRUCT ps ;

switch (message)
{
case WM_CREATE:

hInstance = ((LPCREATESTRUCT) lParam)-> hInstance ;

// Load the original image and get its size

hBitmapImag = LoadBitmap (hInstance, TEXT ( "Matthew ")) ;

GetObject (hBitmapImag, sizeof (BITMAP), &bitmap) ;

cxBitmap = bitmap.bmWidth ;

cyBitmap = bitmap.bmHeight ;


// Select the original image into a memory DC

hdcMemImag = CreateCompatibleDC (NULL) ;

SelectObject (hdcMemImag, hBitmapImag) ;

// Create the monochrome mask bitmap and memory DC

hBitmapMask = CreateBitmap (cxBitmap, cyBitmap, 1, 1, NULL) ;

hdcMemMask = CreateCompatibleDC (NULL) ;

SelectObject (hdcMemMask, hBitmapMask) ;


// Color the mask bitmap black with a white ellipse

SelectObject (hdcMemMask, GetStockObject (BLACK_BRUSH)) ;

Rectangle (hdcMemMask, 0, 0, cxBitmap, cyBitmap) ;

SelectObject (hdcMemMask, GetStockObject (WHITE_BRUSH)) ;

Ellipse (hdcMemMask, 0, 0, cxBitmap, cyBitmap) ;


// Mask the original image

BitBlt (hdcMemImag, 0, 0, cxBitmap, cyBitmap,

hdcMemMask, 0, 0, SRCAND) ;

DeleteDC (hdcMemImag) ;

DeleteDC (hdcMemMask) ;

return 0 ;


case WM_SIZE:

cxClient = LOWORD (lParam) ;

cyClient = HIWORD (lParam) ;



return 0 ;


case WM_PAINT:

hdc = BeginPaint (hwnd, &ps) ;


// Select bitmaps into memory DCs


hdcMemImag = CreateCompatibleDC (hdc) ;

SelectObject (hdcMemImag, hBitmapImag) ;


hdcMemMask = CreateCompatibleDC (hdc) ;

SelectObject (hdcMemMask, hBitmapMask) ;


// Center image


x = (cxClient - cxBitmap) / 2 ;

y = (cyClient - cyBitmap) / 2 ;



// Do the bitblts


BitBlt (hdc, x, y, cxBitmap, cyBitmap, hdcMemMask, 0, 0, 0x220326) ;

BitBlt (hdc, x, y, cxBitmap, cyBitmap, hdcMemImag, 0, 0, SRCPAINT) ;


DeleteDC (hdcMemImag) ;

DeleteDC (hdcMemMask) ;

EndPaint (hwnd, &ps) ;

return 0 ;


case WM_DESTROY:

DeleteObject (hBitmapImag) ;

DeleteObject (hBitmapMask) ;

PostQuitMessage (0) ;

return 0 ;

}

return DefWindowProc (hwnd, message, wParam, lParam) ;

}

读书人网 >C++

热点推荐