1.新建一个对话框的MFC工程;
2.将对话框的Border属性设置为None;这是为了对话框程序的可全屏显示,实现屏幕保护程序;
3.头文件添加类成员变量声明和函数声明:
CPoint curpt;
int x;
int y;
int idirect;
int a;
int b;
void DrawBitmap(CDC &dc, int nIndexBit);
4.在OnInitDialog函数中将屏幕设置大小,并对一些变量进行初始化,代码如下:
BOOL CScrnSaverProductDlg::OnInitDialog()
{
CDialog::OnInitDialog();
// Add "About..." menu item to system menu.
// IDM_ABOUTBOX must be in the system command range.
ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);
ASSERT(IDM_ABOUTBOX < 0xF000);
CMenu* pSysMenu = GetSystemMenu(FALSE);
if (pSysMenu != NULL)
{
CString strAboutMenu;
strAboutMenu.LoadString(IDS_ABOUTBOX);
if (!strAboutMenu.IsEmpty())
{
pSysMenu->AppendMenu(MF_SEPARATOR);
pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);
}
}
// Set the icon for this dialog. The framework does this automatically
// when the application's main window is not a dialog
SetIcon(m_hIcon, TRUE); // Set big icon
SetIcon(m_hIcon, FALSE); // Set small icon
ShowCursor(false);
CRect rc(0,0,GetSystemMetrics(SM_CXSCREEN),GetSystemMetrics(SM_CYSCREEN));
::GetCursorPos(&curpt);
this->MoveWindow(rc);
SetTimer(1,500,NULL);
x=0;y=0;
a=0;b=0;
idirect=0;
return TRUE;
}
5.添加对WM_MOUSEMOVE消息的实现函数,实现移动鼠标关闭程序,代码如下:
void CScrnSaverProductDlg::OnMouseMove(UINT nFlags, CPoint point)
{
int moveptx=point.x-curpt.x;
int movepty=point.y-curpt.y;
if(moveptx+movepty>3)
PostMessage(WM_CLOSE);
CDialog::OnMouseMove(nFlags, point);
}
6.在OnPaint函数中实现黑色背景的绘制,代码入下:
void CScrnSaverProductDlg::OnPaint()
{ 灰色代码处为注释部分
CPaintDC dc(this);
CBrush brush(RGB(0,0,0));
CRect rect;
GetClientRect(rect);
dc.FillRect(&rect,&brush);
}
7.关闭窗口时关闭程序,代码入下:
void CScrnSaverProductDlg::PostNcDestroy() //销毁窗口
{
KillTimer(1);
CDialog::PostNcDestroy();
}
8.设置定时器,在定时器内通过自定义函数绘制图片,代码如下:
void CScrnSaverProductDlg::OnTimer(UINT nIDEvent)
{
KillTimer(1);
CClientDC dc(this);
static nIndexBit=0;
if(nIndexBit>3)
nIndexBit=0;
DrawBitmap(dc, nIndexBit++);
SetTimer(1,500,NULL);
CDialog::OnTimer(nIDEvent);
}
9.自定义DrawBitmap函数,实现位图的绘制,代码如下:
void CScrnSaverProductDlg::DrawBitmap(CDC &dc, int nIndexBit)
{
CDC dcmem;
dcmem.CreateCompatibleDC(&dc);
CBitmap m_Bitmap;
m_Bitmap.LoadBitmap(IDB_BITMAP1+nIndexBit);
dcmem.SelectObject(m_Bitmap);
BITMAP bmp;
GetObject(m_Bitmap,sizeof(bmp),&bmp);
int iscreenx=GetSystemMetrics(SM_CXSCREEN);
int iscreeny=GetSystemMetrics(SM_CYSCREEN);
if(a>iscreenx/2)a=0;
if(b>iscreeny/2)b=0;
if(idirect>1)idirect=0;
switch(idirect)
{
case 0:
for(x=bmp.bmWidth;x>0;x--)
{
dc.BitBlt(a,b,bmp.bmWidth,bmp.bmHeight,&dcmem,x,y,SRCCOPY);
}
break;
case 1:
for(y=bmp.bmHeight;y>0;y--)
{
dc.BitBlt(a,b,bmp.bmWidth,bmp.bmHeight,&dcmem,x,y,SRCCOPY);
}
break;
}
idirect++;
a+=60;
b+=20;
Sleep(2000);
dc.BitBlt(0,0,iscreenx,iscreeny,&dcmem,0,0,BLACKNESS);
dcmem.DeleteDC();
}
效果不方便添加,自己去实现吧。。。
补充:对了,忘记告诉大家怎样添加到系统里了,把Debug里的.exe程序后缀名改为.scr,并拷贝到Windows下的System32下,在桌面---属性---屏幕保护程序中就可以看到你自己的作品了
MFC中简易屏幕保护程序的实现相关推荐
- linux替换屏幕保护进程,有没有一个体面的方式来阻止linux中的屏幕保护程序?...
我正在寻找一种体面的,不跛脚的方式来禁止xscreensaver,kscreensaver或gnome-screensaver,哪些可能正在运行,最好是以屏幕保护程序的方式,而且它绝对肯定必须执行得很 ...
- w7计算机屏幕保护设置在哪,Win7屏保怎么设置?Win7屏幕保护程序如何打开?
Win7屏保怎么设置?Win7系统中的屏幕保护程序一般是从桌面右键进入的,但很多用户使用的是Win7家庭版系统,右键没有个性化设置,这种情况只能从控制面板中进入,至于如何设置屏幕保护,相信用户进入之后 ...
- c语言输出cad scr文件,屏幕保护程序文件scr关联被autocad修改为CAD脚本的恢复
修改SCR文件的关联属性.因为在"我的电脑→工具→文件夹选项→文件类型"选项卡里找不到SCR文件类型,所以只能通过"注册表编辑器"来手动修改:首先定位到HKEY ...
- 询问HTG:白噪声屏幕保护程序,有效的文件命名以及从密码泄露中恢复
Once a week we share three of the questions we've answered from the Ask HTG inbox with the greater r ...
- macOS Big Sur 11.3中添加了Hello新的屏幕保护程序
macOS Big Sur 11.3包含一个隐藏的" Hello"屏幕保护程序,该屏幕保护程序似乎是为新iMac型号设计的,但也可以安装在任何运行11.3更新的Mac上. 正如9t ...
- flickr搜索_从提示框:DIY笔,将旧光盘回收到游戏中以及在Flickr中搜索Kindle屏幕保护程序...
flickr搜索 This week we're taking a look at how to make your own stylus, turning your old CDs or DVDs ...
- 苹果在macOS Big Sur 11.3中添加了新的屏幕保护程序——“Hello”
macOS Big Sur 11.3包含一个隐藏的" Hello"屏幕保护程序,该屏幕保护程序似乎是为新iMac型号设计的,但也可以安装在任何运行11.3更新的Mac上. 正如9t ...
- 如何停止屏幕保护程序?
如何停止屏幕保护程序? <script type="text/javascript"> </script> <script src="htt ...
- html文件设置成mac屏保,Mac怎么设置屏幕保护?如何设置Mac屏幕保护程序?
Mac电脑如何设置屏幕保护程序?屏保是我们显示个性的重要途径,也是保护我们的电脑安全的一个重要方法.MAC用户想要修改自己的屏保该怎么办呢?今天PC6小编就教大家如何在Mac系统下设置桌面背景以及屏幕 ...
最新文章
- 【Cocos2d-x】开发实战-Cocos中的字符串、标签和中文乱码
- 百度推出飓风算法,严厉打击恶劣采集
- Linux 操作系统原理 — cgroups 进程资源配额与管理
- #035 大数阶乘 PTA题目6-10 阶乘计算升级版 (20 分)
- hdu 3395(费用流,二分图的最大权匹配)
- xboxone硬盘坏的表现_【32期】硬盘损坏的根源居然是——它!
- python openstack rabbitmq_OpenStack--Rabbitmq组件消息队列
- 使用生成器创建新的迭代模式
- 分类树/装袋法/随机森林算法的R语言实现
- 基于display:table的CSS布局
- 安装工程造价课程设计_安装工程造价课程设计的图纸-上海装修报价
- python assert_Python中何时使用断言 assert
- ThinkPHP 漏洞利用工具
- Java程序员 面试如何介绍项目经验?
- roboware studio教程_2.2.RoboWare Studio安装及使用
- 微信开发之微信支付(商户平台提供的方式)
- [TF进阶] 卷积神经网络
- 女性社交电商系统:聚焦女用户 收割电商半壁江山
- 分析亚洲手机游戏市场现状--中国篇、韩国篇以及日本篇
- 怎么提取音乐中的伴奏?分享一个超好用的方法
热门文章
- 基于蚂蚁-遗传优化算法的路径规划问题(Matlab代码实现)
- python办公(1)python来代替sh
- 学习matplotlib.pyplot笔记,常用contourf
- 【CentOS7安装RabbitMQ及常用命令】
- JBoss Marshalling编解码
- CMD下文件copy命令
- 基于STM32的AD7699、(AD7689、AD7949、AD7682)芯片驱动
- 冒泡数组实现和冒泡数组的改进以及插入法排序
- 【XCP学习笔记】1 XCP协议初步
- NodeJS+Vue3+D3