📄 myscreen.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 + -