2012-10-11 49 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,是的,這是一個很好的答案。如果它是在我發佈我的之前發佈的,我不會感到困擾。 –