Windows编程——万花筒绘制

#include<windows.h>
#include<stdlib.h>
#include<string.h>
#include<math.h>
#define Pi 3.1415926
long WINAPI WndProc(HWND hWnd, UINT iMessage, UINT wParam, LONG lParam);
BOOL InitWindowsClass(HINSTANCE hInstance);
BOOL InitWindows(HINSTANCE hInstance, int nCmdShow);
int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)
{
	MSG Message;
	if (!InitWindowsClass(hInstance))		return FALSE;
	if (!InitWindows(hInstance, nCmdShow))	return FALSE;
	while (GetMessage(&Message, 0, 0, 0))
	{
		TranslateMessage(&Message);
		DispatchMessage(&Message);
	}
	return Message.wParam;
}
long WINAPI WndProc(HWND hWnd, UINT iMessage, UINT wParam, LONG lParam)
{
	HDC hDC;
	HPEN hPen;
	PAINTSTRUCT PtStr;
	int n = 25;
	POINT points[25];
	double angel = 2 * Pi / n;
	for (int i = 0; i < n; i++)
	{
		points[i].x = static_cast<long>(320 + 180 * cos(i*angel));
		points[i].y = static_cast<long>(250 + 180 * sin(i*angel));
	}
	switch (iMessage)
	{
	case WM_PAINT:
		hDC = BeginPaint(hWnd, &PtStr);
		for (int i = 0; i < 25; i++)
		{
            hPen = (HPEN)GetStockObject(NULL_PEN);
		    SelectObject(hDC, hPen);
			LineTo(hDC, points[i].x, points[i].y);
			DeleteObject(hPen);
			if (i == 0)
			{
				for (int j = 1; j < n; j++)
				{
					switch (j % 6)
					{
					case 1:
					case 2:
						hPen = CreatePen(PS_SOLID, 1, RGB(255, 0, 0));
						break;
					case 3:
					case 4:
						hPen = CreatePen(PS_SOLID, 1, RGB(0, 255, 0));
						break;
					case 5:
					case 0:
						hPen = CreatePen(PS_SOLID, 1, RGB(0, 0, 255));
						break;
					}
					SelectObject(hDC, hPen);
					LineTo(hDC, points[j].x, points[j].y);
					MoveToEx(hDC, points[i].x, points[i].y, NULL);
					DeleteObject(hPen);
				}
			}
			else
			{
				for (int j = i + 1; j < n; j++)
				{
					switch (j % 6)
					{
					case 1:
					case 2:
						hPen = CreatePen(PS_SOLID, 1, RGB(255, 0, 0));
						break;
					case 3:
					case 4:
						hPen = CreatePen(PS_SOLID, 1, RGB(0, 255, 0));
						break;
					case 5:
					case 0:
						hPen = CreatePen(PS_SOLID, 1, RGB(0, 0, 255));
						break;
					}
					SelectObject(hDC, hPen);
					LineTo(hDC, points[j].x, points[j].y);
					MoveToEx(hDC, points[i].x, points[i].y, NULL);
					DeleteObject(hPen);
					Sleep(50);
				}
			}
		}

		EndPaint(hWnd, &PtStr);
		return 0;
	case WM_DESTROY:
		PostQuitMessage(0);
		return 0;
	default:
		return(DefWindowProc(hWnd, iMessage, wParam, lParam));
	}
}
BOOL InitWindows(HINSTANCE hInstance, int nCmdShow)
{
	HWND hWnd;
	hWnd = CreateWindow("WinFill",
		"                                                                         万花筒",
		WS_OVERLAPPEDWINDOW,
		CW_USEDEFAULT,
		0,
		CW_USEDEFAULT,
		0,
		NULL,
		NULL,
		hInstance,
		NULL);
	if (!hWnd)
		return FALSE;
	ShowWindow(hWnd, nCmdShow);
	UpdateWindow(hWnd);
	return TRUE;
}
BOOL InitWindowsClass(HINSTANCE hInstance)
{
	WNDCLASS WndClass;
	WndClass.cbClsExtra = 0;
	WndClass.cbWndExtra = 0;
	WndClass.hbrBackground = (HBRUSH)(GetStockObject(WHITE_BRUSH));
	WndClass.hCursor = LoadCursor(NULL, IDC_ARROW);
	WndClass.hIcon = LoadIcon(NULL, "END");
	WndClass.hInstance = hInstance;
	WndClass.lpfnWndProc = WndProc;
	WndClass.lpszClassName = "WinFill";
	WndClass.lpszMenuName = NULL;
	WndClass.style = CS_HREDRAW | CS_VREDRAW;
	return RegisterClass(&WndClass);
}
<img src="http://img.blog.csdn.net/20150509193843627?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvTm9vYl9m/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="" />
<img src="http://img.blog.csdn.net/20150509193702193" alt="" />
<img src="http://img.blog.csdn.net/20150509193713784" alt="" />
<img src="http://img.blog.csdn.net/20150509193913860" alt="" />
<img src="http://img.blog.csdn.net/20150509193919148" alt="" />
<img src="http://img.blog.csdn.net/20150509193924530" alt="" />
<img src="http://img.blog.csdn.net/20150509193929210" alt="" />
<img src="http://img.blog.csdn.net/20150509193934530" alt="" />
<img src="http://img.blog.csdn.net/20150509193939818" alt="" />
<img src="http://img.blog.csdn.net/20150509193948102" alt="" />
<img src="http://img.blog.csdn.net/20150509193953219" alt="" />
<img src="http://img.blog.csdn.net/20150509193803688" alt="" />
<img src="http://img.blog.csdn.net/20150509193807775" alt="" />
<img src="http://img.blog.csdn.net/20150509193811785" alt="" />
<img src="http://img.blog.csdn.net/20150509193815482" alt="" />
<img src="http://img.blog.csdn.net/20150509194016666" alt="" />

