屏幕保护程序(球体运动)
来源:互联网 发布:交大知行论坛 编辑:程序博客网 时间:2024/04/28 06:16
/*********************************
简单的版权声明
作者:WinGame_D
时间:2010-2-24
用时:6小时
效果:一个色彩渐变的球体在窗口中运动,遇到边界发生碰撞
适用学习人群:windows程序设计初学者(高手勿笑话我的粗浅的设计)
以下代码只用于学习,请勿转载
*********************************/
//windowsAPI.h代码段
#pragma once
#include <windows.h>
//碰撞测试函数,发生碰撞将改变球体运动方向
void SetPointDirect(HWND hWnd,RECT &GRect,POINT &DirectPoint)
{
RECT rect;
GetClientRect(hWnd,&rect);
RECT newRect;
newRect.top=GRect.top+DirectPoint.y;
newRect.bottom=GRect.bottom+DirectPoint.y;
newRect.left=GRect.left+DirectPoint.x;
newRect.right=GRect.right+DirectPoint.x;
if(newRect.top<rect.top || newRect.bottom>rect.bottom)
{
DirectPoint.y=0-DirectPoint.y;
}
if(newRect.left<rect.left || newRect.right>rect.right)
{
DirectPoint.x=0-DirectPoint.x;
}
GRect.top=GRect.top+DirectPoint.y;
GRect.bottom=GRect.bottom+DirectPoint.y;
GRect.left=GRect.left+DirectPoint.x;
GRect.right=GRect.right+DirectPoint.x;
}
//windowsAPI.cpp代码段
#include <windows.h>
#include <crtdbg.h>
#include <tchar.h>
#include "windowsAPI.h"
LRESULT CALLBACK WinProc(HWND hWnd,UINT message,WPARAM wParam,LPARAM lParam)
{
HDC hdc;
static HDC DrawHDC; //全局的兼容DC,作用是在后台这个DC上画好,然后画好的东西让hdc显示
static HBITMAP DrawBitmap; //全局的兼容位图
HPEN newpen;
HBRUSH newbrush;
static RECT mCircle={0,0,200,200}; //圆的大小
static POINT Direction={5,2}; //运动方向
static int x=0,y=0,z=0; //色彩RGB分量
static int m=1,n=2,o=3; //色彩分量的改变度
switch(message)
{
case WM_TIMER:
hdc=GetDC(hWnd);
BitBlt(DrawHDC,0,0,800,600,hdc,0,0,WHITENESS);
newpen=CreatePen(PS_SOLID,3,RGB(x,y,z));
SelectObject(DrawHDC,newpen);
newbrush=CreateSolidBrush(RGB(x,y,z));
SelectObject(DrawHDC,newbrush);
x=x+m;
y=y+n;
z=z+o;
if(x+m>255 || x+m<0)
{
m=-m;
}
if(y+n>255 || y+n<0)
{
n=-n;
}
if(z+o>255 || z+o<0)
{
o=-o;
}
SetPointDirect(hWnd,mCircle,Direction);
Ellipse(DrawHDC,mCircle.left,mCircle.top,mCircle.right,mCircle.bottom);
BitBlt(hdc,0,0,800,600,DrawHDC,0,0,SRCCOPY);
DeleteObject(newpen);
DeleteObject(newbrush);
ReleaseDC(hWnd,hdc);
break;
case WM_CREATE:
{
SetTimer(hWnd,1,20,NULL);
hdc=GetDC(hWnd);
DrawHDC=CreateCompatibleDC(hdc);
DrawBitmap=CreateCompatibleBitmap(hdc,800,600);
SelectObject(DrawHDC,DrawBitmap);
ReleaseDC(hWnd,hdc);
}
break;
case WM_PAINT:
break;
case WM_DESTROY:
KillTimer(hWnd,1);
DeleteObject(DrawBitmap);
ReleaseDC(hWnd,DrawHDC);
PostQuitMessage(0);
break;
}
return DefWindowProc(hWnd,message,wParam,lParam);
}
int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPSTR lpCmdLine,int nShowCmd)
{
WNDCLASS wc={0};
wc.hbrBackground=(HBRUSH)GetStockObject(WHITE_BRUSH);
wc.lpfnWndProc=WinProc;
wc.hInstance=hInstance;
wc.lpszClassName=_T("DeskProtect");
wc.style=CS_HREDRAW | CS_VREDRAW ;
RegisterClass(&wc);
HWND hWnd=CreateWindow(_T("DeskProtect"),_T("WinDeskPro"),WS_BORDER | WS_CAPTION | WS_SYSMENU ,50,50,800,600,NULL,NULL,hInstance,NULL);
_ASSERTE(hWnd!=0);
ShowWindow(hWnd,nShowCmd);
UpdateWindow(hWnd);
MSG msg={0};
while(GetMessage(&msg,NULL,0,0))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
return 0;
}
- 屏幕保护程序(球体运动)
- 屏幕保护程序
- Canvas气泡动画效果和多个球体上下运动(之前的改进)
- 雪花屏幕保护程序(VB.ENT)
- 工作问题积累(十七)停止屏幕保护程序
- hduoj2002(计算球体积)
- c#屏幕保护程序
- Flash与数学:球体曲面 (2)
- hdu 2002计算球体积(java)
- HDU 2002 计算球体积(水~)
- [2002]:计算球体积(简单)
- hdoj 2002计算球体积(java)
- HDU 2002 计算球体积(水题)
- 体渲染(一)渲染一个球体
- HDU-2002(计算球体积)
- JavaScript运动框架(五):链式运动到完美运动
- (39)JS运动之缓冲运动
- JS 运动学习(二)缓冲运动
- 余弦定理和新闻的分类
- HowTo integrate birt into rap 【如何集成Birt到RAP中】
- 长尾理论读书笔记:第十二章 无限的荧屏
- (转载)HashMap原理及冲突之简谈
- 防范SQL注入式攻击
- 屏幕保护程序(球体运动)
- dnf幻影部分原代码
- RS232接口定义
- 孙鑫VC++讲座笔记-(1) Windows程序内部运行机制
- 豆瓣好像有个BUG
- 世界上最忠诚的老公写给妻子的承诺书
- 沙僧日记《笑死概不负责》
- 关于 nor it's doXxx() equivalent is defined in action class 的问题解决办法
- 请客语录