深入浅出屏幕保护程序编程

C++程序如何禁止或暂停Windows的自动屏保、休眠等节电模式 如何禁止或暂停Windows的自动屏保、休眠等节电模式 ...... 阅读详情
深入浅出屏幕保护程序编程  作者:董晓 发布时间:2001/03/28
 
文章摘要:
  现在V程序画面越来越精美,功能越来越强大,可以提供图象,动画,音频,视频等所有的多媒体功能。尽管我们可以很容易获得漂亮的屏幕保护程序,但自己制作屏幕保护程序对用户也许更有吸引力,下文便对如何制作屏幕保护程序做了详细介绍。
       

正文: 



深入浅出屏幕保护程序编程
  


  读者对屏幕保护程序已经相当熟悉了。去年泰坦尼克号的屏幕保护程序风行了全世界,足见其魅力。有的屏幕保护程序功能十分强大,可以提供图象,动画,音频,视频等所有的多媒体功能。尽管可以很容易获得漂亮的屏幕保护程序,但拥有自己的屏幕保护程序对用户也许更有吸引力。
  VC5.0/6.0是开发屏幕保护程序的好工具。静态链接库SCRNSAVE.LIB对屏幕保护程序提供了支持。SCRNSAVE.LIB包含了建立屏幕保护程序的主程序和缺省功能,用户可以方便地使用SDK进行编程并与之连接。尽管SDK编程相对MFC麻烦,但编写相对简单的屏幕保护程序却相当容易甚至比用MFC编程更简单。
  也可以使用MFC编写屏幕保护程序。但遗憾的是MFC不支持SCRNSAVE.LIB,必须手工完成原来由SCRNSAVE.LIB提供的功能,比较麻烦和不好理解。不过,编写复杂的屏幕保护程序时,MFC对于显示模块和对话框处理可以提供比SDK方便得多的功能。为简单起见先介绍如何使用SDK编写屏幕保护程序。

一. 屏幕保护程序和SCRNSAVE.LIB

  先从开发者的角度对屏幕保护程序说明如下:
  首先,屏幕保护程序是Win32 API 支持一种特殊的应用程序并由系统自动激活。其机制是当条件满足时,系统向当前活动窗口发出字参数 wParam 值为SC_SCREENSAVE 的WM_SYSCOMMAND消息,然后由当前活动窗口执行SYSTEM.INI文件中[boot]区指定的屏幕保护程序。

  屏幕保护程序激活的条件是
  1. 在规定时间内没有鼠标或键盘输入.
  2. 当前的活动窗口是标准的WINDOWS应用程序。因为非WINDOWS应用,不会理睬WM_SYSCOMMAND消息。
  3. 显然,如果当前活动的程序接管了字参数 wParam 值为SC_SCREENSAVE 的WM_SYSCOMMAND 消息并且不传递到 DefWindowProc函数就可以禁止屏幕保护程序。这对某些运行中不愿意被打断的程序如视频播放,光盘刻录程序特别有用。

  其次,可以在控制面板的显示器中选择需要的屏幕保护程序,并可以配置屏幕保护程序的参数。屏幕保护程序应该提供配置屏幕保护程序的对话框。

  再次,屏幕保护程序有特别的输出函数,资源定义和变量声明。SCRNSAVE.LIB包含了建立屏幕保护程序的主程序。屏幕保护程序启动时SCRNSAVE.LIB自动创建一全屏窗口,并描述窗口类为无光标的满黑屏。
  用户编写的屏幕保护程序必须包含三个基本函数ScreenSaverProc,ScreenSaverConfigureDialog 和RegisterDialogClasses 并与SCRNSAVE.LIB连接。
  1.ScreenSaverProc 窗口函数处理特定的消息并把未处理的消息传递给SCRNSAVE.LIB 。ScreenSaverProc 一般处理以下消息:
  WM_CREATE 读取.INI或注册表的初始化数据,设置定时器以及其他初始化操作。
  WM_ERASEBKGND 擦除背景为下一步绘图作准备。
  WM_TIMER 进行绘图输出。用户可以实现自己的动画功能以及其他操作。
  WM_DESTROY 删除定时器以及其他对象
  ScreenSaverProc 把未处理的消息传递到SCRNSAVE.LIB中的 DefScreenSaverProc函数 处理。由它完成许多复杂和关键的操作比如何时激活,何时关闭等,大大方便了屏幕保护程序的编写。
  2.ScreenSaverConfigureDialog函数处理屏幕保护程序配置对话框。该对话框由控制面板的显示器设置程序调用。用户输入的配置数据输出到.INI或注册表中。
  3. RegisterDialogClasses函数登记屏幕保护程序配置对话框的窗口类。如果不使用特殊的窗口或控件,可以简单地返回TRUE。

  另外,编写屏幕保护程序还有一些原则。
  1. 为使控制面板能够识别,屏幕保护程序的扩展名必须改为.SCR并存放在WINDOWS目录下。
  2. 屏幕保护程序的图标(ICON)在资源文件中必须定义为ID_APP。ID_APP由系统的SCRNSAVE.H.定义。
  3. 资源文件中必须包含一描述字符串。该字符串用于控制面板显示屏幕保护程序的名字。它必须位于字符串表的首位。SCRNSAVE.H.定义其ID为1。
  4. 资源文件中屏幕保护程序配置对话框的ID必须为DLG_SCRNSAVECONFIGURE。它由系统的SCRNSAVE.H.定义。

