GDI 直线和折线(6)
设置开始点
MoveToEx 函数用于移动画笔到指定的位置:
BOOL MoveToEx(
HDC hdc, // 设备环境句柄
int X, // 要移动到的 x 坐标
int Y, // 要移动到的 y 坐标
LPPOINT lpPoint // 之前的位置(POINT 结构地址)
);
绘制直线
LineTo 函数用于绘制直线到指定位置(这会改变当前画笔的位置到结束位置):
BOOL LineTo(
HDC hdc, // 设备环境句柄
int nXEnd, // 结束位置的 x 坐标
int nYEnd // 结束位置的 y 坐标
);
绘制折线
Polyline 函数用于绘制一系列点构成的折线(这不会改变当前画笔的位置):
BOOL Polyline(
HDC hdc, // 设备环境句柄
CONST POINT *lppt, // POINT 结构数组(一系列点)
int cPoints // POINT 结构的数量(点的数量)
);
PolylineTo 函数用于绘制由画笔位置开始到一系列点所构成的折线(这会改变当前画笔的位置到最后一个点的位置):
BOOL PolylineTo(
HDC hdc, // 设备环境句柄
CONST POINT *lppt, // POINT 结构数组(一系列点)
DWORD cCount // POINT 结构的数量(点的数量)
);
PolyPolyline 函数用于同时绘制多条折线(这不会改变当前画笔的位置):
BOOL PolyPolyline(
HDC hdc, // 设备环境句柄
CONST POINT *lppt, // POINT 结构数组(一系列点)
CONST DWORD *lpdwPolyPoints, // 数组中的每个元素表示对应折线的点的数量
DWORD cCount // 折线数量(上个参数的元素个数)
);
绘制 Sin 函数图像的程序示例
#include <windows.h>
#include <strsafe.h>
#include <math.h> #define NUMS 10000
#define TWOPI 6.283185307 LRESULT CALLBACK WindowProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam) { HDC hdc;
PAINTSTRUCT ps;
RECT rcClient;
POINT apt[NUMS];
TCHAR szBuffer[100];
size_t nLength;
int cxClient, cyClient, i; switch (message) { case WM_PAINT:
hdc = BeginPaint(hwnd, &ps); GetClientRect(hwnd, &rcClient);
cxClient = rcClient.right - rcClient.left;
cyClient = rcClient.bottom - rcClient.top; MoveToEx(hdc, 0, cyClient / 2, NULL);
LineTo(hdc, cxClient, cyClient / 2); for (i = 0; i < NUMS; i++) {
apt[i].x = i;
apt[i].y = (int)((1 - sin(i * TWOPI / cxClient)) * cyClient / 2);
} SetTextAlign(hdc, TA_TOP | TA_RIGHT); StringCchPrintf(szBuffer, sizeof(szBuffer) / sizeof(TCHAR), TEXT("y = sin x"));
StringCchLength(szBuffer, sizeof(szBuffer) / sizeof(TCHAR), &nLength);
TextOut(hdc, cxClient - 10, 10, szBuffer, nLength); Polyline(hdc, apt, i - 1); EndPaint(hwnd, &ps);
return 0; case WM_DESTROY:
PostQuitMessage(0);
return 0;
} return DefWindowProc(hwnd, message, wParam, lParam);
} int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) { LPCTSTR lpszClassName = TEXT("Demo");
LPCTSTR lpszWindowName = TEXT("Demo Program"); 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_APPLICATION);
wndclass.hInstance = hInstance;
wndclass.lpfnWndProc = WindowProc;
wndclass.lpszClassName = lpszClassName;
wndclass.lpszMenuName = NULL;
wndclass.style = CS_HREDRAW | CS_VREDRAW; if (!RegisterClass(&wndclass)) {
MessageBox(NULL, TEXT("This program requires Windows NT!"), lpszWindowName, MB_ICONERROR);
return 0;
} HWND hwnd = CreateWindow(
lpszClassName,
lpszWindowName,
WS_OVERLAPPEDWINDOW,
CW_USEDEFAULT,
CW_USEDEFAULT,
CW_USEDEFAULT,
CW_USEDEFAULT,
NULL,
NULL,
hInstance,
NULL
); ShowWindow(hwnd, nCmdShow);
UpdateWindow(hwnd); MSG msg;
while (GetMessage(&msg, NULL, 0, 0)) {
TranslateMessage(&msg);
DispatchMessage(&msg);
} return msg.wParam;
}
GDI 直线和折线(6)的更多相关文章
- MFC 直线 虚线 折线 圆 椭圆 矩形 弧形
****Dlg.h头文件加入: //为project加入画笔.点变量数组 public: CPen m_pen[5]; CPoint m_point[5]; public: void DrawLine ...
- PowerDesigner设置线风格(直线,折线。。。)
PowerDesigner中的绘图功能真是不敢恭维. 1.修改显示设置 Tools-->Display Preferences 这里有很多表现设置,我们需要的在Format菜单下. 点Modif ...
- 使用html5 Canvas绘制线条(直线、折线等)
使用html5 Canvas绘制直线所需的CanvasRenderingContext2D对象的主要属性和方法(有"()"者为方法)如下: 属性或方法 基本描述 strokeSty ...
- GDI+编程说明及小结
原文地址:http://blog.csdn.net/byxdaz/article/details/5972759 GDI+(Graphics Device Interface Plus图形设备接口加) ...
- GDI+编程小结
GDI+(Graphics Device Interface Plus图形设备接口加)是Windows XP和Windows Server 2003操作系统的子系统,也是.NET框架的重要组成部分,负 ...
- 7C - 折线分割平面
我们看到过很多直线分割平面的题目,今天的这个题目稍微有些变化,我们要求的是n条折线分割平面的最大数目.比如,一条折线可以将平面分成两部分,两条折线最多可以将平面分成7部分,具体如下所示. Input ...
- MFC绘图(转载)
http://www.cppblog.com/bestcln/articles/83189.html 1 几何对象的结构和类 为了使用绘图函数,应该先了解绘图所用到的几种表示几何对象的结构和类.这些结 ...
- WinForm 工作流设计 1
从事软件行业那么多年,一直很少写博.很多技术,长时间不用都慢慢淡忘. 把自己学到的用笔记下来,可以巩固和发现不足,也可以把自己对技术的一些 理解,分享出来供大家批评指正. 废话不多说,进入正题.工作流 ...
- C# 生成chart图表的三种方式
.net中,微软给我们提供了画图类(system.drawing.imaging),在该类中画图的基本功能都有.比如:直线.折线.矩形.多边形.椭圆形.扇形.曲线等等,因此一般的图形都可以直接通过代码 ...
随机推荐
- Spring Boot-properties使用(二)
自定义属性 @value注入 在application.properties新增配置 student.name=小明student.age=12student.info=${student.name} ...
- nyoj 547 优先队列
#include<stdio.h> #include<string.h> #include<queue>//水杯盛水问题,用优先队列不断从最小的边缘开始 using ...
- java extend 和 implements 的区别
1. 在类的声明中,通过关键字extends来创建一个类的子类.一个类通过关键字implements声明自己使用一个或者多个接口.extends 是继承某个类, 继承之后可以使用父类的方法, 也可以重 ...
- 洛谷 P2399 non hates math
P2399 non hates math 题目背景 non习惯将分数化成小数,但在数学中要以分数形式写,不能化成小数 因此non找到了会编程的你,帮助他将小数化回分数 题目描述 给出一个小数,将它化成 ...
- 新安装的wampserver怎么使用本机已有的mysql作为数据库
一般在一台没有安装mysql的机器上安装好wamp后,能够直接在wamp的phpMyAdmin中打开集成的mysql并设置用户信息. 而假设之前已经安装配置好mysql(实usernamepasswo ...
- MEAN框架介绍
近期在Angular社区的原型开发人员间.一种全Javascript的开发架构MEAN正突然流行起来.其首字母分别代表的是:(M)ongoDB--NoSQL的文档数据库,使用JSON风格来存储数据,甚 ...
- poj--2236--棋盘问题(dfs)
棋盘问题 Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 31183 Accepted: 15469 Descriptio ...
- 备份SQL SERVER 2005数据库
- 原生JS通过勾股定理计算苹果菜单效果
JS原生苹果菜单效果 知识点: 勾股定理 a²+b²=c² Event 是一个事件对象,当一个事件发生后,和当前事件发生相关的详细信息会被临时存储到一个指定的地方,也就是event对象,以方便我们在需 ...
- Orcal的JDBC数据连接方式
package cn.com.db; import java.sql.Connection; import java.sql.DriverManager; import java.sql.Prepar ...