在 Visual Studio MFC 中,我可以在组合框中包含文本但在代码中获取 int 吗?

Posted

技术标签:

【中文标题】在 Visual Studio MFC 中,我可以在组合框中包含文本但在代码中获取 int 吗?【英文标题】:In Visual Studio MFC can I have text in a combo box but get an int in the code? 【发布时间】:2014-10-24 04:24:52 【问题描述】:

我在 MFC 中将预填充下拉菜单设置为组合框。代码需要一个介于 0 和 15 之间的值,但这些值实际上代表时间。有没有办法让组合框的显示显示时间(字符串)但仍返回该点的整数值?

我可以制作一个字符串值的下拉列表,然后使用 switch 语句根据返回的字符串值选择 int 值,但这似乎已经内置了。

我对 MFC 很陌生,大部分时间都在磕磕绊绊,所以我很可能错过了一个明显的解决方案。

【问题讨论】:

【参考方案1】:

您可以使用SetItemData 为组合框中的每个项目设置一个无符号整数值。

switch 语句不起作用,因为 switch 语句不适用于字符串。不过你可以使用std::mapstd::unordered_map

【讨论】:

我不会将 MFC 集合与其他集合混合...我建议使用 CMap 而不是 std::map ... @flaviu2 Mark 的回答不建议将 MFC 集合与其他集合混合。 CCoboBox 不是一个集合,而是 WIN32 组合框的一个包装器。所以在这里使用 CMap 或 std::map 并不合适。 所以这确实有效,但是在测试东西时我似乎找到了另一种方法(我是一个没有早点尝试的白痴)。我留下了从 CComboBox 调用 int 的代码,但转到资源视图中的对话框并编辑框的属性以列出我想要显示的值。然后显示所需的值,但在调用时仍输出一个整数。我不确定一种方法是好是坏,但我想我会提到我确实找到了第二种方法。【参考方案2】:
You need to convert the integer to string and then put in the combo box .

Put the following code in the OnInitDialog function



CComboBox* pCombo = (CComboBox*)GetDlgItem(IDC_COMBO);
CWnd* pComboEdit = pCombo->GetWindow(GW_CHILD);
if (pComboEdit != NULL)
    pComboEdit->ModifyStyle(0, ES_NUMBER);
((CEdit*)pComboEdit)->LimitText(2);

CString str;
for (int i = 0; i <= 12; i++)

    str.Format(L"%d", i);
    pCombo->AddString(str);

【讨论】:

以上是关于在 Visual Studio MFC 中,我可以在组合框中包含文本但在代码中获取 int 吗?的主要内容,如果未能解决你的问题,请参考以下文章

我可以使用 Visual Studio 2008 编译旧版 MFC 应用程序吗?

我们可以在基于对话框的 mfc Visual Studio 2010 中绘制形状(线、圆等)吗?

MFC 包含在不同风格的 Visual Studio 中

Visual Studio MFC CListCtrl 复选框 - 空格键

Visual Studio 2008 未加载 MFC dll 符号

如何在 Visual Studio 2017 中创建 Visual c++ MFC 控制台项目