二.编程实例

  1.最小的屏幕保护程序MiniSaver。这是一个仅包含最基本模块的屏幕保护程序,运行时在屏幕上显示一行活动的文字。步骤如下:
  第一步,在VC5.0/6.0中建立32位应用工程(不选MFC WIZARD EXE).建立如下的MiniSaver.CPP文件:
#include
#include
// SCRNSAVE.LIB的头文件
#include "resource.h"
//声明三个基本的函数
LRESULT WINAPI ScreenSaveProc
(HWND,UINT,WPARAM,LPARAM);
BOOL WINAPI ScreenSaveConfigureDialog
(HWND,UINT,WPARAM,LPARAM);
BOOL WINAPI RegisterDialogClasses(HINSTANCE);
//定义三个基本的函数
LRESULT WINAPI ScreenSaverProc
(HWND hWnd, UINT message, WPARAM wParam,
LPARAM lParam)
{ HDC hDC;
RECT rc;
static int xpos;//文本的横坐标
static char SlideText[]="欢迎使用屏幕保护程序!";
static UINT timerID;//定时器
switch (message)
{
case WM_CREATE:
xpos=0;
timerID=SetTimer(hWnd,1,250,NULL);//设置定时器
break;

case WM_ERASEBKGND:
//空操作,交由DefScreenSaverProc处理
break;
case WM_TIMER:
hDC=GetDC(hWnd);
//清屏
SetRect(&rc,0,0,GetSystemMetrics(SM_CXSCREEN),
GetSystemMetrics(SM_CYSCREEN))
FillRect(hDC,&rc,GetStockObject(BLACK_BRUSH));
//输出文本
SetTextColor(hDC,RGB(255*rand(),
255*rand(),255*rand()));
SetBkColor(hDC,RGB(0,0,0));
TextOut(hDC,xpos,GetSystemMetrics(SM_CYSCREEN)/2,
SlideText,strlen(SlideText));
//移动文本的横坐标
xpos=(xpos+10)%GetSystemMetrics(SM_CXSCREEN);
ReleaseDC(hWnd,hDC);
break;

case WM_DESTROY:
KillTimer(hWnd,timerID);//删除定时器
PostQuitMessage (0);
return 0;
}
return DefScreenSaverProc
(hWnd,message,wParam,lParam);
}

BOOL WINAPI ScreenSaverConfigureDialog
(HWND hWnd,UINT message,WPARAM wParam,
LPARAM lParam)
{//暂时不需要配置对话框,仅返回FALSE
return FALSE;
}

