我在MFC项目的MSVC 2010专业版的gui编辑器中添加了一个组合框。我有一个我从外部源获取的字符串列表,并希望将它们添加到我的组合框中。我搜索了一段时间,每个帖子似乎都暗示我需要使用CComboBox类,但是,我不知道如何从gui编辑器中的组合框元素的资源ID获取类变量。
总之,如何使用宏(如CB_ADDSTRING(RESOURCE_ID, "my string");
)或使用CComboBOx(类似CComboBox::GetObject(RESOURCE_ID)->AddString("blah");
)将字符串添加到我的组合框中。
我没有做多少win32 api / mfc编程,只是开始摆弄它。
答案 0 :(得分:5)
如果只有少数,您可以使用组合的“数据”属性直接在资源编辑器中添加字符串。
如果没有,那么你需要在运行时获取你的组合。资源编辑器将为您提供组合资源ID(例如IDC_COMBO1
),因此您可以使用它来从对话框类中获取组合:
BOOL CcombotestDlg::OnInitDialog()
{
CDialog::OnInitDialog();
((CComboBox*)GetDlgItem(IDC_COMBO1))->AddString("MyString");
}
请注意,您必须转发CComboBox
,因为GetDlgItem()
可用于获取任何类型的子控件。
如果您要使用该组合,可能需要在对话框类中添加一个专用成员。您可以使用Visual Studio向导执行此操作。
如果您现在查看.h文件,您将看到一个新成员:
CComboBox m_myCombo;
MFC会在DoDataExchange()
为您解决此问题,因此您无需担心。您现在可以在任何地方使用此成员来操纵您的组合。例如
BOOL CcombotestDlg::OnInitDialog()
{
CDialog::OnInitDialog();
m_MyCombo.AddString("MyString");
}
答案 1 :(得分:3)
如果您只需要在一个位置使用临时指针:
CComboBox * pComboBox = (CComboBox *) GetDlgItem(nComboBoxID);
否则,您可以使用向导添加一个类变量,该变量将在创建对话框时在DoDataExchange期间映射到控件。
答案 2 :(得分:1)
您可以使用SendDlgItemMessage:
SendDlgItemMessage(hWnd, nComboBoxID, CB_ADDSTRING, 0, (LPARAM) (LPCTSTR) strText)