GetKeyState не работает правильно, неправильно оценивает - PullRequest
0 голосов
/ 15 апреля 2020

Я пытаюсь создать функцию, которая отображает информацию на различных страницах, и использую F5 для выбора страницы, PGDN для прокрутки вниз страницы, PGUP для прокрутки вверх страницы и ES C для выхода. Всякий раз, когда я тестирую этот код, он автоматически достигает ES C, хотя я никогда не нажимал его. Если бы кто-то мог помочь мне сделать это правильно, я был бы признателен. При первом использовании GetKeyState (), поэтому, если я использую его неправильно, дайте мне знать!

void repListing(int bookCount, bookType *bookArray[BOOKS]){
    bool toContinue = true;
    bool newPage = true;
    int pgCount = 1;
    int maxPageCount = bookCount / 10;
    bool keyPressed = false;
    int desiredPage = 0;
    while(toContinue){
        if (newPage){
            cout << setw(48) << "Serendipity Booksellers" << endl;
            cout << setw(38) << "Report Listing" << endl;
            cout << "Date: 04/14/2020   Page: " << pgCount << " of " << maxPageCount << "      Database Size: 20    Current Book Count: " << bookCount << endl;
            cout << "" << endl;
            cout << "Title" << setw(10) << "ISBN" << setw(20) << "AUTHOR" << setw(18) << "PUBLISHER" << setw(15) << "DATE ADDED BY" << setw(15) << "QTY" << setw(15) << "WHOLESALE" << setw(15) << "RETAIL" << endl;
            cout << "" << endl;
            cout << "__________________________________________________________________________________________________________________________________" << endl;
            for (int i = 0 + (pgCount-1)*10; i < pgCount * 10; i++){
                if ((*bookArray[i]).bookTitle.length() >= 20){
                    cout << ((*bookArray[i]).bookTitle).substr(0, 20) << setw(10) << (*bookArray[i]).bookISBN << setw(10) << (*bookArray[i]).bookAuthor << setw(10) << (*bookArray[i]).bookPublisher << setw(10) << (*bookArray[i]).dateAdded
                    << setw(10) << (*bookArray[i]).qtyOnHand << setw(10) << (*bookArray[i]).bookWholesale << setw(10) << (*bookArray[i]).bookRetail << endl;
                    cout << "" << endl;
                }else {
                    cout << ((*bookArray[i]).bookTitle).substr(0, 20) << setw(10) << (*bookArray[i]).bookISBN << setw(10) << (*bookArray[i]).bookAuthor << setw(10) << (*bookArray[i]).bookPublisher << setw(10) << (*bookArray[i]).dateAdded
                    << setw(10) << (*bookArray[i]).qtyOnHand << setw(10) << (*bookArray[i]).bookWholesale << setw(10) << (*bookArray[i]).bookRetail << endl;
                    cout << "" << endl;
                }
            }
            newPage = false;
            keyPressed = false;
        }
        while (!keyPressed){
            cout << "Keys: F5 to choose a page, ESC to exit, PGUP to go up, PGDN to go down" << endl;
            cout << "Enter a key: " << endl;
            if (GetKeyState(VK_NEXT)){
                cout << "pgdwn" << endl;
                newPage = true;
                keyPressed = true;
                if (pgCount == maxPageCount) pgCount = 1;
                else pgCount++;
            }else if (GetKeyState(VK_PRIOR)){
                cout << "pgup" << endl;
                newPage = true;
                keyPressed = true;
                if (pgCount == 1) pgCount = maxPageCount;
                else pgCount--;
            }else if(GetKeyState(VK_F5)){
                cout << "reached F5" << endl;
                keyPressed = true;
                cout << "What page would you like to go to? (1-" << maxPageCount << "): ";
                bool validInput = false;
                while(!validInput){
                    cin >> desiredPage;
                    if (cin.good() && pgCount <= maxPageCount && pgCount >= 1){
                        validInput = true;
                    } else{
                        cout << "" << endl;
                        cout << setw(63) << "Please enter a number in the range 1-" << maxPageCount << "." << endl;
                        cin.clear();
                        cin.ignore(maxInt, '\n');
                        system("PAUSE");
                        system("cls");
                        cout << "What page would you like to go to? (1-" << maxPageCount << "): ";
                    }   
                }
                pgCount = desiredPage;
                newPage = true;
            }else if (GetKeyState(VK_ESCAPE)){
                cout << "reached ESC" << endl;
                toContinue = false;
                keyPressed = true;
            }
        }
        cout << "keyPressed: " << keyPressed << " newPage: " << newPage << " toContinue: " << toContinue << endl;
    }
}
...