BOOL WINAPI RegisterDialogClasses
(HINSTANCE hInstance)
{//一般不需要,仅返回TRUE
return TRUE;
}


  第二步,定义资源文件MiniSaver.rc。在VC环境下生成一图标,其ID为ID_APP。向字符串表加入ID为IDS_DESCRIPTION字符串"MiniSaver",并作为字符串表第一项
  第三步,编译连接并将生成的MiniSaver.EXE更名为MiniSaver.SCR拷入WINDOWS目录。注意, 编译前一定要在Project菜单的Setting中的Link选项中加上SCRNSAVE.LIB库。
  第四步,控制面板的显示器设置中选择屏幕保护程序MiniSaver就可以使用了。注意不要急于配置屏幕保护程序,因为MiniSaver还有没提供配置对话框。

  2.较完整的屏幕保护程序MySaver。该屏幕保护程序提供了配置对话框和关于对话框,并且使用了图象显示。读者可以将自己喜爱的图象加到资源中。
  第一步,在VC5.0/6.0中建立32位应用工程(不选MFC WIZARD EXE)并定义资源文件MiniSaver.rc。
    在VC环境下生成一图标,其ID为ID_APP。
    向字符串表加入ID为IDS_DESCRIPTION字符串"MiniSaver",并作为字符串表第一项。加入ID为idsAPPName
    字符串"Screen Saver.MySaver",说明见后面程序。
    加入ID为IDB_BITMAP1的位图
    加入ID为DLG_ABOUT对话框。仅有一ID为IDOK的按钮
    加入ID为ID_APP。此对话的ID由SCRNSAVE.H定义且只能为DLG_SCRNSAVECONFIGURE。其中有ID为IDC_EDIT
    的EDIT控件,ID为IDOK,IDCANCEL和IDABOUT的按钮。
    值得注意的是RESOURCE.H定义的ID_APP和DLG_SCRNSAVECONFIGURE可能与SCRNSAVE.H预定义的值冲突,可
    手动地将RESOURCE.H中的ID_APP设为100,DLG_SCRNSAVECONFIGURE设为2003即可。
  第二步,建立如下的MySaver.CPP文件:
#include #include

#include "resource.h"
//声明三个基本的函数
LRESULT WINAPI ScreenSaveProc
(HWND,UINT,WPARAM,LPARAM);
BOOL WINAPI ScreenSaveConfigureDialog
(HWND,UINT,WPARAM,LPARAM);
BOOL WINAPI RegisterDialogClasses(HINSTANCE);
BOOL WINAPI AboutDialog(HWND,UINT,WPARAM,LPARAM);
//定义全局变量
char szIniFileName[]="control.ini";
//屏幕保护程序配置数据存放在control.ini文件
char szSection[32];
//屏幕保护程序配置数据在control.ini文件位置区名称
char szEntry[]="Slide Text:";
//屏幕保护程序配置数据项名称
char SlideText[256];
//屏幕保护程序配置数据,这里是文本内容
//定义三个基本的函数
LRESULT WINAPI ScreenSaverProc
(HWND hWnd,UINT message, WPARAM wParam,
LPARAM lParam)
{ static HBITMAP hBmp;//位图句柄
HDC hDC,hMemDC;//hMemDC是内存设备,缓存位图。
RECT rc;
static int xpos=0;
static UINT timerID;
switch (message)
{
case WM_CREATE:
//文件位置区名称szSection赋值为资源
idsAPPName。其中hMainInstance为//SCRNSAVE.LIB
定义的屏幕保护程序实例句柄
LoadString(hMainInstance,idsAPPName,
szSection,sizeof(szSection));
strcpy(SlideText,"欢迎使用屏幕保护程序!");
//读control.ini文件中[Screen Saver.MySaver]
区的配置数据到SlideText
GetPrivateProfileString(szSection,szEntry,
SlideText,SlideText,
sizeof(SlideText),szIniFileName);
//取位图
hBmp=LoadBitmap(hMainInstance,
MAKEINTRESOURCE(IDB_BITMAP1));
timerID=SetTimer(hWnd,1,250,NULL);
break;

case WM_ERASEBKGND:
hDC=GetDC(hWnd);
//显示位图
hMemDC=CreateCompatibleDC(hDC);
SelectObject(hMemDC,hBmp);
SetRect(&rc,0,0,GetSystemMetrics(SM_CXSCREEN),
GetSystemMetrics(SM_CYSCREEN)-25);
BitBlt(hDC,rc.top,rc.left,rc.right,rc.bottom,
hMemDC,rc.top,rc.left,SRCCOPY);
//清除底行,为文本显示作准备。
SetRect(&rc,0,GetSystemMetrics(SM_CYSCREEN)-25
GetSystemMetrics(SM_CXSCREEN),
GetSystemMetrics(SM_CYSCREEN));
FillRect(hDC,&rc,GetStockObject(BLACK_BRUSH));
ReleaseDC(hWnd,hDC);
DeleteDC(hMemDC);
return 1;

case WM_TIMER:
hDC=GetDC(hWnd);
//清除底行
SetRect(&rc,0,GetSystemMetrics(SM_CYSCREEN)-25,
GetSystemMetrics(SM_CXSCREEN),
GetSystemMetrics(SM_CYSCREEN));
FillRect(hDC,&rc,GetStockObject(BLACK_BRUSH));
//输出文本
SetTextColor(hDC,RGB(255*rand(),
255*rand(),255*rand()));
SetBkColor(hDC,RGB(0,0,0));
TextOut(hDC,xpos,GetSystemMetrics(SM_CYSCREEN)-25,
SlideText,strlen(SlideText));
xpos=(xpos+10)%GetSystemMetrics(SM_CXSCREEN);
ReleaseDC(hWnd,hDC);
break;

case WM_DESTROY:
DeleteObject(hBmp);
KillTimer(hWnd,timerID);
PostQuitMessage (0);
return 0;
}
return DefScreenSaverProc
(hWnd,message,wParam,lParam);
}

