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),在该类中画图的基本功能都有.比如:直线.折线.矩形.多边形.椭圆形.扇形.曲线等等,因此一般的图形都可以直接通过代码 ...
随机推荐
- 洛谷 P3275 BZOJ 2330 [SCOI2011]糖果
题目描述 幼儿园里有N个小朋友,lxhgww老师现在想要给这些小朋友们分配糖果,要求每个小朋友都要分到糖果.但是小朋友们也有嫉妒心,总是会提出一些要求,比如小明不希望小红分到的糖果比他的多,于是在分配 ...
- Java内部静态类与内部非静态类
Java内部静态类与内部非静态类 把类看成一个属性,稍微容易理解一些:在main方法中,不会去直接引用一个非static的变量,对于类也一样. 学习了:http://blog.csdn.net/zer ...
- 杭电1879继续畅通project
继续畅通project Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Tota ...
- 驱动开发(8)处理设备I/O控制函数DeviceIoControl
本博文由CSDN博主zuishikonghuan所作,版权归zuishikonghuan全部,转载请注明出处:http://blog.csdn.net/zuishikonghuan/article/d ...
- Configure environment variables for different tools in jenkins
安装以下的工具,并在Jenkins中的Manage Jenkins-->Configure System-->Global Properties-->Environment Vari ...
- Spring MVC简介 2.5 Spring MVC执行的流程
package org.fkit.controller; import javax.servlet.http.HttpServletRequest; import javax.servlet.http ...
- exchange 2010-备份还原
操作系统:Windows Server 2008R2 \ Exchange2010 测试 1.使用Administraotr用户进行查看己有邮件,如下图: 2.备份Exchange2010整个数据库, ...
- codeforces 712A. Memory and Crow
2019-05-18 08:48:27 加油,加油,坚持!!! 这道题我没有想出公式推导,只是按照模拟题来做,第5个样例超时 样例超时,方法错误 https://www.cnblogs.com/ECJ ...
- QlikSense移动端使用攻略
公司内部署QlikSense服务器,除了在电脑上用浏览器访问,也可以在移动端进行访问. 移动端访问在如下网址有英文详细介绍:https://community.qlik.com/docs/DOC-19 ...
- redis的基本命令
一.String类型的键值对 给一个变量赋值 set varName varVal eg 得到一个变量的值 get varName eg 删除一个变量 del varName eg del nume ...