【问题标题】:C++ Getting data from a dialogboxC++ 从对话框中获取数据
【发布时间】:2013-04-24 15:26:32
【问题描述】:

我制作了一个简单的 win32 应用程序,它会打开一个带有编辑控件的对话框。在搜索了几个小时后,我找不到从这个编辑控件获取用户输入并将其存储在字符串中的方法。我认为代码here 可以满足我的要求(尚未对其进行测试),但我对此一无所知。所以解释或其他解决方案会很好。 (我使用的是 VC++ 2012)

其他solution我发现是C++ :S

好的,我创建了一个单独的消息循环,并在那里插入了代码。现在看起来像这样:

INT_PTR CALLBACK IP(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
{
    UNREFERENCED_PARAMETER(lParam);
    switch (message)
    {
    case WM_INITDIALOG:
        return (INT_PTR)TRUE;

    case WM_COMMAND:
        if (LOWORD(wParam) == IDCANCEL)
        {
            EndDialog(hDlg, LOWORD(wParam));
            return (INT_PTR)TRUE;
        }
        else if(LOWORD(wParam) == IDOK)
        {
            TCHAR szBuf[40];
            GetDlgItemText(hDlg, IDC_EDIT1, szBuf, 39);
              //Breakpoint here!
              //szBuf="127.0.0.1" as intended :)
            EndDialog(hDlg, LOWORD(wParam));
            return (INT_PTR)TRUE;
        }
        break;
    }
    return (INT_PTR)FALSE;
}

【问题讨论】:

  • 难怪你看不懂这篇文章,它用C#解决问题,而不是C++。寻找 C++ 解决方案
  • 我只能想象您对链接页面的困惑可能与它是 C# 而不是 C++ 的事实有关。那么尝试了哪些代码呢?发布该帖子,并提出关于没有按您预期工作的具体问题。你试过this 吗?

标签: winapi dialog


【解决方案1】:

尝试使用

UINT WINAPI GetDlgItemText(
  _In_   HWND hDlg,
  _In_   int nIDDlgItem,
  _Out_  LPTSTR lpString,
  _In_   int nMaxCount
);

像这样:

TCHAR szBuf[BUFF_LEN];
GetDlgItemText(hWnd, TXT_MYEDIT_ID, szBuf, BUFF_LEN - 1);

【讨论】:

  • sizeof(szBuf) 当 TCHAR 很宽时是个坏主意(因为它是 Unicode,VS2010 及更高版本中的默认字符集),如果它不是自动数组则更糟。如果使用自动数组,请使用 WIN32 提供的宏 _countof(),如果是动态缓冲区,请在 TCHAR 中指定实际缓冲区大小。
猜你喜欢
  • 2022-11-05
  • 1970-01-01
  • 2021-11-02
  • 1970-01-01
  • 1970-01-01
  • 2019-11-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多