VC++编的一个26个英文字母跳动程序

作者在 2013-02-03 16:06:49 发布以下内容

这是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;
}

VC++ | 阅读 2211 次
文章评论,共2条
风绝舞
2013-02-25 12:17
1
呵呵,顶一个
尹金魁2031
2013-03-30 09:05
2
好长呀!
游客请输入验证码
文章归档