如何修复C中的“键和鼠标控制”错误

时间:2019-06-02 11:20:20

标签: c login mouseevent keyevent

我正在用程序在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';
}

0 个答案:

没有答案