WINDOWS 绘图流程
1.1 创建设备描述表(DC),创建画笔,(如果要填充,创建画刷),将画笔画刷加到设备中(DC);
使用API绘图(画圆,矩形,sin曲线等);
绘制完毕后,删除画笔画刷,释放画图环境。
1.2 画笔
画笔的作用:
设置线条的样式,宽度,颜色;
画笔的定义:两种方式
方法1:获取系统画笔。
HPEN = hpen;
hpen = (HPEN)GetStockObject(NULL_PEN);
系统画笔只有四种颜色:
WHITE_PEN BLACK_PEN DC_PEN NULL_PEN
方法2:自定义画笔,使用CreatePen函数。HPEN = hpen;hpen = CreatePen
(
int penstyle, //画笔样式int width, //画笔宽度COLORREF rgbcolor //画笔颜色)
画笔在定义完之后,要使用SeleteObject函数加到设备中;
在使用完画笔之后,要使用DeleteObject函数删除画笔。
1.3画刷画刷的作用: 填充封闭图形。 创建画刷:
HBRUSH hBrush;
hBrush =(HBRUSH)GetStockObject(BLACK_BRUSH);
还有两个函数: CreateSolidBrush 创建实心画刷 CreateHatchBrush 创建阴影线画刷
使用画刷:
使用SelectObject函数将画刷加到设备中。
删除画刷: 使用完之后要删除画刷,DelectObject函数将画刷删除1.4绘图信息的结构体变量在使用绘图前,要定义绘图绘图环境结构体。
PAINTSTRUCT ptstr;
1.5 窗口工作区windows为窗口的工作区提供了坐标系,始终以工作区的左上角为原点,
x轴的正方向从左往右,y轴正方向从上到下。
1.6一个画圆的例子:椭圆圆的API函数:
BOOL Arc( _In_ HDC hdc, //设备环境句柄 _In_ int nLeftRect, //正方形左上角x坐标 _In_ int nTopRect, //正方形左上角y坐标 _In_ int nRightRect, //正方形右下角x坐标 _In_ int nBottomRect, //正方形右下角y坐标 _In_ int nXStartArc, //圆弧起点x坐标 _In_ int nYStartArc, //圆弧起点y坐标 _In_ int nXEndArc, //圆弧终点x坐标 _In_ int nYEndArc //原话终点y坐标 );//代码区#include <windows.h> #include <stdio.h> #include "resource.h" //窗口消息处理 INT_PTR CALLBACK TheProc(HWND hWnd,UINT message, WPARAM wParam, LPARAM lParam) { HDC hDC; //环境设备句柄 HBRUSH hBrush; //画刷句柄 HPEN hPen; //画笔句柄 PAINTSTRUCT ptstr; //绘图信息的结构体变量 switch(message) { case WM_COMMAND: if ( LOWORD(wParam) == IDCANCEL) EndDialog(hWnd,IDD_DIALOG1); break; case WM_PAINT: { hDC = BeginPaint(hWnd,&ptstr); //设置设备 hPen = CreatePen(PS_DASH,5,RGB(100,100,100)); //创建画笔 hBrush =(HBRUSH)CreateSolidBrush(RGB(100,100,0)); //创建实心画刷 SelectObject(hDC,hPen); //画笔加到设备中 SelectObject(hDC,hBrush); //画刷加到设备中 //画 Arc(hDC, 200, 200, 500, 300, 500,250, 500,250); //完毕删除画笔,画刷,释放画图环境 DeleteObject(hPen); //删除画笔 DeleteObject(hBrush); EndPaint(hWnd,&ptstr); //结束画图 } return 0; case WM_DESTROY : //结束应用程序 PostQuitMessage(0); return 0; default: //其他消息 return DefWindowProc(hWnd,message,wParam,lParam); } return (0); }//主窗口 int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPSTR lpCmdLine,int nCmdShow) { //资源总管,对话框id,父窗口,回调函数 DialogBox(hInstance,(LPCTSTR) IDD_DIALOG1,NULL,TheProc);return 0; }