21xrx.com
2024-09-20 06:19:35 Friday
登录
文章检索 我的文章 写文章
在C++中使用弹出式输入框并读取框内文本
2023-07-12 14:02:10 深夜i     --     --
C++ 弹出式输入框 读取文本

在C++编程中,有时候会需要使用弹出式输入框,并从框内读取文本内容。这种功能通常用于用户输入相关信息并进行处理,比如制作一个简单的表单应用程序。

在Windows操作系统下,我们可以使用Windows API提供的DialogBox()函数创建弹出式输入框,其中第一个参数为应用程序实例句柄,第二个参数为弹出框的资源ID号,第三个参数为父窗口的句柄,通常为NULL即可。

当用户点击“确定”按钮时,我们需要通过GetDlgItemText()函数获取用户输入的文本内容,并存储到一个变量中,以供后续的处理使用。

以下为一个简单的示例代码:


#include <windows.h>

#include <string>

// 弹出式输入框的资源ID

#define IDD_INPUT_DIALOG  101

// 用于存储用户输入的内容

std::string g_strInput = "";

// 弹出式输入框的回调函数

BOOL CALLBACK InputDlgProc(HWND hDlg, UINT uMsg, WPARAM wParam, LPARAM lParam)

{

  switch (uMsg)

  {

  case WM_COMMAND:

    switch (LOWORD(wParam))

    {

    case IDOK:

      // 用户点击了“确定”按钮,获取输入框文本

      char szInput[256] = { 0 };

      GetDlgItemTextA(hDlg, IDC_INPUT_EDIT, szInput, sizeof(szInput) - 1);

      g_strInput = szInput;

      // 关闭对话框

      EndDialog(hDlg, 1);

      break;

    case IDCANCEL:

      // 用户点击了“取消”按钮,直接关闭对话框

      EndDialog(hDlg, 0);

      break;

    }

    break;

  }

  return FALSE;

}

int main()

{

  // 显示弹出式输入框

  int nRet = DialogBox(GetModuleHandle(NULL), MAKEINTRESOURCE(IDD_INPUT_DIALOG),

    NULL, InputDlgProc);

  // 判断用户是否点击了“确定”按钮

  if (nRet == 1)

  {

    // 用户输入了内容,输出到控制台

    printf("You input: %s\n", g_strInput.c_str());

  }

  else

  {

    // 用户取消了输入,输出提示信息

    printf("You canceled the input.\n");

  }

  return 0;

}

在上述示例代码中,我们使用了预定义的IDC_INPUT_EDIT常量来获取输入框的句柄,并使用了GetDlgItemTextA()函数来获取用户输入的文本内容。解释一下其中的参数含义:

- hDlg:表示要获取文本的控件所在的对话框句柄。

- IDC_INPUT_EDIT:表示要获取文本的控件ID。

- szInput:表示要存储获取到的文本内容的缓冲区。

- sizeof(szInput) - 1:表示缓冲区的大小。

除此之外,我们还定义了一个全局的std::string类型的变量g_strInput,用于存储用户输入的内容。当用户点击“确定”按钮时,我们通过GetDlgItemTextA()函数获取输入文本,并将其赋值给g_strInput变量。

在主函数中,我们通过DialogBox()函数显示弹出式输入框,获取用户输入的文本内容,并输出到控制台。如果用户取消了输入,输出提示信息即可。

总的来说,在C++编程中使用弹出式输入框并读取框内文本非常简单。只需使用Windows API提供的相关函数即可,值得注意的是,GetDlgItemText()函数只能获取ANSI字符集的文本内容,如果需要获取Unicode字符集的文本,则需要使用GetDlgItemTextW()函数。

  
  

评论区

{{item['qq_nickname']}}
()
回复
回复