簡體   English   中英

Win 32 API文本輸入

[英]Win 32 API Textinput

對於我的信息學研究,我必須使用Windows API編寫一個Space Invaders Clone。

我們的任務之一是編寫並顯示一個效果很好的Highscore列表。 如果您失去了所有學分,則應該可以將您的名字寫到高分列表中(如果您有足夠的分數)。 Windows API很難獲得文本輸入,因此我編寫了一個自己的版本,該版本無法正常運行。 我使用pName編寫名稱並將其保存到名為“ Name”的數組中。 此數組用於將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;
}

通常,Windows中的文本輸入是通過編輯控件完成的,該控件允許用戶鍵入編輯控件。 若要獲取控件的內容,請使用GetWindowText API傳入編輯控件的HWND。

忘記GetKeyState

如果要執行所有自定義呈現,請處理WM_CHAR消息。

如果可以使用小部件(子窗口),則最好使用Larry建議的EDIT控件。

我發現一個很簡單的靈魂。 我犯了一個嚴重的錯誤,經過數小時的編程后看不到:我再次從頭開始再次初始化字符串pName。 所以我將其移至構造函數,現在一切正常。 為了獲得更好的感性,您必須進行更改

(GetKeyState(VK_LETTER))

(HIWORD(GetAsyncKeyState(VK_LETTER)))

現在效果更好!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM