WIN32学习——绘图
来源:互联网 发布:蓝桥杯单片机怎么准备 编辑:程序博客网 时间:2024/05/16 01:26
1、一个颜色的值可以用COLORREF表示,使用宏RGB可以给COLORREF赋值,并且可以通过GetRValue/GetGValue/GetBValue这三个函数来获取宏RGB中的每个值。
2、点的使用
GetPixel函数可以获取指定点点颜色
SetPixel函数可以设置点的颜色,该函数的返回值为以前的颜色。
3、线的使用
MoveToEx函数,移动到指定点
LineTo函数从当前点到指定点绘制一条直线。
4、封闭图形的绘制函数
Rectangle绘制矩形
Ellipse绘制圆形
RoundRect绘制圆角矩形
Arc绘制弧线
5、画笔(HPEN)的使用
1)创建画笔 - CreatePen
2)将画笔应用到DC中 - SelectObject,该函数返回原来的GDI绘图对象的句柄,需要保存起来,绘图结束后需要在将原来的GDI对象在重新选入替代自己创建的画笔
3)绘图
4)取出DC中的画笔,将原来的画笔,使用SelectObject函数放入设备DC中,就会将我们创建的画笔取出。
5)释放画笔 - DeleteObject
注意:画笔是可以改变线的颜色、线性、线粗,在第一步创建画笔时,只要设置线宽大于1,画笔的类型只能是PS_SOLID
6、画刷(HBRUSH)的使用
1)创建画刷
CreateSolidBrush - 创建实心画刷
CreateHatchBrush - 创建阴影画刷
CreatePatternBrush - 创建位图画刷
2)将画刷应用到DC中 - SelectObject
3)绘图
4)将画刷从DC中取出 - SelectObject
5)删除画刷 - DeleteObject
注意:画刷可以为封闭的图形填充颜色、图案。
可以调用GetStockObject函数获取系统维护的画刷、画笔、字体等。通过该函数返回的不需要DeleteObject
7、位图(HBITMAP)的使用
1)在资源中添加位图资源并加载(LoadBitmap)
2)创建兼容DC - CreateCompatibleDC
3)将位图选入兼容DC中 - SelectObject
4)位图的绘制函数 - BitBlt
BOOL BitBlt(//不能缩放,改变大小
HDC hdcDest,//目标DC,(HDC)
int nXDest,//目标左上X坐标
int nYDest,//目标左上Y坐标
int nWidth,//目标的宽度
int nHeight,//目标的高度
HDC hdcSrc,//源DC,(兼容DC)
int nXSrc, //源左上X坐标
int nYSrc, //源左上Y坐标
DWORD dwRop//绘制方法
);
BOOL StretchBlt(//缩放绘制位图HDC hdcDest,int nXOriginDest,int nYIriginDest,int nWidthDest,int nHeightDest,HDC hdcSrc,int nXOriginSrc,int nYOriginSrc,int nWidthSrc,int nHeightSrc,DWORD dwRop);
5)取出位图 - SelectObject
6)释放位图 - DeleteObject
7)释放兼容DC - DeleteDC
注意:可以通过GetObject()函数回去位图的信息,只要的是可以获取位图的宽和高。
附以上总结的练习代码:(需要手动添加菜单资源和位图资源)
#include <Windows.h>#include "resource.h"HINSTANCE g_hInstance;LONG nMenuID;void OnCommand(HWND hWnd,WPARAM wParam){nMenuID = LOWORD(wParam);switch(LOWORD(wParam)){case ID_QUIT:PostQuitMessage(0);break;case ID_PIXEL:case ID_LINE:case ID_RECT:case ID_ELLIPSE:case ID_BITMAP:InvalidateRect(hWnd,NULL,TRUE);break;}}void OnPixel(HDC hDC){for(int i =0;i < 255;i++){for(int j = 0;j < 255;j++)SetPixel(hDC,100+i,100+j,RGB(i,j,0));}}void OnLine(HDC hDC){MoveToEx(hDC,200,200,NULL);LineTo(hDC,350,350);LineTo(hDC,500,200);}void OnRect(HDC hDC){Rectangle(hDC,50,150,250,250);RoundRect(hDC,300,150,500,250,150,150);}void OnEllipse(HDC hDC){Ellipse(hDC,50,150,250,400);Ellipse(hDC,300,150,550,400);}void OnBitMap(HDC hDC){HBITMAP hBitMap = LoadBitmap(g_hInstance,MAKEINTRESOURCE(IDB_BITMAP1));HDC hComDC = CreateCompatibleDC(hDC);HGDIOBJ hOldBit = SelectObject(hComDC,hBitMap);BITMAP bm = {0};GetObject(hBitMap,sizeof(bm),&bm);BitBlt(hDC,20,100,bm.bmWidth,bm.bmHeight,hComDC,0,0,SRCCOPY);StretchBlt(hDC,100,100,24,24,hComDC,0,0,bm.bmWidth,bm.bmHeight,SRCCOPY);SelectObject(hComDC,hOldBit);DeleteObject(hOldBit);DeleteDC(hComDC);}void OnPaint(HWND hWnd){PAINTSTRUCT ps = {0};HDC hDC = BeginPaint(hWnd,&ps);HPEN hPen = CreatePen(PS_SOLID,3,RGB(255,0,0));HGDIOBJ hOldPen = SelectObject(hDC,hPen);//HBRUSH hBrush = CreateSolidBrush(RGB(0,255,0));HBRUSH hBrush = CreateHatchBrush(HS_FDIAGONAL/*HS_DIAGCROSS*/,RGB(0,255,0));HGDIOBJ hOldBrush = SelectObject(hDC,hBrush);switch(nMenuID){case ID_PIXEL:OnPixel(hDC);break;case ID_LINE:OnLine(hDC);break;case ID_RECT:OnRect(hDC);break;case ID_ELLIPSE:OnEllipse(hDC);break;case ID_BITMAP:OnBitMap(hDC);break;}SelectObject(hDC,hOldPen);SelectObject(hDC,hOldBrush);DeleteObject(hBrush);DeleteObject(hPen);EndPaint(hWnd,&ps);}LRESULT CALLBACK MyProc(HWND hWnd,UINT uMsg,WPARAM wParam,LPARAM lParam){switch(uMsg){case WM_PAINT:OnPaint(hWnd);break;case WM_COMMAND:OnCommand(hWnd,wParam);break;case WM_SYSCOMMAND:if (wParam == SC_CLOSE){PostQuitMessage(0);}break;}return DefWindowProc(hWnd,uMsg,wParam,lParam);}ATOM Register(LPCWSTR className){WNDCLASSEX wc = {0};wc.cbClsExtra = 0;wc.cbSize = sizeof(WNDCLASSEX);wc.cbWndExtra = 0;wc.hbrBackground = (HBRUSH)COLOR_WINDOW;wc.hCursor = NULL;wc.hIcon = NULL;wc.hIconSm = NULL;wc.hInstance = g_hInstance;wc.lpfnWndProc = MyProc;wc.lpszClassName = className;wc.lpszMenuName = MAKEINTRESOURCE(IDR_MENU1);//NULL;wc.style = CS_VREDRAW | CS_HREDRAW;return RegisterClassEx(&wc);}HWND Create(LPCWSTR className,LPCWSTR windowName){//在创建窗口中,只能用来修改菜单return CreateWindowEx(0,className,windowName,WS_OVERLAPPEDWINDOW,100,100,600,600,NULL,NULL,g_hInstance,NULL);}void Show(HWND hWnd){ShowWindow(hWnd,SW_SHOW);UpdateWindow(hWnd);}void Message(){MSG ms = {0};while (GetMessage(&ms,NULL,0,0)){TranslateMessage(&ms);DispatchMessage(&ms);}}int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPSTR lpCmdLine,int nShowCmd){g_hInstance = hInstance;Register(__TEXT("Main"));HWND hWnd = Create(__TEXT("Main"),__TEXT("This is test"));Show(hWnd);Message();return 0;}
- WIN32学习——绘图
- Win32学习笔记——绘图
- win32绘图
- win32 绘图
- Extjs学习——绘图
- Win32学习笔记——win32主框架
- WIN32学习——资源学习
- WIN32下绘图
- Win32 绘图理解
- win32双缓冲绘图
- WIN32 API:绘图函数
- [win32] GDI绘图技术
- win32绘图基础
- win32绘图函数
- 学习VC++深入浅出——绘图操作
- iOS学习——CoreGraphics简单绘图
- 从零开始学习OpenGL——简单绘图
- matlab学习笔记——绘图篇
- opencv笔记
- 网易之小易最近在数学课上学习到了集合的概念,集合有三个特征:1.确定性 2.互异性 3.无序性.需要根据给定的w,x,y,z,求出集合中一共有多少个元素。
- Android:dagger2让你爱不释手-重点概念讲解、融合篇
- android 禁止锁屏,保持高亮
- 最常用的版本控制
- WIN32学习——绘图
- VMware设置共享文件夹之后Ubuntu中看不到怎么办?
- 爬虫案例
- PHP环境下Memcache的使用方法
- 计算(字符串)的长度-以及高度动态改变size
- 5月19日云栖精选夜读:性能追求之路——MaxCompute2.0的前世今生
- 微信开发出现“该公众号暂时无法提供服务,请稍后再试”的坑
- Spark编程指南(二)
- Action接收表单传递过来的参数有3种方法