时间: 2024-10-25 00:48:50

Windows编程——万花筒绘制的相关文章

【Windows编程】系列第五篇:GDI图形绘制

上两篇我们学习了文本字符输出以及Unicode编写程序,知道如何用常见Win32输出文本字符串,这一篇我们来学习Windows编程中另一个非常重要的部分GDI图形绘图.Windows的GDI函数包含数百个API可供我们使用,本篇把最常用的GDI绘图做一个讲解.GDI可以绘制点.直线曲线.填充封闭区域.位图以及文本,其中文本部分已经在上一篇中将了,请参考[Windows编程]系列第三篇:文本字符输出. 跟前面的GDI对象一样,本篇的这些绘图函数也必须要设备上下文句柄(HDC)作为函数参数,从前文我

Win32 Windows编程 十

一 Windows绘图 1 图形绘制 1.1 图形绘制的方式 获取到绘图的句柄,设备描述符(DC),使用相应的绘图API,在设备上绘制图形 1.2 颜色 RGB,每种颜色8位,共24位颜色 32位颜色:颜色数量24为颜色,多出的8位表示灰度. 16位:颜色数量是2的16次方. Win32下,颜色的定义使用 COLORREF.RGB的宏定义颜色 COLORREF nColor = RGB( 0, 0, 0 );  黑色 COLORREF nColor = RGB( 255, 255, 255 );

Win32 Windows编程 九

资源的使用 1 资源文件 图标 光标 字符串 菜单  加速键 对话框资源位图等等 资源脚本文件 - 扩展名为RC文件 定义了资源和相关文件等信息 资源编译器 - RC.exe 2 图标资源 ICON 2.1 常用的几种大小: 16x16 ,32x32, 48x48 2.2 使用 HICON LoadIcon( HINSTANCE hInstance, // handle to application instance LPCTSTR lpIconName // name string or re

【Windows编程】系列第三篇:文本字符输出

上一篇我们展示了如何使用Windows SDK创建基本控件,本篇来讨论如何输出文本字符. 在使用Win32编程时,我们常常要输出文本到窗口上,Windows所有的文本字符或者图形输出都是通过图形设备接口(GDI)进行的,Windows的三大核心组件之一的GDI32.dll封装了所有的文本和图像输出. GDI基本知识 Windows下要绘图和输出文本,都是通过GDI(Graphics Device Interface,图形设备接口)完成的,GDI是windows在绘制图文时的设备上下文环境,包括画

有一定基础的 C++ 学习者该怎样学习 Windows 编程?

人的心理有个奇异的特性:一项知识一旦学会之后,学习过程中面临的困惑和不解非常快就会忘得干干净净,似乎一切都是自然而然,本来就该这种.因此,关于「怎样入门」这类问题,找顶尖高手来回答,未必能比一个刚入门不久的人来回答要好.就譬如最高票的那个回答,是一个非常精通 Windows 编程的高人回答的,但这种答案能给刚開始学习的人带来多少帮助,我这里想先打一个问号. 前段时间刚辅导了一个学生学会了 Win32 GUI 编程,刚好看到这个问题,顺手就邀请他回答了.并不是是给他布置总结作业,不过希望能从他这里

有一定基础的 C++ 学习者该如何学习 Windows 编程?

人的心理有个奇妙的特性:一项知识一旦学会之后,学习过程中面临的困惑和不解很快就会忘得干干净净,似乎一切都是自然而然,本来就该这样的.因此,关于「如何入门」这类问题,找顶尖高手来回答,未必能比一个刚入门不久的人来回答要好.就譬如最高票的那个回答,是一个非常精通 Windows 编程的高人回答的,但这样的答案能给初学者带来多少帮助,我这里想先打一个问号. 前段时间刚辅导了一个学生学会了 Win32 GUI 编程,刚好看到这个问题,顺手就邀请他回答了.并非是给他布置总结作业,仅仅是希望能从他这里得到第

Win32 Windows编程 六

WM_PAINT消息 1 WM_PAINT 由于窗口的互相覆盖等,产生需要绘制的区域, 那么会产生WM_PAINT消息.一般情况下,不直接发送WM_PAINT消息,通过API声明需要绘制区域来产生 WM_PAINT消息 例如可以使用 InvalidateRect 声明一个需要重新绘制的区域 BOOL InvalidateRect( HWND hWnd, // handle to window CONST RECT* lpRect, // rectangle coordinates BOOL bE

走进windows编程的世界-----消息处理函数(1)

Win32消息机制 过程驱动:程序是按照我们预先定义好的顺序执行,每执行一步,下一步都已经按照预定的顺序 继续执行,直至程序结束. 事件驱动:程序的执行顺序是无序的.某个时间点所执行的代码,是由外界 通知.由于我们无法决定程序执行顺序.所以代码的执行也是无序的. Win32基本消息 WM_DESTROY:       窗口销毁时的消息,可以做退出或善后处理 WM_CREATE:       窗口创建消息,是在窗口创建后,窗口处理函数收到的第一条消息   可以在这个消息内,做初始化或者穿件子窗口

Win32 Windows编程 四

一 窗口注册和窗口创建的过程 1  Win32窗口程序创建步骤 1.1 WinMain入口函数的定义 1.2 WindowsProc 函数的定义 1.3注册窗口 RegisterClass/RegisterClassEx 1.4创建窗口 CreateWindow /CreateWindowEx 1.5 显示刷新窗口 ShowWindow/UpdateWindow 1.6 消息处理 GetMessage /DisptchMessage 1.7 窗口退出 WM_DESTROY:PostQuitMes