简单的WIN32屏保开发制作(可播放视频)

本文介绍如何在VS环境下,不依赖ScrnSave.lib从零开始开发一个简单的WIN32屏保程序,重点讲解如何实现操作系统自动运行、全屏显示以及用户输入即退出的功能。通过创建全屏窗口,监听用户输入事件,结合mciSendString函数关闭视频,完成屏保的基本框架。

本文不同于VC下使用ScrnSave.lib进行屏保制作的方式,

而是在VS下以其内在原理,从无到有进行一个简单的WIN32屏保开发,

只要你拥有一些简单的WIN32程序编写的经验,便可以很轻松的明白并编写出此类屏保。


首先,要实现一个屏保,我们需要实现三件事。

  • 操作系统自动运行程序
  • 全屏幕的窗口
  • 用户输入即退出
只要实现了这三件事,那么便可以称之为简单意义上的屏保了。


操作系统自动运行程序:

       这很幸运,因为只要将用户程序的后缀名改为.scr, 将其放到正确的系统目录下,便可以成为

真正的屏幕保护程序,在空闲时自动得到操作系统的调用,而不用我们花大量时间编写代码。


全屏幕的窗口:

        这个也很简单,只要我们将窗口创建为全屏显示,那么自然也没有太大问题了。

你可以这样做:

    hwnd = CreateWindow(L"BeyondScrnSaver", NULL,                                             //注意这里初始化HWND_DESKTOP,
            WS_POPUP | WS_VISIBLE, CW_USEDEFAULT, CW_USEDEFAULT, 0,   //因为在窗口上播放视频,窗口显示太快会看到先显示背景,所以我先将其大小调整为0
            0, HWND_DESKTOP, NULL, hInstance, NULL);

用户输入即退出:

        只要在消息窗口过程中进行鼠标移动,点击,以及键盘输入事件的处理,便可以实现该退出过程。


好了,讲了这么多,现在我们从实现一个屏幕保护程序的窗口框架开始吧....

/*---------------------------------------------------------------------------------
【Cpp文件】:ScreenMain.cpp          Created by Beyond Ray,2014年4月
(描述):使用天下叁CG《墨龙纪》制作成简单的屏保
-----------------------------------------------------------------------------------*/

//------------------------【头文件】--------------------------------
#include 
#include 								//使用swprintf_s函数所需的头文件
#include "resource.h"							//资源文件(只用于图标)

//------------------------【全局函数声明】--------------------------
LRESULT CALLBACK	WndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam);			//主窗口过程函数

int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nShowCmd)
{
	HWND hwndFrameWnd = 0;
	HWND hwnd = 0;
	RECT rect;

	//---------------------------【设计一个窗口类】------------------------------
	WNDCLASSEX wndClass = { 0 };					//用WINDCLASSEX定义一个窗口类,并初始化
	wndClass.cbSize = sizeof(WNDCLASSEX);			//设置结构体的字节数大小
	wndClass.style = CS_HREDRAW | CS_VREDRAW;		//设置窗口的样式
	wndClass.lpfnWndProc = WndProc;					//设置指向窗口过程函数的指针
	wndClass.cbClsExtra = 0;						//窗口类的附加内存,取0就可以了
	wndClass.cbWndExtra = 0;						//窗口的附加内存,依然取0就行了
	wndClass.hInstance = hInstance;					//指定包含窗口过程的程序的实例句柄。
	wndClass.hIcon = (HICON)LoadIcon(hInstance, MAKEINTRESOURCE(IDI_ICON1));    //本地加载自定义ico图标
	wndClass.hCursor = LoadCursor(NULL, IDC_ARROW); //指定窗口类的光标句柄。
	wndClass.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH);  //指定一个白色画刷句柄	
	wndClass.lpszMenuName = NULL;					//用一个以空终止的字符串,指定菜单资源的名字。
	wndClass.lpszClassName = L"BeyondScrnSaver";	//用一个以空终止的字符串,指定窗口类的名字。
	
	//----------------------------【注册一个窗口类】------------------------------
	if (!RegisterClassEx(&wndClass))
		return -1;

	//-----------------------------【创建一个窗口】-------------------------------
	hwnd = CreateWindow(L"BeyondScrnSaver", NULL,					//注意这里初始化HWND_DESKTOP,并且在最初大小为0,
			WS_POPUP | WS_VISIBLE, CW_USEDEFAULT, CW_USEDEFAULT, 0, //以防止视频还没播放前看到白屏
			0, HWND_DESKTOP, NULL, hInstance, NULL);
			
	//窗口更新显示
	MoveWindow(hwnd, 0, 0, GetSystemMetrics(SM
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值