【问题标题】:Get the text of a combo box Win32 API C++ (NO MFC)获取组合框的文本 Win32 API C++ (NO MFC)
【发布时间】:2011-08-31 19:55:07
【问题描述】:

我正在尝试设置一个组合框,以便用户可以从下拉菜单中选择一个选项,然后检索用户使用 Win32 API C++ 编程而不是 MFC 选择的内容。我读了约翰的帖子here,但我什么也做不了。我可以为组合框设置文本,但我无法检索用户选择的内容。以下是我尝试过的几种方法:

                LPTSTR buf;
                ComboBox_GetText(hwnd, buf, 9);
                MessageBox(NULL, buf, NULL, MB_OK);

                char* buf;
                GetDlgItemText(hwnd, IDC_COMBO1, buf, 9);
                MessageBox(NULL, buf, NULL, MB_OK);

IDC_COMBO1 是组合框的 ID,hwnd 是当前对话框的 HWND。 我的带有组合框的对话框的代码是:

LANGUAGE LANG_NEUTRAL, SUBLANG_NEUTRAL IDD_DIALOG4 DIALOG 0, 0, 424, 181 STYLE DS_3DLOOK | DS_CENTER | DS_MODALFRAME | DS_SHELLFONT | WS_CAPTION | WS_VISIBLE | WS_POPUP | WS_SYSMENU CAPTION "Dialog" FONT 8, "Ms Shell Dlg" { COMBOBOX IDC_COMBO1, 113, 31, 119, 19, CBS_DROPDOWN | CBS_HASSTRINGS PUSHBUTTON "Button1", IDC_BUTTON1, 188, 112, 50, 14 }

我正在使用资源文件来执行此操作。提前致谢。

【问题讨论】:

  • 它以什么方式“不起作用”?它是如何失败的?错误代码是什么?
  • 它没有给我任何数据。我没有收到任何错误代码,它编译正确,只是在我调用消息框时不返回文本框中的数据。

标签: c++ winapi api text combobox


【解决方案1】:

对于 ComboBox_GetText 的调用,hwnd 参数必须是组合框本身的句柄,而不是对话框。你可以通过GetDlgItem(hwnd, IDC_COMBO1);获得那个HWND

此外,您不能将未初始化的指针传递给任一函数;您必须将指针传递给您创建的缓冲区。

            char buf[10];
            GetDlgItemText(hwnd, IDC_COMBO1, buf, 9);
            MessageBox(NULL, buf, NULL, MB_OK); 

【讨论】:

  • 我试着做char* buf; HWND Cbobox; Cbobox = GetDlgItem(hwnd, IDC_COMBO1); ComboBox_GetText(Cbobox, buf, 9); MessageBox(NULL, buf, NULL, MB_OK); 但这并没有让我到任何地方,它仍然给出了一个空白的返回字符串。这就是你的想法吗?
  • @Shadowalker,我在你发表评论前几分钟就意识到了问题,请参阅我的更新。
  • @David Heffernan 因为 ComboBox_GetText 是一个扩展为 GetWindowText 的宏,我怀疑你是 100% 正确的。这让我重新审视了自己的答案,希望这次我找到了根本原因。
  • 恐怕就是这么简单的事情。谢谢,成功了。
  • @Mark Gahh 我应该看到的!!
【解决方案2】:

如果我没记错的话,您需要使用ComboBox_GetCurSel 来确定选择了哪个项目,然后您可以使用ComboBox_GetLBText 来获取实际文本。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-03-17
    • 1970-01-01
    • 1970-01-01
    • 2016-10-29
    • 2010-11-08
    • 1970-01-01
    • 2013-06-21
    • 2021-12-07
    相关资源
    最近更新 更多