2012-10-11 45 views
2

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

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

我不做很多的win32 api/mfc编程,只是开始摆弄它。

回答

5

satuon的回答是win32的做事方式。如果你想要更多的MFC路线然后继续阅读。

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

如果不是,那么您需要在运行时获得组合。资源编辑器将会给你连击资源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"); 
} 
1

您可以使用SendDlgItemMessage:

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

一些问题,我马上碰到:太多的参数(除去0得到它的权利),和的hWnd(或这个 - >从我的代码中的MFC向导生成我CDialogEx扩展类里面m_hWnd)是不是int(SendDlgItemMessage期望作为第一个参数) – OzBarry

+0

正如GazTheDestroyer指出的那样,更重要的是Win32 api的方式来做事情,我无法很好地混合。感谢您的回答,但是,我真的很感谢帮助:) – OzBarry

3

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

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

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

+0

我会标记你的答案,除了GazTheDestroyer接受比其他更多的细节。感谢您的答案和帮助,虽然:) – OzBarry

+0

@OzBarry,是的,这是一个很好的答案。如果它是在我发布我的之前发布的,我不会感到困扰。 –