[C] 전광판 소스...
Computer_IT/C++2006. 11. 23. 02:37
반응형
- #include <windows.h>
- #include <stdio.h>
- #include <conio.h>
- // 화면을 지우는 함수.
- void clrscr(void)
- {
- system("cls");
- }
- // 코드페이지 변경 함수 ( 영문 : 437 , 한글 : 949 )
- void SetCodePage(UINT nPage)
- {
- SetConsoleCP(nPage);
- SetConsoleOutputCP(nPage);
- }
- // 코드페이지를 얻는 함수
- UINT GetCodePage(void)
- {
- return GetConsoleCP();
- }
- // 현제 커서 X 위치를 얻는 함수
- int wherex(void)
- {
- CONSOLE_SCREEN_BUFFER_INFO BufInfo;
- GetConsoleScreenBufferInfo(GetStdHandle(STD_OUTPUT_HANDLE),&BufInfo);
- return BufInfo.dwCursorPosition.X;
- }
- // 현제 커서 Y 위치를 얻는 함수
- int wherey(void)
- {
- CONSOLE_SCREEN_BUFFER_INFO BufInfo;
- GetConsoleScreenBufferInfo(GetStdHandle(STD_OUTPUT_HANDLE),&BufInfo);
- return BufInfo.dwCursorPosition.Y;
- }
- // 커서 위치를 설정하는 함수
- void gotoxy(int x, int y)
- {
- COORD Pos = { x , y };
- SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), Pos);
- }
- // 글자 색깔을 변경하는 함수
- void SetTextAttribute(WORD BkColor, WORD TxColor)
- {
- SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), (unsigned char)((BkColor << 4) TxColor));
- }
- // 택스트를 출력하는 함수.
- int PrintText(int nPosX, int nPosY, const char* szFormat, ...)
- {
- char szBuffer[512] = { 0 };
- if(szFormat)
- {
- va_list vl;
- va_start(vl, szFormat);
- vsprintf(szBuffer, szFormat, vl);
- va_end(vl);
- }
- gotoxy(nPosX, nPosY);
- return fputs(szBuffer, stdout);
- }
- // 전광판과 같은 스크롤 텍스트 출력.
- int PrintNeonsineText(int nPosX, int nPosY, int nWidth, int nFrame, const char* szFormat, ...)
- {
- int i, nBufferLen;
- char szBuffer[512] = { 0 };
- char szNeonsine[512] = { 0, };
- if(szFormat)
- {
- va_list vl;
- va_start(vl, szFormat);
- nBufferLen = vsprintf(szBuffer, szFormat, vl);
- va_end(vl);
- }
- strcpy(&szNeonsine[nFrame = (nFrame % nWidth)], szBuffer);
- i = nWidth - nFrame;
- if(i < nBufferLen) strcpy(szNeonsine, &szBuffer[i]);
- for(i = 0 ; i < nWidth ; ++i) if(!szNeonsine[i]) szNeonsine[i] = ' ';
- szNeonsine[nWidth] = 0;
- gotoxy(nPosX, nPosY);
- fputs(szNeonsine, stdout);
- return nFrame;
- }
- void main(void)
- {
- int nPosX = 0;
- int nPosY = 10;
- int nBkColor = 7;
- int nTxColor = 0;
- int nWidth = 50;
- int nFrame = 0;
- int nSpeed = 1;
- int nDelay = 200;
- char szString[512] = "This is Test of Scroll String";
- // "┌──────────────────────────────────────┐"
- PrintText(0, 0, "┌────┬────────┬────┬────┬────┬────┐");
- PrintText(0, 1, "│POSITION│ COLOR │ WIDTH │ FRAME │ SPEED │ DELAY │");
- PrintText(0, 2, "├────┼────────┼────┼────┼────┼────┤");
- PrintText(0, 3, "│%2d , %2d │%2d , %2d │ %6d │ %6d │ %6d │ %6d │"
- , nPosX, nPosY, nBkColor, nTxColor, nWidth, nFrame, nSpeed, nDelay);
- PrintText(0, 4, "│NUM-MOVE│[SHIFT + ] > / <│NUM 7/9 │ │ + / - │ 1 - 9 │");
- PrintText(0, 5, "├────┼────────┴────┴────┴────┴────┤");
- PrintText(0, 6, "│ String │%-46s [ ENTER ]│", szString);
- PrintText(0, 7, "└────┴────────────────────────────┘");
- PrintText(0, 8, "0 1 2 3 4 5 6 7 8");
- PrintText(0, 9, "12345678901234567890123456789012345678901234567890123456789012345678901234567890");
- while("RUN")
- {
- while(kbhit())
- {
- int nCh = getch();
- // 키 입력 센서
- switch(nCh)
- {
- case 0x1B : clrscr(); gotoxy(0,0); return;
- case 0x47 : PrintNeonsineText(nPosX, nPosY, nWidth, 0, ""); nWidth -= 1; break;
- case 0x49 : PrintNeonsineText(nPosX, nPosY, nWidth, 0, ""); nWidth += 1; break;
- case 0x4B : PrintNeonsineText(nPosX, nPosY, nWidth, 0, ""); nPosX -= 1; break;
- case 0x4D : PrintNeonsineText(nPosX, nPosY, nWidth, 0, ""); nPosX += 1; break;
- case 0x48 : PrintNeonsineText(nPosX, nPosY, nWidth, 0, ""); nPosY -= 1; break;
- case 0x50 : PrintNeonsineText(nPosX, nPosY, nWidth, 0, ""); nPosY += 1; break;
- case '+' : nSpeed += 1; break;
- case '-' : nSpeed -= 1; break;
- case '>' : nBkColor += 1; break;
- case '<' : nBkColor -= 1; break;
- case '.' : nTxColor += 1; break;
- case ',' : nTxColor -= 1; break;
- case '1' : nDelay = 50; break;
- case '2' : nDelay = 100; break;
- case '3' : nDelay = 150; break;
- case '4' : nDelay = 200; break;
- case '5' : nDelay = 250; break;
- case '6' : nDelay = 300; break;
- case '7' : nDelay = 350; break;
- case '8' : nDelay = 400; break;
- case '9' : nDelay = 450; break;
- case '0' : nDelay = 500; break;
- case '\r' :
- case '\n' :
- {
- PrintText(0, 6, "│ String │%60s│", "");
- gotoxy(12, 6);
- gets(szString);
- } break;
- }
- if(nPosX < 0) nPosX = 0;
- if(nPosY < 10) nPosY = 10;
- if(nBkColor < 0) nBkColor = 0;
- if(nBkColor > 15) nBkColor = 0;
- if(nTxColor < 0) nTxColor = 0;
- if(nTxColor > 15) nTxColor = 0;
- if(nWidth < 1) nWidth = 1;
- if(nSpeed < 1) nSpeed = 1;
- }
- // 메뉴
- PrintText(0, 3, "│%2d , %2d │%2d , %2d │ %6d │ %6d │ %6d │ %6d │"
- , nPosX, nPosY, nBkColor, nTxColor, nWidth, nFrame, nSpeed, nDelay);
- PrintText(0, 6, "│ String │%-46s [ ENTER ]│", szString);
- // 글 색깔 선택
- SetTextAttribute(nBkColor, nTxColor);
- PrintText(22, 3, "[TEXT]");
- // 스크롤 출력
- nFrame = PrintNeonsineText(nPosX, nPosY, nWidth, nFrame + nSpeed, szString);
- // 글 색깔 복귀
- SetTextAttribute(0, 7);
- // 딜레이
- Sleep(nDelay);
- }
- }
출처 : 어느분..ㅡㅡ.. (모름)
반응형
'Computer_IT > C++' 카테고리의 다른 글
[API] 외부 프로그램 실행 함수 (0) | 2007.02.06 |
---|---|
[C] VC ConsoleWindows에서 DC를 이용해 마우스로 그림그리기 (0) | 2006.11.23 |
[C] printf Type Field Characters (0) | 2006.09.26 |
[C] Long Type의 Data형을 10진수에서 2진수로.. (0) | 2006.09.12 |
[VC] 인라인 ASM 으로 작성한 연산 (1) | 2006.08.14 |