Win 32 API Textinput - PullRequest
       1

Win 32 API Textinput

0 голосов
/ 11 марта 2012

Для изучения информатики мне нужно написать клон Space Invaders с использованием Windows API.

Одна из наших задач - написать и отобразить список рекордов, который работает очень хорошо. Если вы потеряли все кредиты, вы сможете записать свое имя в список рекордов (если у вас достаточно очков). Windows API не имеет простой возможности для ввода текста, поэтому я написал собственную версию, которая работает не так, как я хочу. Я использую pName, чтобы написать имя и сохранить его в массив с именем «Имя». Этот массив используется для сохранения Highscore и имени вместе в Highscore.txt. Прогресс экономии пока работает нормально.

Но моя проблема сейчас такова: Я могу писать письма, но они сортируются автоматически. Так что, если я введу: asdf отсортировано: adfs

Я не вижу кода, который делает что-то подобное, так в чем моя вина?

Спасибо, ребята! Встречает Майкла

bool HighScore::EnterName(HDC hdc)
{

    #define VK_A 0x41 
    #define VK_B 0x42
    #define VK_C 0x43
    #define VK_D 0x44
    #define VK_E 0x45
    #define VK_F 0x46 
    #define VK_G 0x47
    #define VK_H 0x48
    #define VK_I 0x49
    #define VK_J 0x4A
    #define VK_K 0x4B
    #define VK_L 0x4C 
    #define VK_M 0x4D
    #define VK_N 0x4E
    #define VK_O 0x4F
    #define VK_P 0x50
    #define VK_Q 0x51
    #define VK_R 0x52
    #define VK_S 0x53
    #define VK_T 0x54 
    #define VK_U 0x55
    #define VK_V 0x56
    #define VK_W 0x57
    #define VK_X 0x58
    #define VK_Y 0x59
    #define VK_Z 0x5A


        string pName;

            if(GetKeyState(VK_A)) pName.append("A"); if(GetKeyState(VK_B)) pName.append("B");
            if(GetKeyState(VK_C)) pName.append("C"); if(GetKeyState(VK_D)) pName.append("D");
            if(GetKeyState(VK_E)) pName.append("E"); if(GetKeyState(VK_F)) pName.append("F");
            if(GetKeyState(VK_G)) pName.append("G"); if(GetKeyState(VK_H)) pName.append("H");
            if(GetKeyState(VK_I)) pName.append("I"); if(GetKeyState(VK_J)) pName.append("J");
            if(GetKeyState(VK_K)) pName.append("K"); if(GetKeyState(VK_L)) pName.append("L");
            if(GetKeyState(VK_M)) pName.append("M"); if(GetKeyState(VK_N)) pName.append("N");
            if(GetKeyState(VK_O)) pName.append("O"); if(GetKeyState(VK_P)) pName.append("P");
            if(GetKeyState(VK_Q)) pName.append("Q"); if(GetKeyState(VK_R)) pName.append("R");
            if(GetKeyState(VK_S)) pName.append("S"); if(GetKeyState(VK_T)) pName.append("T");
            if(GetKeyState(VK_U)) pName.append("U"); if(GetKeyState(VK_V)) pName.append("V");
            if(GetKeyState(VK_W)) pName.append("W"); if(GetKeyState(VK_X)) pName.append("X");
            if(GetKeyState(VK_Y)) pName.append("Y"); if(GetKeyState(VK_Z)) pName.append("Z");

            TextOut(hdc, 20, 200, "TRAGE DEINEN NAMEN EIN",22);

            if(GetAsyncKeyState(VK_BACK)) pName.erase(pName.begin() + pName.length()-1);

            sprintf(Name,"%s", pName.c_str());
            TextOut(hdc, 50,250,Name, strlen(Name));

            return true;
}

Ответы [ 3 ]

4 голосов
/ 11 марта 2012

Обычно ввод текста в Windows осуществляется с помощью элемента управления для редактирования, который позволяет пользователю вводить данные в элемент управления для редактирования.Чтобы получить содержимое элемента управления, вы используете API GetWindowText, передавая HWND элемента управления для редактирования.

1 голос
/ 11 марта 2012

Забудьте о GetKeyState.

Если вы делаете весь пользовательский рендеринг, обработайте сообщение WM_CHAR.

Если вы можете использовать виджеты (дочерние окна), лучше всего подойдет элемент управления EDIT, как предложил Ларри.

0 голосов
/ 14 марта 2012

Я нашел душевное настроение, которое было довольно простым.Я сделал большую ошибку, которую не смог увидеть после нескольких часов программирования: я снова запускаю строку pName ang с самого начала.Поэтому я перенес его в конструктор, и теперь все работает нормально.Чтобы получить лучшую чувствительность, вы должны изменить

(GetKeyState(VK_LETTER))

на

(HIWORD(GetAsyncKeyState(VK_LETTER)))

Теперь это работает намного лучше!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...