win32绘图:绘制直线 矩形 圆形 曲线等

查看代码


#include <Windows.h>
//画点
void PaintSetPixel(HDC hdc) {
	for (short i = 0; i < 20; i++)
	{
		SetPixel(hdc, 30, 30 + i, RGB(0, 0, 255));
	}

}
//画线
void PaintLine(HDC hdc) {
	//从坐标(50,50)画到坐标(200,50)
	MoveToEx(hdc, 50, 50, NULL);
	LineTo(hdc, 200, 50);
}
//画一个矩形
void PaintRect(HDC hdc) {
	//绘制普通举矩形:从左上角坐标(100,00)到右下角坐标(200,200)
	//Rectangle(hdc, 100, 100, 200, 200);
	//绘制圆角矩形 从左上角坐标(100,00)到右下角坐标(200,200) (30,30)表示圆角宽度和高度
	RoundRect(hdc, 100, 100, 600, 600, 30, 30);
}
//画圆 椭圆
void PaintEllipse(HDC hdc) {
	//圆形左上角坐标(50,50) 右下角坐标(100,100)
	Ellipse(hdc, 50, 50, 100, 300);
}
//画弧线
void PaintArc(HDC hdc) {
	Arc(hdc, 100, 100, 400, 400, 150, 50, 50, 150);
}
//画扇形
void PaintPie(HDC hdc) {
	Pie(hdc, 100, 100, 400, 400, 300, 50, 50, 300);
}
//自定义过程函数
//参数 HWND:窗口的句柄  message:消息ID 附加消息信息  附加消息信息
LRESULT CALLBACK MyWndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam) {
	HDC hdc;
	PAINTSTRUCT ps;
	switch (message)
	{
	case WM_DESTROY:
		PostQuitMessage(0);
		return 0;
	case WM_PAINT:
	{
		hdc = BeginPaint(hwnd, &ps);
		//PaintLine(hdc);
		//PaintSetPixel(hdc);
		//PaintRect(hdc);
		//PaintEllipse(hdc);
		//PaintArc(hdc);
		PaintPie(hdc);
		EndPaint(hwnd, &ps);
		break;
	}

	default:
		return DefWindowProcW(hwnd, message, wParam, lParam);
	}
	return DefWindowProcW(hwnd, message, wParam, lParam);
}
//void OnPaint(HDC hdc) {
//    Graphics graphics(hdc);
//}
int WINAPI WinMain(_In_ HINSTANCE hInstance,
	_In_opt_ HINSTANCE hPrevInstance,
	_In_ LPSTR lpCmdLine,
	_In_ int nShowCmd) {
	//声明窗口类
	WNDCLASS wndClass;
	//CS_NOCLOSE 禁止系统菜单的关闭选项
	wndClass.style = CS_HREDRAW | CS_VREDRAW;//窗口类样式
	wndClass.lpfnWndProc = MyWndProc;//窗口过程函数
	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 = L"caoruipeng";//窗口类名称
	//注册窗口类 
	if (!RegisterClass(&wndClass)) {
		MessageBox(NULL, L"无效的窗口类", L"错误提示", MB_OK);
		return FALSE;
	}

	//创建窗口
	HWND hwnd = CreateWindow(L"caoruipeng",//窗口类名称  注册窗口类的名称
		L"第一个窗口程序",//窗口标题
		WS_OVERLAPPEDWINDOW,//窗口样式
		CW_USEDEFAULT,//窗口位置x坐标
		CW_USEDEFAULT,//窗口位置y坐标
		CW_USEDEFAULT,//窗口宽度
		CW_USEDEFAULT,//窗口高度
		NULL,//此时窗口无父窗口
		NULL,//此时窗口无子菜单
		hInstance,//创建窗口的应用程序句柄
		NULL
	);

	//展示窗口
	ShowWindow(hwnd, nShowCmd);

	//绘制用户区域
	UpdateWindow(hwnd);

	MSG msg;
	//如果检索WM_QUIT消息 返回0,其他返回非0  返回0的时候,会跳出循环,结束程序
	while (GetMessage(&msg, NULL, 0, 0))
	{
		TranslateMessage(&msg);//翻译消息
		//将消息分发给窗口过程函数  返回窗口过程函数返回的值 通常忽略该值
		DispatchMessage(&msg);
	}
	return msg.wParam;
}
posted @ 2023-01-04 15:33  caoruipeng  阅读(213)  评论(0编辑  收藏  举报