BOOL WINAPI ScreenSaverConfigureDialog
(HWND hWnd,UINT message,WPARAM wParam,
LPARAM lParam)
{ switch (message)
{
case WM_INITDIALOG:
LoadString(hMainInstance,idsAPPName,
szSection,sizeof(szSection));
strcpy(SlideText,"欢迎使用屏幕保护程序!");
GetPrivateProfileString(szSection,
szEntry,SlideText,
SlideText,sizeof(SlideText),szIniFileName);
SetDlgItemText(hWnd,IDC_EDIT,SlideText);
SetFocus(GetDlgItem(hWnd,IDC_EDIT));
return FALSE;

case WM_COMMAND:
switch(wParam)
{
case IDOK:
//取EDIT控件文本数据并写入control.ini文件
GetDlgItemText(hWnd,IDC_EDIT,
SlideText,sizeof(SlideText));
WritePrivateProfileString(szSection,
szEntry,SlideText,szIniFileName);
EndDialog(hWnd,TRUE);
return TRUE;

case IDCANCEL:
EndDialog(hWnd,FALSE);
return TRUE;

case IDABOUT:
//调用ABOUT对话框
DialogBox(hMainInstance,
MAKEINTRESOURCE(DLG_ABOUT),
hWnd,(FARPROC)AboutDialog);
return TRUE;
}
break;
}
return FALSE;
}

BOOL WINAPI RegisterDialogClasses
(HINSTANCE hInstance)
{
return TRUE;
}

BOOL WINAPI AboutDialog
(HWND hWnd,UINT message,WPARAM wParam,
LPARAM lParam)
{
switch (message)
{
case WM_INITDIALOG:
return TRUE;

case WM_COMMAND:
switch(wParam)
{
case IDOK:
EndDialog(hWnd,TRUE);
return TRUE;
}
break;
}
return FALSE;
}

   最后,编译连接并将生成的MiniSaver.EXE更名为MiniSaver.SCR拷入WINDOWS目录。此时可以使用配置对话框了。


作者会员名:heliking

 
VC调用scrnsave_lib来写屏保程序(变幻螺旋线) VC调用scrnsave_lib来写屏保程序(变幻螺旋线),网上转的别人的。 立即下载

相关推荐

scrnsave 屏幕保护

