⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 myscreen.cpp

📁 让我们自己动手做屏保
💻 CPP
字号:
#include <windows.h>
#include <scrnsave.h>
#include <math.h>

UINT wTimer = 0;		//计时器全局变量
void DrawLines(HWND);	//屏保的画折线代码

//无需注册子控件窗口类型,因此直接返回TRUE
BOOL WINAPI RegisterDialogClasses (HANDLE hInst)
{
	return TRUE;
}

//对话框在单击OK或Cancel时关闭
BOOL WINAPI ScreenSaverConfigureDialog (HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
{
	switch(message)
	{
	case WM_COMMAND:
		switch(LOWORD(wParam))
		{
		case IDOK:
		case IDCANCEL:
			EndDialog(hDlg, 0);
			break;
		}
		break;
		default:
			return FALSE;
	}
	return TRUE;
}

//创建时启动定时器,退出时停止定时器
LRESULT WINAPI ScreenSaverProc (HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
	switch (message)
	{
	case WM_CREATE: 	
		wTimer = SetTimer(hWnd, 0, 30, NULL);  
		break;
	case WM_TIMER:
		DrawLines(hWnd);
		break;
	case WM_DESTROY:
		if (wTimer)
			KillTimer(hWnd, wTimer);
		break;
	}  
	return DefScreenSaverProc(hWnd, message, wParam, lParam);//调用DefScreenSaverProc而非DefWindowProc
}

//画出美妙折线的函数,可以发挥想象画出你自己的屏保
void DrawLines(HWND hWnd)
{
	static double dPetals=2.0;
	HDC hWindowDC = GetDC(hWnd);
	if(hWindowDC)
	{
		RECT rc;
		GetClientRect(hWnd, &rc);
		HDC hMemDC = CreateCompatibleDC(hWindowDC);//使用内存DC缓冲处理
		HBITMAP hBitmap = CreateCompatibleBitmap(hWindowDC,rc.right,rc.bottom);//内存DC需要的BITMAP句柄
		HGDIOBJ hOldBitmap = SelectObject(hMemDC,hBitmap);
		PatBlt(hMemDC,0,0,rc.right,rc.bottom,BLACKNESS);//写成黑屏
		
		double mx = rc.right>>1;
		double my = rc.bottom>>1;
		HPEN hPen = CreatePen(PS_SOLID,1,RGB(0,255,0));//绿色的1个象素的笔
		HGDIOBJ hOldPen = SelectObject(hMemDC,hPen);
		double sx = mx/2;
		double sy = my/2;
		double sAngle = 0.0;
		for(int i=0;i<(int)dPetals;i++)
		{
			double s1a = sin(sAngle);
			double c1a = cos(sAngle);
			double s2a = sin(sAngle*dPetals);
			double c2a = cos(sAngle*dPetals);
			int x = (int)(mx+sx*c1a+sx*c2a);
			int y = (int)(my+sy*s1a-sy*s2a);
			if(i==0)
				MoveToEx(hMemDC,x,y,NULL);
			else
				LineTo(hMemDC,x,y);
			sAngle += 0.01745;	//1度的值,pi/180
		}
		dPetals += 0.1;

		BitBlt(hWindowDC,0,0,rc.right,rc.bottom,hMemDC,0,0,SRCCOPY);//将内存DC拷贝至窗口DC
		SelectObject(hMemDC,hOldPen);
		DeleteObject(hPen);//删除笔对象
		SelectObject(hMemDC,hOldBitmap);
		DeleteObject(hBitmap);//删除BITMAP对象
		DeleteDC(hMemDC);//删除内存DC
	}
	ReleaseDC(hWnd,hWindowDC);//释放窗口DC
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -