位图和位块传输(1)BitBlt与PatBlt
来源:互联网 发布:沙沙网络怎么没有了 编辑:程序博客网 时间:2024/05/20 14:19
BitBlt读作"bit blit"表示位块传输,BitBlt函数是像素移动者,或者,更生动的说,点阵撞击者,下面是一个简单的BitBlt
#include<windows.h>LRESULT CALLBACK WindowProc(HWND hwnd, // handle to windowUINT uMsg, // message identifierWPARAM wParam, // first message parameterLPARAM lParam // second message parameter);int WINAPI WinMain( HINSTANCE hInstance, // handle to current instance HINSTANCE hPrevInstance, // handle to previous instance LPSTR lpCmdLine, // command line int nCmdShow // show state ){static TCHAR szAppName[]=TEXT("leidemingzi");HWND hwnd;MSG msg;WNDCLASS wndclass;wndclass.cbClsExtra=0;wndclass.cbWndExtra=0;wndclass.hbrBackground=(HBRUSH)GetStockObject(WHITE_BRUSH);wndclass.hCursor=LoadCursor(NULL,IDC_ARROW);wndclass.hIcon=LoadIcon(NULL,IDI_ERROR);wndclass.hInstance=hInstance;wndclass.lpfnWndProc=WindowProc;wndclass.lpszClassName=szAppName;wndclass.lpszMenuName=NULL;wndclass.style=CS_HREDRAW|CS_VREDRAW;if(!RegisterClass(&wndclass)){MessageBox(NULL,TEXT("the program requrie the window nt"),TEXT("tips"),MB_ICONERROR);return 0;}hwnd=CreateWindow(szAppName, // registered class nameTEXT("this is title"), // window nameWS_OVERLAPPEDWINDOW, // window styleCW_USEDEFAULT, // horizontal position of windowCW_USEDEFAULT, // vertical position of windowCW_USEDEFAULT, // window widthCW_USEDEFAULT, // window heightNULL, // handle to parent or owner windowNULL, // menu handle or child identifierhInstance, // handle to application instanceNULL// window-creation data);ShowWindow(hwnd,nCmdShow);UpdateWindow(hwnd);while(GetMessage(&msg,NULL,0,0)){TranslateMessage(&msg);DispatchMessage(&msg);}return msg.wParam;}LRESULT CALLBACK WindowProc(HWND hwnd, // handle to windowUINT uMsg, // message identifierWPARAM wParam, // first message parameterLPARAM lParam // second message parameter){static int cxClient,cyClient,cxSource,cySource;HDC hdcClient,hdcWindow;int x,y;PAINTSTRUCT ps;switch(uMsg){case WM_CREATE:cxSource=GetSystemMetrics(SM_CXSIZEFRAME)+GetSystemMetrics(SM_CXSIZE);cySource=GetSystemMetrics(SM_CYSIZEFRAME)+GetSystemMetrics(SM_CYCAPTION);return 0;case WM_SIZE:cxClient=LOWORD(lParam);cyClient=HIWORD(lParam);return 0;case WM_PAINT:hdcClient=BeginPaint(hwnd,&ps);hdcWindow=GetWindowDC(hwnd);for(y=0;y<cyClient;y+=cySource)for(x=0;x<cxClient;x+=cxSource){BitBlt(hdcClient,x,y,cxSource,cySource,hdcWindow,0,0,NOTSRCCOPY);//SRCCOPY}ReleaseDC(hwnd,hdcWindow);EndPaint(hwnd,&ps);return 0;case WM_DESTROY:PostQuitMessage(0);return 0;}return DefWindowProc(hwnd,uMsg,wParam,lParam);}
BitBlt函数把像素从一个设备环境(源)的矩形区域,传输到另一个设备环境(目标)中的一个同样大小的矩形区域,这个函数的语法如下
BitBlt(hdcDst,xDst,yDst,cx,cy,hdcSrc,xSrc,ySrc,dwRop);
其中dwRop的值可以取下面的值:
这里的BitBlt是两个设备环境作为参数。
Windows函数有个称为PatBlt图案块传输函数,只是需要一个设备环境即可,它的作用相当于一个Rectangle
LRESULT CALLBACK WindowProc( HWND hwnd, // handle to window UINT uMsg, // message identifier WPARAM wParam, // first message parameter LPARAM lParam // second message parameter ){HDC hdc;PAINTSTRUCT ps;HBRUSH hbrush;RECT rect; switch(uMsg) { case WM_CREATE: return 0; case WM_PAINT: hdc=BeginPaint(hwnd,&ps); PatBlt(hdc,0,0,100,200,BLACKNESS); hbrush=CreateSolidBrush(RGB(255,0,0)); hbrush=(HBRUSH)SelectObject(hdc,hbrush); Rectangle(hdc,200,200,300,300); DeleteObject(hbrush); SelectObject(hdc,hbrush); Rectangle(hdc,400,400,500,500); SetRect(&rect,500,500,600,600); FillRect(hdc,&rect,CreateSolidBrush(RGB(100,100,100))); EndPaint(hwnd,&ps); return 0; case WM_DESTROY: PostQuitMessage(0); return 0; } return DefWindowProc(hwnd,uMsg,wParam,lParam);}
这里的的dwRop只能取
BLACKNESS,DSTINVERT,PAINVERT,PATCOPY,WHITENESS等
- 位图和位块传输(1)BitBlt与PatBlt
- 第十四章 位图和Bitblt(位块传输)
- 位块传输 BitBlt与StretchBlt
- Windows程序设计-位图和位块传输
- 位图和位块传输(3)之加载位图资源
- 位图和位块传输(4)位图画刷与画画
- 位图和位块传输(5)之画图程序
- 第 14 章 位图和位块传输
- 位图与bitblt【位图知识】
- 位图和BitBlt
- 位图和Bitblt
- 位图和Bitblt
- 第十四章 位图和Bitblt(GDI 位图对象1)
- 位图和位块传输(2)压缩拉伸之StretchBlt函数
- 位图和位块传输(6)画框与会移动的小球
- 位图,设备上下文和BitBlt
- windows程序设计:位图和bitblt
- 第十四章 位图和Bitblt(位图入门,位图尺寸)
- PHP删除数组元素的具体函数介绍: count 与 array_splice
- POJ 2226 二分图 最小点覆盖
- Java获取随机数(工具类)
- LOJ 1119
- 黑马程序员——对于懒汉式的思考
- 位图和位块传输(1)BitBlt与PatBlt
- Linux ssh,telnet服务配置
- VS2005在Release模式下进行调试的设置
- mysql在ubuntu下的 安装流程、配置和其它问题
- [Android学习笔记[使用Fragments取代tabActivity开发网易新闻客户端框架
- #pragma data_seg()
- Android Makfile 中的函数
- 历史的轮回——垄断与腐败
- 数据结构--二叉树--双亲、孩子和兄弟节点的查询(链式结构--队列)