scrnsave 实现对桌面的黑屏,有他一定的使用价值。

屏幕保护程序命令行参数

本文介绍了标记为 4.0 或更高版本的 Win32 屏幕保护程序命令行参数。 原始产品版本: Win32 屏幕保护程序原始 KB 编号: 182383 Windows通过命令行参数与屏幕保护程序进行通信。 ScrnSave.lib 库为编写以使用它的屏幕保护程序处理此操作,但标记为 4.0 或更高版本的其他 Win32 屏幕保护程序必须处理以下命令行参数: 控制台复制 ScreenSaver - Show the Settings dialog box. ScreenS...

GuoGuoABC 1405

VC 屏幕保护scr 屏保程序范例.rar

VC 实现屏幕保护程序,相信屏保程序大家都不陌生吧,本程序可编译生成 scr格式的屏保程序,当然,只是大致的展示这类程序的实现过程,要想真正成为屏保,还要做一些其它的功课,比如动画效果之类的。其实原理还是挺简单的,由计数器调用DrawBitmap()函数,切换图片;   注意,下面两个函数中的IDB_BITMAP1, dc.BitBlt(0,0,800,600……以及if(nIndexBit>=5)中的有关数据依据你的bmp图片个数、尺寸、位置不同而不同,我是选择了5张800x600的bmp图片。ID值是连续的,IDB_BITMAP1最小,因为是屏保程序,因此响应键盘、鼠标是屏幕保护程序不可缺少的,还涉及到一些计时器添加、删除的相关技巧。

win32 屏保开发

<br />需要使用的静态库:scrnsave.lib;<br /> 需要包含的头文件:scrnsave.h<br /> 需要实现的三个函数:<br />(1)屏保的消息处理函数<br /> LRESULT WINAPI ScreenSaverProc(HWND,UINT,WPARAM,LPARAM);<br />(2)屏保配置对话框<br /> BOOL WINAPI ScreenSaverConfigureDialog(HWND,UINT,WPARAM,LPARAM);<br />(3)登记屏幕

kinghzking的专栏 2389

VC++ MFC 地球 屏保

使用球面化技术,关于球面化,可到我的博客上看看。 本程序基于MFC对话框,没有使用到scrnSave.lib,完整实现屏保,包括预览,设置。 郁闷啊,360竟然说是病毒,NND!

屏保程序,VC写的,非常稳定

屏保程序,不是scrnsave_lib写的 可以播放图片

让应用程序禁止Windows屏幕保护

----如果在你的程序中需要一个很长的时间段来进行大量的数据处理,这段时间长得足以使Windows因检测不到用户动作而激活屏幕保护程序,一旦启动了屏幕保护程序,你的程序运行实际上就变慢了,这会大大影响程序的正常运行。有没有一种方法,使程序在进行长时间的数据处理前关掉屏幕保护呢?答案是肯定的。Windows在启动屏幕保护程序前会向当前激活的应用程序发送WM_SYSCOMMAND消息,其中wParam

xiaoyanzi的专栏 2149

visual c++编写.scr屏幕保护程序 黑客帝国屏保 源代码.zip

visual c++编写.scr屏幕保护程序 黑客帝国屏保 源代码.zip

Hibernate3主要的新特性(转载)

Hibernate3主要的新特性(转载) <!--<rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"xmlns:dc="http://purl.org/dc/elements/1.1/"xmlns:trackback="http://madskills.com/public/xml/rss/mod

疯猫 1052

从CTF到实战:Frida Hook无导出SO函数的3种特殊姿势

本文深入探讨了在移动安全逆向工程中,如何利用Frida Hook无导出SO函数的三种高级技巧:字符串引用定位法、调用栈回溯法和内存特征码扫描。针对安卓So层加固和混淆场景,文章结合CTF赛题与实战案例,详细解析了每种方法的原理、实现步骤与适用场景,为安全研究人员提供了从理论到实践的完整解决方案。

jenkins8butler的博客 516

整车CAN网络错误帧排查方法

本文围绕 CAN 总线错误帧展开,先剖析其产生原因,涵盖物理连接与硬件问题、电磁兼容性问题、总线负载与设计问题及配置问题;再阐述位错误、填充错误等 5 类错误帧类型;接着说明错误帧与总线 BUSOFF 的关系,解析主动 / 被动错误状态及 BUSOFF 的触发与恢复;还结合整车故障案例做实际分析,指出错误帧根源多为线束或控制器问题。最后总结,强调错误帧是 CAN 协议保障高鲁棒性的机制,掌握相关知识助工程师提升 CAN 网络处理能力。

车载网络小D的博客 1246

Hibernate 3.3主要的新特性包括

  Hibernate 3.3 主要的新特性包括: 重新设计、模块化 JARs—— 现在有很多定义良好的 JARs ,而不是一个大的 JAR 文件 —— 这使得用户可以轻松了解依赖关系并将其最小化,同时还使得组织可以定制 Hibernate ,移除不需要的部分 基于 Maven 的构建 —— 现在 Hibernate 使用 Apache Maven 构建系统进行构...

SNS创造者/java记录 150

Cadence Virtuoso IC617:从零构建传输门与反相器的Schematic设计实战

本文详细介绍了使用Cadence Virtuoso IC617进行传输门与反相器Schematic设计的完整流程,包括环境准备、原理图绘制、Symbol创建、仿真验证及实用技巧。通过分步指导和实战经验分享,帮助初学者快速掌握集成电路设计基础,提升EDA工具应用能力。

weixin_29194693的博客 597

Hibernate 3.3主要的新特性包括3

spring-hibernate.xml 的代码: &lt; annotations 的 配置 &gt; 1.  &lt;?xml version= "1.0"  encoding= "UTF-8" ?&gt;   2.  &lt;beans xmlns= "http://www.springframework.org/schema/beans"  x...

SNS创造者/java记录 146

基于 MATLAB 的综合能源系统建模案例 

电平衡约束:P_{gt}(t)+P_{grid}(t)-P_{eb}(t)-P_{load}(t)=0,其中 P_{grid}(t) 为与外部电网的交互功率(正表示购电,负表示售电)。- 电锅炉的热输出功率 Q_{eb} 与输入电功率 P_{eb} 的关系为:Q_{eb}=\eta_{eb}\times P_{eb},其中 \eta_{eb} 为电锅炉的热效率。- 燃气轮机的余热回收功率 Q_{gt} 与发电功率也存在一定关系,例如:Q_{gt}=c\times P_{gt},c 为余热回收比例系数。

qq_57128262的博客 1394

常用的数据结构以及常用的算法

常用的数据结构以及常用的算法 常用数据结构 数据结构是计算机存储、组织数据的方式。 数据结构是指相互之间存在一种或多种特定关系的数据元素的集合。 通常情况下,精心选择的数据结构可以带来更高的运行或者存储效率。 数据结构往往同高效的检索算法和索引技术有关。 一、线性表 线性结构: 最常用、最简单的一种数据结构。 线性表: 典型的线性结构。基本特点是线性表中的 数据元素有序且有限。结构中: ① 存在一个唯一的被称为“第一个”的数据元素; ② 存在一个唯一的被称为“最后一个”的数据元素; ③ 除第一个元素外,每

qq_47605698的博客 1446

Hibernate 3.3主要的新特性包括2

&lt;/ prop &gt; 23                   &lt; prop  key ="hibernate.cache.use_query_cache"&gt; ${hibernate.cache.use_query_cache} &lt;/ prop &gt; 24                   &lt; prop  key ="hibernate.cac...

SNS创造者/java记录 161

OBC_开环扫频波特图拟合操作流程(结合 Simulink)

摘要: 本文详细介绍了基于Simulink的开环扫频波特图测试与拟合流程,适用于电源/控制系统(如LLC/PFC)的小信号分析。主要内容包括:1)前期准备(测试点选择、信号范围设定);2)Simulink建模方法(信号注入、数据记录);3)两种扫频方式(逐频正弦/Chirp扫频)的实现;4)MATLAB数据处理(FFT分析、传递函数拟合);5)线性分析工具使用技巧。重点强调了激励信号幅值控制、稳态数据采集及模型验证方法,并提供完整MATLAB脚本示例。该流程可有效获取系统频域特性,为控制器设计提供可靠依据。

