BeginPath 和 EndPath的用法

BeginPath函数调用启动一个路径分支,在这个命令后执行的GDI绘图命令会自动成为路径的一部分. 

EndPath函数用于结束定义一个路径,如果调用成功,BeginPath函数和它之间发生的所有绘图操作都将在指定设备场景的路径中生效。BeginPath函数一般与EndPath函数成对出现。
PathToRegion函数调用将当前选定的路径转换到指定区域中。
例:
获取椭圆(整个路径)上所有的顶点.
dcResult.BeginPath();
dcResult.Ellipse(&rc);//画椭圆
dcResult.EndPath();
dcResult.FlattenPath();
unsigned long lNumPoints = dcResult.GetPath(NULL, NULL, 0);
pts.resize(lNumPoints);
vector<BYTE> Bytes(lNumPoints);
dcResult.GetPath(&pts[0], &Bytes[0], lNumPoints);

画一个路径的
例子:CDC dc(this);
dc.BeginPath();//开始路径
MoveTo(point1);
LineTo(point2);
dc.EndPath();//结束路径
CRgn rgn;
rgn.CreateFromPath(dc);//保存路径的区域
……//可以填充区域
rgn.deleteObject();
这个就是取得了一个直线的区域

#include <windows.h> #include <tchar.h> #include <strsafe.h> #include <iostream> HINSTANCE g_hInstance; // 全局实例句柄 // 窗口过程函数 LRESULT CALLBACK WndProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam) { HDC hdc; PAINTSTRUCT ps; switch (msg) { case WM_CREATE: { MessageBox(hwnd, L"你好,窗口创建成功!", L"提示", MB_OK); break; } case WM_PAINT: { hdc = BeginPaint(hwnd, &ps); BeginPath(hdc); MoveToEx(hdc, 250, 250, NULL); LineTo(hdc, 350, 280); LineTo(hdc, 250, 310); CloseFigure(hdc); Rectangle(hdc, 360, 250, 450, 310); EndPath(hdc); StrokePath(hdc); // 绘制路径的轮廓 EndPaint(hwnd, &ps); } case WM_DESTROY: { PostQuitMessage(0); break; } default: return DefWindowProc(hwnd, msg, wParam, lParam); } return 0; } // WinMain函数 int APIENTRY wWinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPWSTR lpCmdLine, int nCmdShow) { // 分配控制台 AllocConsole(); // 将标准输出重定向到控制台 FILE* stream; freopen_s(&stream, "CONOUT$", "w", stdout); g_hInstance = hInstance; // 保存实例句柄 WNDCLASSEX wcex; HWND hwnd; MSG msg; wcex.cbSize = sizeof(WNDCLASSEX); wcex.style = CS_HREDRAW | CS_VREDRAW; wcex.lpfnWndProc = WndProc; wcex.cbClsExtra = 0; wcex.cbWndExtra = 0; wcex.hInstance = hInstance; wcex.hIcon = LoadIcon(NULL, IDI_APPLICATION); wcex.hCursor = LoadCursor(NULL, IDC_ARROW); wcex.hbrBackground = CreateSolidBrush(RGB(230, 230, 230)); // 红色背景 wcex.lpszMenuName = NULL; wcex.lpszClassName = L"Example"; wcex.hIconSm = LoadIcon(NULL, IDI_APPLICATION); RegisterClassEx(&wcex); hwnd = CreateWindow(L"Example", L"MM_ISOTROPIC Example", WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, 0, 1000, 600, NULL, NULL, hInstance, NULL); ShowWindow(hwnd, nCmdShow); UpdateWindow(hwnd); while (GetMessage(&msg, NULL, 0, 0)) { TranslateMessage(&msg); DispatchMessage(&msg); } return (int)msg.wParam; }
最新发布
08-11
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值