반응형
    
    
    
  - #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 |