【发布时间】:2019-04-29 20:52:10
【问题描述】:
目前我正在尝试制作一个程序,允许我在不同的文本框中输入文本。从那里,我有一个按钮可以在下面的文本框中显示文本。我遇到的问题是当我单击按钮时,该输出文本框中没有显示任何内容。
对于这个简单的程序,我使用 C 和 Windows API 来执行此操作。
为文本框声明变量
#define GENERATE_BUTTON 1
HMENU hMenu;
HWND hFirst,hLast;
用于按钮的 Generate Button Case
LRESULT CALLBACK WindowProcedure(HWND hWnd, UINT msg, WPARAM wp, LPARAM lp)
{
switch ( msg)
{
case WM_COMMAND:
switch(wp)
{
case 1:
MessageBeep(MB_OK);
break;
case GENERATE_BUTTON:
char Fname[30],Lname[30],out[200];
GetWindowText(hFirst,Fname,30);
GetWindowText(hLast,Lname,30);
strcpy(out,Fname);
strcat(out,Lname);
SetWindowText(hOut,out);
break;
}
文本框代码
void AddControls(HWND hWnd)
{
CreateWindowW(L"static",L"First Name:",WS_VISIBLE | WS_CHILD,10,10,100,20,hWnd,
NULL,NULL,NULL);
hFirst = CreateWindowW(L"Edit",L"",WS_VISIBLE | WS_CHILD , 90,10,130,20,hWnd,
NULL,NULL,NULL);
CreateWindowW(L"static",L"Last Name:",WS_VISIBLE | WS_CHILD,10,40,100,20,hWnd,
NULL,NULL,NULL);
hLast = CreateWindowW(L"Edit",L"",WS_VISIBLE | WS_CHILD , 90,40,130,20,hWnd,
NULL,NULL,NULL);
hOut = CreateWindowW(L"Edit","",WS_VISIBLE | WS_CHILD | WS_BORDER, 25,300,500,150,hWnd,NULL,NULL,NULL);
CreateWindowW(L"Button",L"Display",WS_VISIBLE | WS_CHILD,250,410,70,20,hWnd,{HMENU}GENERATE_BUTTON,NULL,NULL);
我只是希望它显示名字和姓氏,但到目前为止,当我单击显示按钮时它什么也没做。
【问题讨论】:
-
您的
WindowProcedure()应该生成编译器错误,因为您的switch有多个case语句具有相同的数值1。摆脱case 1并移动MessageBeep()case GENERATE_BUTTON内部。 -
此外,这段代码还有一些其他缺陷:1. 混合 ANSI/Unicode,2. strcpy(out, Fname) 和 strcpy(out, Lname) 不会产生你想要的结果