文档库 最新最全的文档下载
当前位置:文档库 › 01全屏字雨

01全屏字雨

#include "windows.h"

#define ID_TIMER (WM_USER + 1)
#define RAINNUM 50

#define CX_SCREEN GetSystemMetrics(SM_CXSCREEN)
#define CY_SCREEN GetSystemMetrics(SM_CYSCREEN)

typedef struct _WORDRAIN{
int xPos;
int yPos;
int iWordRainLength;
int iSpeed;
TCHAR szData[15];
BOOL bExits;}WORDRAIN, *PWORDRAIN;

LRESULT CALLBACK WndProc(HWND,UINT,WPARAM,LPARAM);
BOOL WordRain_Init(HWND);
VOID WordRain_Paint(HWND);
BOOL WordRein_Clean(HWND);
VOID SetData(int);

HDC hdc = NULL, mdc = NULL;
HBITMAP bmp;
HFONT hFont;
int iRainNum = 0;
WORDRAIN WordRain[RAINNUM];

int APIENTRY WinMain(HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPSTR lpCmdLine,
int nCmdShow)
{
MSG msg;
HWND hwnd;
WNDCLASS wndclass;

wndclass.style =CS_HREDRAW | CS_VREDRAW;
wndclass.cbClsExtra =0;
wndclass.cbWndExtra =0;
wndclass.hInstance =hInstance;
wndclass.lpfnWndProc =WndProc;
wndclass.hCursor =LoadCursor(NULL,IDC_ARROW);
wndclass.hIcon =LoadIcon(NULL,IDI_APPLICATION);
wndclass.hbrBackground =(HBRUSH)GetStockObject(WHITE_BRUSH);
wndclass.lpszClassName =TEXT("类名");
wndclass.lpszMenuName =NULL;

if(!RegisterClass(&wndclass))
{
MessageBox(NULL,TEXT("窗口类注册失败!"),TEXT("消息"),0);
return 0;
}

hwnd=CreateWindow(TEXT("类名"),
TEXT("窗口名称"),
WS_POPUP | WS_CLIPCHILDREN | WS_CLIPSIBLINGS,
0,
0,
CX_SCREEN,
CY_SCREEN,
NULL,
NULL,
hInstance,
NULL);

ShowWindow(hwnd, SW_SHOWMAXIMIZED);
UpdateWindow(hwnd);

ShowCursor(FALSE);

while(GetMessage(&msg,NULL,0,0))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
return msg.wParam;
}
LRESULT CALLBACK WndProc(HWND hwnd,UINT message,WPARAM wParam,LPARAM lParam)
{
switch(message)
{
case WM_CREATE:
WordRain_Init(hwnd);
return 0;


//case WM_MOUSEMOVE:
case WM_KEYDOWN:
case WM_RBUTTONDOWN:
case WM_LBUTTONDOWN:
SendMessage(hwnd, WM_CLOSE, 0, 0);
return 0;

case WM_TIMER:
WordRain_Paint(hwnd);
return 0;

case WM_DESTROY:
WordRein_Clean(hwnd);
PostQuitMessage(0);
return 0;
}
return DefWindowProc(hwnd,message,wParam,lParam);
}
BOOL WordRain_Init(HWND hwnd)
{
SetTimer(hwnd, ID_TIMER, 100, NULL);

hdc = GetDC(hwnd);
mdc = CreateCompatibleDC(hdc);

bmp = CreateCompatibleBitmap(hdc, CX_SCREEN, CY_SCREEN);
hFont = CreateFont(15, 8, 0, 0, 0, FALSE, FALSE, 0, ANSI_CHARSET, OUT_DEFAULT_PRECIS, CLIP_DEFAULT_PRECIS, DEFAULT_QUALITY, DEFAUL

T_PITCH | FF_SWISS, TEXT("楷体"));

WordRain_Paint(hwnd);
return TRUE;
}
VOID WordRain_Paint(HWND hwnd)
{
TCHAR szData[2];

SelectObject(mdc, bmp);
PatBlt(mdc, 0, 0, CX_SCREEN, CY_SCREEN, BLACKNESS);

SelectObject(mdc, hFont);
SetBkMode(mdc, TRANSPARENT);
SetTextColor(mdc, RGB(0, 150, 0));

if(iRainNum < RAINNUM)
{
WordRain[iRainNum].xPos = rand()%CX_SCREEN;
WordRain[iRainNum].yPos = 50;
WordRain[iRainNum].iWordRainLength = rand()%10 + 5;
WordRain[iRainNum].iSpeed = rand()%10 + 10;
WordRain[iRainNum].bExits = TRUE;
SetData(iRainNum);
iRainNum++;
}
for(int i=0; i < RAINNUM; i++)
{
if(TRUE == WordRain[i].bExits)
{
for(int j = 0; j < WordRain[i].iWordRainLength; j++)
{
szData[0] = WordRain[i].szData[j];
szData[1] = TEXT('\0');

TextOut(mdc, WordRain[i].xPos, (WordRain[i].yPos - (15 * j)), szData, lstrlen(szData));
}

WordRain[i].yPos += WordRain[i].iSpeed;

if(WordRain[i].yPos - lstrlen(WordRain[i].szData) * 15 > CY_SCREEN)
{
WordRain[i].xPos = rand()%CX_SCREEN;
WordRain[iRainNum].iSpeed = rand()%10 + 10;
WordRain[i].yPos = 50;
}
}
}
BitBlt(hdc, 0, 0, CX_SCREEN, CY_SCREEN, mdc, 0, 0, SRCCOPY);
return;
}
VOID SetData(int iPos)
{
TCHAR szText[15];

for(int i = 0; i < WordRain[iRainNum].iWordRainLength; i++)
{
szText[i] = (TCHAR)((rand()%2) + 48);
}
szText[WordRain[iRainNum].iWordRainLength] = TEXT('\0');
lstrcpy(WordRain[iPos].szData, szText);

return;
}
BOOL WordRein_Clean(HWND hwnd)
{
KillTimer(hwnd, ID_TIMER);
ReleaseDC(hwnd, hdc);
DeleteDC(mdc);
DeleteObject(hFont);
DeleteObject(bmp);

return TRUE;
}

相关文档