win32之bitmap篇
阅读原文时间:2023年07月08日阅读:1

先讲一下LoadBitmap的用法,代码如下:

PAINTSTRUCT ps;  
HDC hdc = BeginPaint(hwnd,&ps);  
HDC hMemDC = CreateCompatibleDC(hdc);  
HBITMAP hBitmap = LoadBitmap(g\_hIntance,MAKEINTRESOURCE(IDB\_BITMAP1));  
HBITMAP hOldBitmap = (HBITMAP)SelectObject(hMemDC,hBitmap);

//把HBITMAP转换成BITMAP,从而获取位图的宽高。  
BITMAP bmp;  
GetObject(hBitmap, sizeof(BITMAP), &bmp);  
BitBlt(hdc,,,bmp.bmWidth,bmp.bmHeight,hMemDC,,,SRCCOPY);

SelectObject(hMemDC,hOldBitmap);  
DeleteObject(hBitmap);  
DeleteDC(hMemDC);  
EndPaint(hwnd,&ps);    

BitBlt的作用是把hMemDC上的内容拷贝到hdc上,不进行缩放,但是可以位移。

如果想要缩放,可以使用StretchBlt,以下这个例子比较有趣,是把整个屏幕绘制到窗口中。

PAINTSTRUCT ps;  
HDC hdcClient = BeginPaint(hwnd, &ps);  
HDC hdcScreen = CreateDC(TEXT("DISPLAY"), NULL, NULL, NULL);  
RECT rtClient;  
int scrWidth = GetSystemMetrics(SM\_CXSCREEN);  
int scrHeight = GetSystemMetrics(SM\_CYSCREEN);  
GetClientRect(hwnd,&rtClient);  
StretchBlt(hdcClient,,,rtClient.right,rtClient.bottom,  
    hdcScreen,,,scrWidth,scrHeight,SRCCOPY);

DeleteDC(hdcScreen);  
EndPaint(hwnd, &ps);

手机扫一扫

移动阅读更方便

阿里云服务器
腾讯云服务器
七牛云服务器

你可能感兴趣的文章