Win32App绘制封闭图形函数
2013-07-16 22:28
295 查看
绘制椭圆函数
绘制圆角矩形
扇形 弓形
下面所谓的“起点”和“终点”我用图解说明:
图中(50,50)即是起点,用A表示;(300,300)即是终点,用B表示。A与矩形几何中心连接与椭圆相交得到A',B与几何中心连接与椭圆相交得到B‘,由于默认的图形绘制方向是逆时针,所以这个弓形是从A'开始绘制弧形到B',然后从B'绘制直线到A'。
图中扇形的绘制也是同样的方式实现的。
可以为WM_MOUCEMOVE消息实现响应函数,通过光标所在位置将坐标显示在窗体中以便观察坐标点。这个消息函数的实现,我放在本文最后部分。
实例运用:
运行效果:
实现WM_MOUCEMOVE消息响应函数:
添加: #include <cstdio> 头文件
在WndProc函数中添加:
相关内容链接:VC++之图形设备接口之CDC类之画弧函数及相关结构
BOOL Ellipse( HDC hdc, int x1, //椭圆外接矩形左上点x坐标 int y1, //椭圆外接矩形左上点y坐标 int x2, //椭圆外接矩形右下点x坐标 int y2 ); //椭圆外节矩形右下点y坐标
绘制圆角矩形
BOOL RoundRect( HDC hdc, int x1, //外围矩形左上点x坐标 int y1, //外围矩形左上点y坐标 int x2, //外围矩形右下点x坐标 int y2, //外围矩形右下点y坐标 int A, //圆角上椭圆长,即2a int B, //圆角上椭圆高,即2b
扇形 弓形
下面所谓的“起点”和“终点”我用图解说明:
图中(50,50)即是起点,用A表示;(300,300)即是终点,用B表示。A与矩形几何中心连接与椭圆相交得到A',B与几何中心连接与椭圆相交得到B‘,由于默认的图形绘制方向是逆时针,所以这个弓形是从A'开始绘制弧形到B',然后从B'绘制直线到A'。
图中扇形的绘制也是同样的方式实现的。
可以为WM_MOUCEMOVE消息实现响应函数,通过光标所在位置将坐标显示在窗体中以便观察坐标点。这个消息函数的实现,我放在本文最后部分。
BOOL Pie( HDC hdc int x1, //外围矩形左上点x坐标 int y1, //外围矩形左上点y坐标 int x2, //外围矩形右下点x坐标 int y2, //外围矩形右下点y坐标 int x3, //起点x坐标 int y3, //起点y坐标 int x4, //终点x坐标 int y4 );//终点y坐标 BOOL Chord( HDC hdc int x1, //外围矩形左上点x坐标 int y1, //外围矩形左上点y坐标 int x2, //外围矩形右下点x坐标 int y2, //外围矩形右下点y坐标 int x3, //弦起点x坐标(逻辑单位),截取椭圆的直线端点x坐标 int y3, //弦起点x坐标(逻辑单位),截取椭圆的直线端点y坐标 int x4, //弦终点X逻辑坐标,截取椭圆直线的端点X坐标 int y4 );//弦终点Y逻辑坐标,截取椭圆直线的端点Y坐标 //补充关于设置和获取画弧的方向问题 环境默认的圆弧绘制方向是:逆时针。 int GetArcDirection(__in HDC hdc); 参数:hdc指定绘图设备的句柄 返回值:如果出错返回0,否则返回hdc关联的当前指定的圆弧方向。 AD_COUNTERCLOCKWISE 弧与矩形按逆时针方向绘制。 AD_CLOCKWISE 弧与矩形按顺时针方向绘制。 int SetArcDirection(__in HDC hdc,__in int ArcDirection); 参数: ArcDirection 指定新的弧方向,为下列值之一: AD_COUNTERCLOCKWISE 图形按逆时针方向绘制。 AD_CLOCKWISE 图形按顺时针方向绘制。 hdc指定绘图设备的句柄 返回值:如果成功,返回ArcDirection中的值,否则返回0。
实例运用:
#include <windows.h> HINSTANCE hInst; HPEN hPen; HBRUSH hBru[4]; int sBru[4]={HS_VERTICAL, HS_HORIZONTAL,HS_CROSS,HS_DIAGCROSS}; void MyPaint( HDC hdc) { SelectObject(hdc,hPen); SelectObject(hdc,hBru[0]); Ellipse(hdc,20,20,270,150); TextOut(hdc,120,160,"椭圆形",strlen("椭圆形")); SelectObject(hdc,hBru[1]); RoundRect(hdc,300,20,550,150,30,30); TextOut(hdc,400,160,"圆角矩形",strlen("圆角矩形")); SelectObject(hdc,hBru[2]); Pie(hdc,20,210,270,340,50,50,300,300); TextOut(hdc,120,350,"扇形",strlen("扇形") ); SelectObject(hdc,hBru[3]); Chord(hdc,300,210,550,340,50,50,300,300); TextOut(hdc,400,350,"弓形",strlen("弓形") ); } //我的消息过程处理函数 LRESULT CALLBACK WndProc( HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) { PAINTSTRUCT ps; HDC hdc; int i; switch (message) { case WM_PAINT: hdc = BeginPaint(hWnd, &ps); MyPaint(hdc); EndPaint(hWnd,&ps); break; case WM_DESTROY: for( i = 0; i <= 3; i++ ) { DeleteObject(hBru[i]); } DeleteObject(hPen); PostQuitMessage(0); break; default: return DefWindowProc(hWnd, message,wParam,lParam); } return 0; } //初始化实例函数 BOOL InistInstance( HINSTANCE hInstance, int nCmdShow) { HWND hWnd; HDC hdc; int i; hInst = hInstance; hWnd = CreateWindow("seek","封闭图形",WS_OVERLAPPEDWINDOW, 350,110,CW_USEDEFAULT,50,NULL,NULL,hInstance,NULL); if ( !hWnd ) { return FALSE; } //MoveWindow( hWnd,350,110,450,250,true); ShowWindow( hWnd, nCmdShow); UpdateWindow( hWnd); hPen = CreatePen(PS_SOLID,3,RGB(255,0,0)); for( i = 0; i <= 3; i++ ) { hBru[i] = CreateHatchBrush(sBru[i],RGB(0,0,255)); } hdc = GetDC(hWnd); MyPaint(hdc); ReleaseDC(hWnd,hdc); return TRUE; } //我的窗口注册函数 ATOM MyRegisterClass(HINSTANCE hInstance) { WNDCLASSEX wcex; wcex.cbSize = sizeof(WNDCLASSEX); wcex.style = CS_HREDRAW | CS_VREDRAW; wcex.lpfnWndProc = (WNDPROC)WndProc; wcex.cbClsExtra = 0; wcex.cbWndExtra = 0; wcex.hInstance = hInstance; wcex.hIcon = NULL; wcex.hCursor = LoadCursor(NULL,IDC_ARROW); wcex.hbrBackground = (HBRUSH)(COLOR_WINDOW + 1 ); wcex.lpszMenuName = NULL; wcex.lpszClassName = "seek"; wcex.hIconSm = NULL; return RegisterClassEx(&wcex); } //程序入口函数 int APIENTRY WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow ) { MSG msg; MyRegisterClass(hInstance); if ( !InistInstance(hInstance,nCmdShow)) { return FALSE; } while ( GetMessage( &msg, NULL, 0, 0) ) { TranslateMessage(&msg); DispatchMessage(&msg); } return msg.wParam; }
运行效果:
实现WM_MOUCEMOVE消息响应函数:
添加: #include <cstdio> 头文件
void MyPaintCord(HDC hdc, LPARAM lParam ) { int x,y; char str[20] = ""; x = LOWORD(lParam); //取得鼠标x坐标 y = HIWORD(lParam); //取得鼠标y坐标 SetTextColor(hdc,RGB(255,0,0)); TextOut(hdc,500,320,"鼠标坐标",strlen("鼠标坐标") ); //下面的sprintf函数将x或是y的值是左对齐输出并且没有占位符号,这个问题解决如下: sprintf(str,"x坐标:%04d",x); TextOut(hdc,520,340,str,strlen(str)); sprintf(str,"y坐标:%04d",y); TextOut(hdc,520,360,str,strlen(str)); }
在WndProc函数中添加:
case WM_MOUSEMOVE: hdc = GetDC(hWnd); MyPaintCord(hdc,lParam); ReleaseDC(hWnd,hdc); break;
相关内容链接:VC++之图形设备接口之CDC类之画弧函数及相关结构
相关文章推荐
- 常用的用来绘制图形的win32GDI函数
- 常用的用来绘制图形的win32GDI函数
- flex白板之图形绘制函数
- 【JAVA语言程序设计基础篇】--图形-- 使用抽象方法绘制函数图形
- MATLAB画图入门篇--各种基本图形绘制的函数与实例
- Step 4:Processing基本函数绘制图形
- 使用cairo绘制图形的部分函数总结
- matlab中三维图形绘制函数
- javascript制作公式编辑器,函数编辑器和图形绘制
- 【续集】 C语言图形和函数图像的绘制【其他部分 第二章】
- OpenGL 3D图形常用绘制函数
- 入门win32——绘制图形
- 图形和函数图像的绘制
- 在Dreamweaver下创建一个php文件并用正确使用php“绘图函数”进行绘制图形时,图形却无法显示
- matlab入门1--利用plot函数绘制正弦函数图形
- 使用cairo绘制图形的部分函数总结
- cocos2dx-v3.0-图形绘制-draw()函数
- 用d3引擎将数学函数绘制成图形
- 用Lu图形库Lu2D绘制(动态)函数图形
- css绘制特殊图形,meida查询,display inline-box间隙问题以及calc()函数