获取组合框的文本 Win32 API C++(无 MFC)

问题描述 投票:0回答:3

我正在尝试设置一个组合框,以便用户可以从下拉菜单中选择一个选项,然后使用 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
3个回答
5
投票

对于 ComboBox_GetText 的调用,hwnd 参数必须是组合框本身的句柄,而不是对话框的句柄。您可以使用

GetDlgItem(hwnd, IDC_COMBO1);

获取 HWND

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

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

2
投票

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


0
投票

Furricio 的答案有效,但要小心。点击 ComboBox_GetCurSel() 链接,它显示(截至 2024 年 2 月 22 日):

获取当前选择的索引 参数: 控件的句柄。 (组合框 hwnd) 退货:无

这真是一个绝招!必须闪电般返回索引!当然,如果您查找宏的扩展,您会发现它只是调用 SendMessage (hwnd, CB_GETCURSEL, 0, 0),它返回一个 LRESULT,您可以安全地将其转换为 int 或 long。

© www.soinside.com 2019 - 2024. All rights reserved.