【问题标题】:Cannot Display Text input in a newText Box无法在新文本框中显示文本输入
【发布时间】: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) 不会产生你想要的结果

标签: c windows winapi


【解决方案1】:

我再次运行了您的代码。有一些错误需要改正。

CreateWindowW(L"Button",L"Display",WS_VISIBLE | WS_CHILD,250,500,70,20,hWnd,(HMENU)GENERATE_BUTTON,NULL,NULL);

按钮控件不能放在编辑控件中,否则无效。

我没有看到您的hOut 声明。也许你需要注意它。

正如@Remy Lebeau 所说,删除case 1。

这是我为获得您需要的结果而修改的代码。

case GENERATE_BUTTON:
{
   TCHAR Fname[512], Lname[512], out[512];
   GetWindowText(hFirst, Fname, 512);
   GetWindowText(hLast, Lname, 512);
   wcscpy_s(out, 512, Fname);
   wcscat_s(out, 512, Lname);
   SetWindowText(hOut, out);

   MessageBeep(MB_OK);
   break;
}

【讨论】:

  • "按钮控件不能放置在编辑控件中" - OP 的代码并没有尝试这样做。 Edit 控件和 Button 被创建为同一父级的子级,而不是 Button 作为 Edit 控件的子级。
  • @Remy Lebeau 我知道,当我尝试用他的代码复现时,发现他的按钮控件在编辑控件中,主要是坐标问题,所以我提醒他注意这个点。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-02-08
  • 2019-02-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多