[英]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.