Я делаю страницу входа с C в моей программе. Я должен сделать эту программу только с C., но программа не работает, когда я нажимаю клавишу со стрелкой и клавишу ввода.
когда я нажал клавишу со стрелкой, я хочу войти - кнопка изменения учетной записи изменилась. но кнопка не работает. и когда я нажал на поле ввода логина и нажал клавишу Enter, чтобы выйти, но он не работает.
Я использую
oldmenu = menu;
menu = getInput;
чтобы решить проблему с клавишей Enter.
когда я нажал на поле ввода логина и нажал клавишу Enter, чтобы выйти, но он запустился ChangeLogin();
.
Я думаю, что это проблема меню. но сейчас это не работает.
это меню контроля входа в систему.
int get_input_login(WORD* vkey, COORD* pos, int* menu, int* check, login* tmpID)
{
INPUT_RECORD input_record;
DWORD input_count;
int oldmenu;
ReadConsoleInput(CIN, &input_record, 1, &input_count);
switch (input_record.EventType)
{
case MOUSE_EVENT:
if (pos && (input_record.Event.MouseEvent.dwButtonState & FROM_LEFT_1ST_BUTTON_PRESSED)) // Left button clicked
{
CONSOLE_SCREEN_BUFFER_INFO csbi;
GetConsoleScreenBufferInfo(COUT, &csbi);
*pos = input_record.Event.MouseEvent.dwMousePosition;
pos->X -= csbi.srWindow.Left;
pos->Y -= csbi.srWindow.Top;
if (pos && (input_record.Event.MouseEvent.dwButtonState & FROM_LEFT_1ST_BUTTON_PRESSED)) //left button pressed
{
if (pos->X > 26 && pos->X <= 39) // id, psword
{
if (pos->Y == 6) // id inputbox
{
oldmenu = menu;
menu = getInput;
gotoxy(26, 6); PrintLoginInputbox();
gotoxy(27, 6); textcolor(BLACK, WHITE);
input_id(tmpID->ID, maxlogincharacter);
textcolor(WHITE, GetStdHandle(STD_OUTPUT_HANDLE));
menu = oldmenu;
}
else if (pos->Y == 8) // psword inputbox
{
oldmenu = menu;
menu = getInput;
gotoxy(26, 8); PrintLoginInputbox();
gotoxy(27, 8); textcolor(BLACK, WHITE);
input_pw(tmpID->PW, maxlogincharacter);
textcolor(WHITE, GetStdHandle(STD_OUTPUT_HANDLE));
menu = oldmenu;
}
}
else if (pos->Y == 14)
{
if (pos->X > 7 && pos->X < 19) // button : login
{
if (strcmp(tmpID->ID, keyID.ID) != 0 && strcmp(tmpID->PW, keyID.PW) != 0)
check = 1; // login success
}
else if (pos->X > 35 && pos->X < 47) // button : change account
ChangeLogin();
}
}
}
case KEY_EVENT:
if (input_record.Event.KeyEvent.bKeyDown)
{
switch (input_record.Event.KeyEvent.wVirtualKeyCode)
{
case VK_LEFT:
case VK_RIGHT:
if (menu == loginButton) // when menu = login button
{
menu = changePageButton; PrintLoginButtons(menu);
}
else if (menu == changePageButton) // when menu = changePageButton button
{
menu = loginButton; PrintLoginButtons(menu);
}
break;
case VK_RETURN:
if (menu == loginButton)
{
if (strcmp(tmpID->ID, keyID.ID) != 0 || strcmp(tmpID->PW, keyID.PW) != 0)
saveID();
check = 1; // login success
}
else if (menu == changePageButton)
ChangeLogin();
}
}
}
}
и это меню входа в систему.
void input_id(char* buf, int size)
{
int cnt = 0, key; // count, key
while (1)
{
key = getch(); // input one character
if (key == VK_RETURN) // break when Enter pressed
break;
buf[cnt++] = (char)key;
printf("%c",key);
if (cnt == size - 1)
break;
}
buf[cnt] = '\0';
}