Sumerking的博客 232

Hibernate 3新特性介绍及发展趋势

Hibernate是一种强大的可提供对象-关系持久化和查询服务的中间件,它可以使程序员依据面向对象的原理开发持久化类,实现对象之间的关联、继承、多态、组合、集合等。 Hibernate提供了它特有的数据库查询语言HQL,这种查询语言屏蔽了不同数据库之间的差别,使你可以编写统一的查询语句执行查询。不同于其他持久化解决方案的是Hibernate并没有把SQL的强大功能屏蔽掉,而是仍然兼容SQL,这...

weixin_30808253的博客 120

AI上推荐 之 NeuralCF与PNN模型(改变特征交叉方式)

1. 前言 随着信息技术和互联网的发展, 我们已经步入了一个信息过载的时代,这个时代,无论是信息消费者还是信息生产者都遇到了很大的挑战: 信息消费者:如何从大量的信息中找到自己感兴趣的信息? 信息生产者:如何让自己生产的信息脱颖而出, 受到广大用户的关注? 为了解决这个矛盾, 推荐系统应时而生, 并飞速前进,在用户和信息之间架起了一道桥梁,一方面帮助用户发现对自己有价值的信息, 一方面让信息能够展现在对它感兴趣的用户前面。 推荐系统近几年有了深度学习的助推发展之势迅猛, 从前深度学习的传统推荐模型(协

Miracle8070 1万+

AIGC算法工程师 面试八股文

1、简述DDPM的算法原理 2、什么是重参数化技巧?Diffusion Models和VAE中的重参数化技巧是如何使用的? VAE中的重参数化技巧 Diffusion Models中的重参数化技巧 3、什么是马尔可夫过程?DDPM中的马尔可夫链是如何定义的? 马尔可夫过程 DDPM马尔可夫链 4、为什么DDPM前向过程中前期加噪少,后期加噪多? 5、VAE和Diffusion Models中的变分推断是什么? 6、Negative Prompt实现的原理是什么?

沉迷单车的追风少年 1万+

Hibernate3 新特性

Hibernate3主要的新特性包括: 1:实现了EJB3风格的持久化操作。在原有的saveOrUpdate()和saveOrUpdateCopy()两个方法之外,又提供了EJB3风格的create()和merge()两个操作。 2:提供更强的映射灵活性。允许将一个类映射到多张表,允许混合使用“每个继承体系一张表”和“每个子类一张表”的映射策略,等等。 3:支持存储过程和手写SQL,并且可以...

zengenry的专栏 244

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

hibernate3和hibernate4的实现与区别,求解释

hibernate3和hibernate4都什么不同 在用的时候有哪些注意的 配置是什么 求高手指点

u011565960的专栏 684

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

Atitit hibernate3 hinernate4 hibernate5新特性attilax总结

Atitit hibernate3 hinernate4 hibernate5新特性attilax总结             1.1. Hibernate3的新特性 1 1.2. hibernate4.1版本中的新特性和hibernate3.3部分区别 - WTOM的博客 - 博客频道 - youkuaiyun.com.html1 1.3. Hibernate 5.1.0 正式版发布,新版本带来了一些新特性...

weixin_34337381的博客 249

hibernate4和hibernate3的区别

hibernate4.0+版本和3.0+版本的区别总结 马老师说的好。要穿一手鞋,so,自己总结下hibernate4.1版本中的新特性和hibernate3.3做区别 1.数据库方言设置 org.hibernate.dialect.MySQL5Dialect 在3.3版本中连接MySQL数据库只需要指明MySQLDialect即可。在4.1版本中可以指出MySQL5D

q1219611916的专栏 738
上一篇: 从C++到Java --理解面向对象是关键所在
下一篇: 利用MFC 在运行中动态创建新窗口
CandyCat
博客等级 码龄26年 23粉丝 65原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值