-
[C++] 콘솔창 키입력 메뉴이동 ConsoleHandle공부/C++ 2023. 7. 19. 17:06
- 코드
#include <iostream> #include <conio.h> #include <Windows.h> //#include "KeyClass.h" enum KeyList { UP = 72, LEFT = 75, RIGHT = 77, DOWN = 80, }; #define MENU_LENGTH 5 using namespace std; void Init(); void SetConsoleCursorPosition(int x, int y); void InputKey(); COORD GetConsoleCursorPosition(); void PrintMainPage(); void MoveMenuCursorUP(); void MoveMenuCursorDOWN(); int main() { Init(); while (true) { InputKey(); } return 0; } void Init() { _wsetlocale(LC_ALL, L"korean"); system("mode con cols=64 lines=24 | title test"); PrintMainPage(); SetConsoleCursorPosition(27, 2); } void SetConsoleCursorPosition(int x, int y) { HANDLE consoleHandle = GetStdHandle(STD_OUTPUT_HANDLE); COORD pos; pos.X = x; pos.Y = y; SetConsoleCursorPosition(consoleHandle, pos); } COORD GetConsoleCursorPosition() { CONSOLE_SCREEN_BUFFER_INFO cs; GetConsoleScreenBufferInfo(GetStdHandle(STD_OUTPUT_HANDLE), &cs); return cs.dwCursorPosition; } void PrintMainPage() { wcout << L"메인화면" << endl; SetConsoleCursorPosition(26, 2); wcout << L"> 테스트" << 1 << endl; for (int i = 1; i < MENU_LENGTH; ++i) { SetConsoleCursorPosition(28, i + 2); wcout << L"테스트" << i+1 << endl; } } void MoveMenuCursorUP() { COORD pos = GetConsoleCursorPosition(); if (pos.Y <= 2) { } else{ SetConsoleCursorPosition(26, pos.Y); cout << " "; SetConsoleCursorPosition(26, pos.Y - 1); cout << ">"; } } void MoveMenuCursorDOWN() { COORD pos = GetConsoleCursorPosition(); if (pos.Y >= 1+MENU_LENGTH) { } else { SetConsoleCursorPosition(26, pos.Y); cout << " "; SetConsoleCursorPosition(26, pos.Y + 1); cout << ">"; } } void InputKey() { int key = 0; if (_kbhit() > 0) { key = _getch(); // 방향키 입력 if(key == 224) { //up:72, left:75, right:77, down:80 key = _getch(); switch (key) { case KeyList::UP: MoveMenuCursorUP(); break; case KeyList::LEFT: break; case KeyList::RIGHT: break; case KeyList::DOWN: MoveMenuCursorDOWN(); break; default: break; } } } }
'공부 > C++' 카테고리의 다른 글
[Error] LNK2005 이미 정의되어 있습니다 (0) 2023.11.29 temp (0) 2023.10.25 __restrict (0) 2023.07.14 [C++] 클래스 생성 (0) 2022.07.13 [C++] 동적 할당/new, delete (0) 2022.07.07