郭宛人吹吹嘘k gagaffer
关注数: 0 粉丝数: 89 发帖数: 3,923 关注贴吧数: 3
闲的蛋疼,写了一个黑客帝国数字瀑布效果 纯C WINSDK 在XP SP3下编译通过,贴上代码 ------------------------------------------------------------------- #include "windows.h" #pragma comment(lib,"user32.lib") #pragma comment(lib,"gdi32.lib") const int Matrix_Width=300; const int Matrix_Height=200; typedef struct _MATRIX_COLUMN {      BOOL     bActive;      int         nCounter;      int         nCounterMax;      char     prev; }MATRIX_COLUMN,*PMATRIX_COLUMN; #define GET_RANDOM(min,max) ((rand()%(int)(((max)+1)-(min)))+(min)) LPCTSTR         szClassName="Matrix"; HDC             hMemDC=NULL; HBITMAP         hMemBitmap=NULL; HGDIOBJ         pBitmapOld=NULL; HGDIOBJ         pFontOld=NULL; HFONT           hFont=NULL; int             nTextWidth,nTextHeight; int             nCols,nRows; int             nActiveColumns=0; PMATRIX_COLUMN pMatrixColumns=NULL; void Matrix_OnCreate(HWND hwnd) {      HDC   hdc;      RECT rcClient;      SetWindowLong(hwnd,GWL_STYLE,GetWindowLong(hwnd,GWL_STYLE) & ~WS_MAXIMIZEBOX & ~WS_THICKFRAME);      hdc=GetDC(hwnd);      if(hdc)      {          hMemDC=CreateCompatibleDC(hdc);          if(hMemDC)          {              TEXTMETRIC tm;              hFont=CreateFont(14,0,0,0,FW_BOLD,FALSE, FALSE, 0, ANSI_CHARSET,OUT_DEFAULT_PRECIS,                  CLIP_DEFAULT_PRECIS,DEFAULT_QUALITY,DEFAULT_PITCH|FF_SWISS, "Courier");              hMemBitmap=CreateCompatibleBitmap(hdc,Matrix_Width,Matrix_Height);              pBitmapOld=SelectObject(hMemDC,hMemBitmap);              pFontOld=SelectObject(hMemDC,hFont);              GetTextMetrics(hMemDC,&tm);              nTextWidth=tm.tmAveCharWidth+8;
WAVE显示 // // WAVE.C #include "windows.h" #include "commctrl.h" #include "mmsystem.h" #include "math.h" #pragma comment(lib,"user32.lib") #pragma comment(lib,"winmm.lib") #pragma comment(lib,"gdi32.lib") #define MAX_INQUEUE 8 #define BUFSIZE      1024 HWAVEIN   hwi; WAVEHDR *pwhi,whis[MAX_INQUEUE]; char      waveBufferRecord[MAX_INQUEUE][BUFSIZE]; DWORD     currWavHdr=0,nextWavHdr; HPEN      hPen,hpenG,oldPen; HDC       hDC; void DrawWave(WAVEHDR *whdr,HDC hdc) {      static unsigned char prevBuf[BUFSIZE];      static DWORD prevBytes=0;      DWORD i;      oldPen = SelectObject(hdc, hPen);      MoveToEx(hdc,0,prevBuf[0],NULL);      for(i=1;i<512;i++)          LineTo(hdc,i,prevBuf[i]);      SelectObject(hdc, hpenG);      MoveToEx(hdc,0,(unsigned char)(whdr->lpData[0]),NULL);      for(i=1;i<512;i++)          LineTo(hdc,i,(unsigned char)(whdr->lpData[i]));      SelectObject(hdc, oldPen);      memcpy(prevBuf,whdr->lpData,whdr->dwBytesRecorded);      prevBytes=whdr->dwBytesRecorded; } void DrawFreq(WAVEHDR *whdr,HDC hdc) {      static double prevFreqI[BUFSIZE];      static double currFreqI[BUFSIZE];      static double prevFreqR[BUFSIZE];      static double currFreqR[BUFSIZE];      double         WaveR[BUFSIZE];      double         WaveI[BUFSIZE];      DWORD          i;      memset(WaveR,0,BUFSIZE*sizeof(double));      memset(WaveI,0,BUFSIZE*sizeof(double));      for(i=0;i<whdr->dwBytesRecorded;i++)          WaveR[i]=(unsigned char)whdr->lpData[i]-128;      oldPen = SelectObject(hdc, hPen);      MoveToEx(hdc,0,380,NULL);      for(i=0;i<BUFSIZE/2;i++)          LineTo(hdc,i,380-sqrt((prevFreqR[i]*prevFreqR[i]+prevFreqI[i]*prevFreqI[i])/BUFSIZE));      SelectObject(hdc, hpenG);      MoveToEx(hdc,0,380,NULL);      for(i=0;i<BUFSIZE/2;i++)          LineTo(hdc,i,380-sqrt((currFreqR[i]*currFreqR[i]+currFreqI[i]*currFreqI[i])/BUFSIZE));
1 下一页