【问题标题】:C++ MFC add combo box string item from a widget IDC ++ MFC从小部件ID添加组合框字符串项
【发布时间】:2012-10-02 07:47:24
【问题描述】:

我在我的 MFC 项目中的 MSVC 2010 pro 的 gui 编辑器中添加了一个组合框。我有一个从外部来源获取的字符串列表,并希望将它们添加到我的组合框中。我搜索了一段时间,每个帖子似乎都建议我需要使用 CComboBox 类,但是,我不知道如何从 gui 编辑器中的组合框元素的资源 ID 中获取类变量。

总之,我如何将字符串添加到我的组合框,无论是使用宏(如CB_ADDSTRING(RESOURCE_ID, "my string");)还是使用CComboBOx(如CComboBox::GetObject(RESOURCE_ID)->AddString("blah");)。

我不怎么做win32 api/mfc编程,只是开始摆弄它。

【问题讨论】:

    标签: winapi mfc combobox ccombobox


    【解决方案1】:

    satuon的回答是win32的做事方式。如果您想走更多 MFC 路线,请继续阅读。

    如果只有几个,您可以使用组合的“数据”属性直接在资源编辑器中添加字符串。

    如果没有,那么您需要在运行时掌握您的组合。资源编辑器将为您提供组合资源 id(例如 IDC_COMBO1),因此您可以使用它从对话框类中获取组合:

    BOOL CcombotestDlg::OnInitDialog()
    {
        CDialog::OnInitDialog();
    
        ((CComboBox*)GetDlgItem(IDC_COMBO1))->AddString("MyString");
    }
    

    请注意,您必须强制转换为 CComboBox,因为 GetDlgItem() 可用于获取任何类型的子控件。

    如果您要经常使用该组合,则可能值得为您的对话框类添加一个专用成员。您可以使用 Visual Studio 向导执行此操作。

    • 右键单击您的组合。
    • “添加变量”
    • 为变量命名,例如“m_MyCombo”
    • 完成

    如果您现在查看 .h 文件,您将看到一个新成员:

    CComboBox m_myCombo;
    

    MFC 会在DoDataExchange() 中为您连接,因此您无需担心。您现在可以在任何地方使用此成员来操纵您的组合。例如。

    BOOL CcombotestDlg::OnInitDialog()
    {
        CDialog::OnInitDialog();
    
        m_MyCombo.AddString("MyString");
    }
    

    【讨论】:

      【解决方案2】:

      如果你只在一个地方需要它,你可以使用一个临时指针:

      CComboBox * pComboBox = (CComboBox *) GetDlgItem(nComboBoxID);
      

      否则,您可以使用向导添加一个类变量,该变量将在创建对话框时在 DoDataExchange 期间映射到控件。

      【讨论】:

      • 除了 GazTheDestroyer 提供了更多详细信息之外,我会将您的答案标记为已接受。不过感谢您的回答和帮助:)
      • @OzBarry,是的,这是一个很好的答案。如果它是在我发布我的之前发布的,我就不会打扰了。
      【解决方案3】:

      您可以使用 SendDlgItemMessage:

      SendDlgItemMessage(hWnd, nComboBoxID, CB_ADDSTRING, 0, (LPARAM) (LPCTSTR) strText)
      

      【讨论】:

      • 我立即遇到的一些问题:参数过多(删除了 0 以使其正确)和 hWnd(或 this->m_hWnd 从我的代码中的 mfc 向导生成的 CDialogEx 扩展类内部) 不是 int (这是 SendDlgItemMessage 期望的第一个参数)
      • 正如 GazTheDestroyer 指出的那样,这更像是 Win32 api 做事的方式,我无法很好地混合。不过,感谢您的回答,我非常感谢您的帮助:)
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-06-29
      • 1970-01-01
      • 2012-03-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多