留下E-mail,我发给你,不过是SDK的。
解决方案 »
- 已通过的程序为何设置断点运行以后为何程序出现错误...
- 关于自定义开发控件的问题
- VC6.0 ODBC 将JPG转化为byte
- MFC多线程提示错误怎么解决
- 求购:FTP客户端操作组件(功能要求简单),价格¥500元。
- 有没有国际软件开发论坛,或者国际上比较著名的软件开发论坛?
- 请问COMPLEX在release版中为什么不能通过,有错误?
- 我用原始套接字怎么抓不到拨号上网从本机发出去的数据包????
- MFC是什么类库呀,是不是VC专有的?
- 对话框关闭是如何获得该对话框成员变量的值?
- 根据位图产生不规则的窗口,其中一些条件判断我不是很明白,谁能看一下代码阐述一下?
- 初学者:386/486在实模式下寻址空间是多少?是1M吗?
http://www.imagic3d.com/download.htm
#include <scrnsave.h>
#include <math.h>const int delay=55;
const double pi=3.14159265;int Rand(int nMax)
{
static long seed=GetTickCount();
seed=(25173*seed+13849)%65535;
return abs(seed%nMax);
}LRESULT WINAPI ScreenSaverProc(HWND hwnd,UINT message, WPARAM wParam,LPARAM lParam)
{
static HDC hdc;
static RECT scr_dim;
static SIZE size;
static HBRUSH hBlk_Brush;
static int d=1,c=1,q=3,center_x,center_y,hs,vs;
static long red,green,blue;
int i,x,y;
double xs,ys,temp,k=0.2;
switch(message)
{
case WM_CREATE:
SetTimer(hwnd,1,delay,NULL);
hBlk_Brush=(HBRUSH)GetStockObject(RGB(40,40,40));
red=Rand(256);
green=Rand(256);
blue=Rand(256);
hs=GetSystemMetrics(SM_CXSCREEN)/30;
vs=GetSystemMetrics(SM_CYSCREEN)/30;
break;
case WM_ERASEBKGND:
hdc=GetDC(hwnd);
GetClientRect(hwnd,&scr_dim);
center_x=(scr_dim.right-scr_dim.left)/2;
center_y=(scr_dim.bottom-scr_dim.top)/2;
SelectObject(hdc,hBlk_Brush);
PatBlt(hdc,0,0,scr_dim.right,scr_dim.bottom,PATCOPY);
ReleaseDC(hwnd,hdc);
break;
case WM_TIMER:
hdc=GetDC(hwnd);
ys=d/3.0;
xs=c/3.0;
for(i=0;i<1600;i++)
{
temp=(xs+k*sin(ys))*cos(2*pi/q)+ys*sin(2*pi/q);
ys=-(xs+k*sin(ys))*sin(2*pi/q)+ys*cos(2*pi/q);
xs=temp;
x=(int)(xs*hs);
y=(int)(ys*hs);
if(i>10)
SetPixel(hdc,x+center_x,center_y-y,RGB(red,green,blue));
}
c++;
if(c>24)
{
c=1;
d++;
if(d>24)
{
d=1;
q++;
SelectObject(hdc,hBlk_Brush);
PatBlt(hdc,0,0,scr_dim.right,scr_dim.bottom,PATCOPY);
red=Rand(256);
green=Rand(256);
blue=Rand(256);
if(q>12)
{
q=3;
c=1;
d=1;
}
}
}
ReleaseDC(hwnd,hdc);
break;
case WM_DESTROY:
KillTimer(hwnd,1);
break;
default:
return DefScreenSaverProc(hwnd,message,wParam,lParam);
}
return 0;
}BOOL WINAPI ScreenSaverConfigureDialog(HWND hwnd,UINT message, WPARAM wParam,LPARAM lParam)
{
return 0;
}BOOL WINAPI RegisterDialogClasses(HANDLE hInst)
{
return 1;
}
#include <scrnsave.h>ID_APP ICON nowcan.icoSTRINGTABLE
{
IDS_DESCRIPTION "My Screen Saver"
}
To: NowCan(能量、激情、雨水、彩虹——雷雨云)
我不做屏保.我想做包含插件的程序.
我想知道,系统的那个预览窗口的实现手段.
屏幕保护程序是包含特殊变量声明、输出函数及资料定义的Windows应用程序。Micro soft公司提供的静态连
接库SCRNSAVE.LIB中包含了WinMain函数和使屏幕保护程序启动的其他代码。编制一个屏幕保护程序,主要是
编制屏幕保护程序的设置模块和视觉效果模块。 屏幕保护程序在Windows启动时自动装载或由用户在控制面板中激活测试时执行。W indows自动监视按键及鼠
标闲置行为并在用户定制的时间后启动。当检测到如下情况时,Windows不启动屏幕保护程序:①当前激活程序
不是Windows应用程序;②计算机教程(C omputer-Base Training)正在运行;③应用程序在对WM-SYSCOMMAND发
送由标志符SC-SCRE ENSAVE定义的消息时,返回非零值。 当编制的屏幕保护程序启动时,SCRNSAVE.LIB创建一个全屏窗口,窗口类登录如下: WNDCLASS wndclass; Wndclass.hCursor=NULL wndclass.hIcon=LoadIcon(hInst,MAKEIN-TATOM(ID-APP)) wndclass.lpszMenuName=NULL; wndclass.lpszClassName="WindowsScreenSaver-Class"; wndclass.hInstance=hinst; wndclass.style=CS-VREDRAW|CS-HREDRAW|CS-SAVEBITS|CS-DBLCLKS; wndclass.lpfnWndProc=ScreenSaverProc; wndclass.cbWndExtra=0; wndclass.cbWndclassExtra=0; WNDCLASS结构的10个域描述了默认窗口类的所有窗口特征,其意义这里不作详细解释。 编制的屏幕保护程序需要提供ScreenSaverProc回调函数的过程,资源定义文件需提供ID-APP标志符标识的图
标,不过,这时定义的光标只是在屏幕保护程序作为一个独立程序运行时才有用。 屏幕保护程序的编写步骤 1.SCRNSAVE.H头文件中定义了SCRNSAVE.LIB中的函数原型,程序中应首先包含该头文件。 2.声明以下SCRNSAVE.LIB中的全局变量: extern HINSTANCE hMainInstance; extern HWND hMainWindow; 其中hMainInstance变量是所编写应用程序的实例句柄,而hMainWindow是屏幕保护窗口的句柄。 3.若屏幕保护程序需包含设置信息,设置信息保存在CONTROL.INI中由ids AppName字符串内容定义的那部分文
档 中。 4.rc资源文件的修改:定义idsAppName字符串,id-sAppName字符串必须以如下格式包含屏幕保护程序的名
称:"ScreenSaver.描述名称"。 例如:一个名称为"变幻线"的屏幕保护程序就要在.rc资源文件中加入如下内容: STRINGTABLE PRELOAD BEGIN idsAppName "Screen Saver变幻线" END 5.屏幕保护窗口传送消息的处理: ScreenSaverProc回调函数过程用来接收和处理屏幕保护程序窗口的消息。 特别注意: ①ScreenSaverProc窗口过程需将未处理的消息传送给DefScreenSaverProc过程而不是普通Windows应用程序
中的DefWindowProc过程; ②ScreenSaverProc回调函数要在.def文件EXPORTS部分输出。 6.提供设置选择: 你可以提供给用户一个设置屏幕保护程序视觉效果的接口,使用户能拥有一份随心所欲操作的成就感。 Windows是这样处理这一情况的:当用户在"桌面"中选择"设置"按钮时,Windows使用/ c或-c命令行启动屏幕保
护程序,显示设置对话框;如果不想显示设置对话框,就要使用/s 或-s命令行;不使用命令行时,Win-dows以默
认值/c启动屏幕保护程序,显示设置对话框。 当编制的屏幕保护程序要支持用户的设置时,程序需提供如下的回调函数及对话框资源: ScreenSaverConfigure-Dialog"设置对话框"的对话框回调函数过程; RegisterDialogClasses 登记"设置对话框"标准或非标准窗口类函数; DLG-SCRNSAVECONFIGURE "设置对话框"的对话框资源模板。 当Windows以/c命令行启动编制的屏幕保护程序时,SCRNSAVE.LIB中WinMain过程自动调用
Reg-isterDialogClasses函数并显示"设置对话框"。 如果需要处理设置对话框,就要在程序中编写ScreenSaverConfigureDialog回调函数过程,编制的屏幕保护程
序在控制面板的CONTROL.INI初始化文件中保存设置信息,该信息保存在STRINGTABLE中id-sAppName字符串内
容定义的段中。程序可使用WritePrivateProfileSt ring函数和WritePrivateProfileInt函数来保存设置信
息,用LoadString函数恢复保存在CO NTROL.INI中的设置信息。 RegisterDialogClasses中的hInst参数包含所编制程序的实例句柄,亦即全局变量hM ainInstance。如果设置
对话框回调函数过程不含任何特殊的窗口类,Reg-isterDialogCl asses函数只简单地返回TRUE就行了。 7.模块定义文件的修改: ①切记输出ScreenSaverProc函数!若通过"设置对话框"为用户提供了程序行为设置接口,就需要输出
ScreenSaverConfigureDialog函数。RegisterDialog-Classes函数则不必输出; ②模块定义文件中的
DISCRIPTION部分格式如下: DESCRIPTION‘SCRNSAVE:(你想在"控制面板"中显示的屏幕保护程序名称)’ 屏幕保护程序的安装 "控制面板"启动时,会在Windows的启动目录中自动搜索后缀为.SCR的文件作为屏幕保护程序(屏幕保护程序都
是符合上述条件的普通Windows可执行程序,只是简单地将其后缀改为.SCR即可),所以编译连接后,将生成
的.EXE文件改为.SC R后缀文件,并将之拷至Win-dows启动目录下,即可在"控制面板"的"桌面"中发现你的应用
程序进行测试和设置了。