[Win32]曲线绘制

本文介绍了在Win32环境下如何进行曲线绘制,包括直线拟合正弦曲线、矩形和椭圆的绘制,以及各种画线和填充函数的使用。重点讲解了贝塞尔样条曲线,包括PolyBezier和PolyBezierTo函数的使用,强调了控点和端点的关系。同时,还提及了鼠标消息处理中wParam参数的重要作用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1. 用直线拟合正弦曲线以及矩形、椭圆线等的绘制:

// sinewave_linedemo.c

#include <windows.h>
#include <math.h>

#define NUM		1000
#define DPI		( 2 * 3.1415926 )

POINT	apt[NUM]; // 用1000个点来拟合一个周期的sin

LRESULT CALLBACK WndPorc( HWND hWnd, UINT message, WPARAM wPram, LPARAM lParam );

int WINAPI WinMain(
	HINSTANCE	hInstance,
	HINSTANCE	hPrevInstance,
	LPSTR		lpszCmdLine,
	int			nCmdShow
	)
{
	static TCHAR	szAppName[] = TEXT("sinewave_linedemo");

	WNDCLASS	wndclass;
	HWND		hWnd;
	MSG			msg;

	wndclass.style			= CS_HREDRAW | CS_VREDRAW;
	wndclass.lpfnWndProc	= WndPorc;
	wndclass.cbClsExtra		= 0;
	wndclass.cbWndExtra		= 0;
	wndclass.hInstance		= hInstance;
	wndclass.hIcon			= LoadIcon( NULL, IDI_APPLICATION );
	wndclass.hCursor		= LoadCursor( NULL, IDC_ARROW );
	wndclass.hbrBackground	= (HBRUSH)GetStockObject( WHITE_BRUSH );
	wndclass.lpszMenuName	= NULL;
	wndclass.lpszClassName	= szAppName;

	RegisterClass( &wndclass );

	hWnd = CreateWindow(
		szAppName,
		TEXT("Sine Wave & Line Demo"),
		WS_OVERLAPPEDWINDOW & ~WS_MAXIMIZEBOX, // 上半部显示正弦波下半部显示各种曲线,因此窗口开到最大
		CW_USEDEFAULT, CW_USEDEFAULT,
		CW_USEDEFAULT, CW_USEDEFAULT,
		NULL, NULL, hInstance, NULL
	);
	
	ShowWindow( hWnd, SW_MAXIMIZE );
	UpdateWindow( hWnd );

	while ( GetMessage( &msg, NULL, 0, 0 ) )
	{
		TranslateMessage( &msg );
		DispatchMessage( &msg );
	}

	return msg.wParam;
}

LRESULT CALLBACK WndPorc( HWND hWnd, UINT message, WPARAM wPram, LPARAM lParam )
{
	static int		cxClient, cyClient;

	HDC				hDC;
	PAINTSTRUCT		ps;

	int		i;

	switch ( message)
	{
	case WM_SIZE:
		cxClient = LOWORD( lParam );
		cyClient = HIWORD( lParam );
		return 0;

	case WM_PAINT:
		hDC = BeginPaint( hWnd, &ps );

		// 在任何时候环境设备都有一个当前位置,即一个点
		// 很多画线函
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值