这是win32平台下的一个应用程序,希望大家看了以后有所感想。
#include<windows.h>
#include<stdio.h>
LRESULT CALLBACK WndProc(HWND,UINT,WPARAM,LPARAM);
int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPSTR lpCmdLine,int nCmdShow)
{
WNDCLASS wndcls;
wndcls.cbClsExtra = 0;
wndcls.cbWndExtra = 0;
wndcls.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH);
wndcls.hCursor = LoadCursor(NULL,IDC_ARROW); //光标(鼠标)
wndcls.hIcon = LoadIcon(NULL,IDI_QUESTION); //图标
wndcls.hInstance = hInstance;
wndcls.lpfnWndProc = WndProc;
wndcls.lpszClassName = "SIN";
wndcls.lpszMenuName = NULL;
wndcls.style = CS_HREDRAW|CS_VREDRAW;
RegisterClass(&wndcls);
HWND hwnd=CreateWindow("SIN","字符跳动",WS_OVERLAPPEDWINDOW,CW_USEDEFAULT,0,1000,500,NULL,NULL,hInstance,NULL);
ShowWindow(hwnd,SW_RESTORE);
UpdateWindow(hwnd);
MSG msg;
while(GetMessage(&msg,NULL,0,0))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
return msg.wParam;
}
LRESULT CALLBACK WndProc(HWND hwnd,UINT Message,WPARAM wParam,LPARAM lParam)
{
HDC hdc;
PAINTSTRUCT ps;
TEXTMETRIC tm;
HFONT hF;
char lpsz_1[] = {'a','b','c','d','e','f','g','h','i','g','k','l','m','n',
'o','p','q','r','s','t','u','v','w','x','y','z'};
int nCharlen = 26;
static int nChar = 0;
static int i;
static int X,Y;
static bool bRight =TRUE,bLeft = FALSE;
switch(Message)
{
case WM_CREATE:
//PlaySound(TEXT("One people think people.wav"), NULL, SND_FILENAME | SND_ASYNC);
SetTimer(hwnd,1,500,NULL);
break;
case WM_TIMER:
InvalidateRect(hwnd,NULL,TRUE);
break;
case WM_PAINT:
hdc = BeginPaint(hwnd,&ps);
GetTextMetrics(hdc,&tm);
Y=tm.tmExternalLeading+80; //设置输出字符的Y坐标
for(i=0;i<nChar;i++)
{
SetTextColor(hdc,RGB(0,0,0)); //设置字体的颜色为黑色
X=X+tm.tmAveCharWidth*4; //设置输出字符的X坐标
TextOut(hdc,X,Y,&lpsz_1[i],1); //输出从第0个到第nChar-1个字符
}
X=X+tm.tmAveCharWidth*4; //设置输出字符的X,Y坐标
Y=tm.tmExternalLeading+70; //提高10个像素
hF =CreateFont(30,0,0,0,FW_THIN,1,0,0,ANSI_CHARSET,OUT_DEFAULT_PRECIS,
CLIP_DEFAULT_PRECIS,DEFAULT_QUALITY,DEFAULT_PITCH|FF_DONTCARE,"字号");
SetTextColor(hdc,RGB(255,0,0)); //设置字体的颜色为红色
SelectObject(hdc,hF); //选入字体
TextOut(hdc,X,Y,&lpsz_1[nChar],1); //输出第nChar个字符
Y=tm.tmExternalLeading+80;
for(i=nChar+1;i<nCharlen;i++)
{
SetTextColor(hdc,RGB(0,0,0)); //设置字体的颜色为黑色
X=X+tm.tmAveCharWidth*4; //设置输出字符的X坐标
TextOut(hdc,X,Y,&lpsz_1[i],1); //输出后面的字符
}
if(nChar == nCharlen-1) //当输出到最后的一个字符时
{
bRight = FALSE; //改变红色字移动的方向为向左
bLeft = TRUE;
}
else if(nChar == 0) //当输出到第一个字时
{
bRight = TRUE; //改变红色字移动的方向为向右
bLeft = FALSE;
}
if(bRight == TRUE)
nChar ++;
else
nChar --;
X = 0;
DeleteObject(hF);
EndPaint(hwnd,&ps);
break;
case WM_CLOSE:
DestroyWindow(hwnd);
break;
case WM_DESTROY:
PostQuitMessage(0);
break;
default:
return DefWindowProc(hwnd, Message, wParam, lParam);
}
return 0;
}