2011-08-31 47 views
1

我想設置一個組合框,以便用戶可以從下拉菜單中選擇一個選項,然後檢索用戶使用Win32 API C++編程選擇的內容,而不是MFC。我讀了約翰的帖子here,我什麼都不能工作。我可以設置組合框的文本,但我無法檢索用戶選擇的內容。以下是我已經嘗試了一些方法:獲取組合框的文本Win32 API C++(NO MFC)

   LPTSTR buf; 
       ComboBox_GetText(hwnd, buf, 9); 
       MessageBox(NULL, buf, NULL, MB_OK); 

而且

   char* buf; 
       GetDlgItemText(hwnd, IDC_COMBO1, buf, 9); 
       MessageBox(NULL, buf, NULL, MB_OK); 

IDC_COMBO1是組合框的ID和hwnd是當前對話框的HWND。 我與組合框對話框的代碼是:

LANGUAGE LANG_NEUTRAL, SUBLANG_NEUTRAL IDD_DIALOG4 DIALOG 0, 0, 424, 181 STYLE DS_3DLOOK | DS_CENTER | DS_MODALFRAME | DS_SHELLFONT | WS_CAPTION | WS_VISIBLE | WS_POPUP | WS_SYSMENU CAPTION "Dialog" FONT 8, "Ms Shell Dlg" { COMBOBOX IDC_COMBO1, 113, 31, 119, 19, CBS_DROPDOWN | CBS_HASSTRINGS PUSHBUTTON "Button1", IDC_BUTTON1, 188, 112, 50, 14 }

我使用一個資源文件來做到這一點。提前致謝。

+0

它以什麼方式「不起作用」?它如何失敗?什麼是錯誤代碼? –

+0

它沒有給我任何數據。我沒有收到任何錯誤代碼,它編譯正確,它只是在我調用消息框時不會返回文本框中的數據。 – llk

回答

4

對於ComboBox_GetText的調用,hwnd參數必須是組合框本身的句柄,而不是對話框。你可以得到該HWND GetDlgItem(hwnd, IDC_COMBO1);

此外,您不能將未初始化的指針傳遞給任一函數;您必須將指針傳遞給您創建的緩衝區。

  char buf[10]; 
      GetDlgItemText(hwnd, IDC_COMBO1, buf, 9); 
      MessageBox(NULL, buf, NULL, MB_OK); 
+0

這是真的,但肯定GetDlgItemText會工作? –

+0

我試過'char * buf; HWND Cbobox; Cbobox = GetDlgItem(hwnd,IDC_COMBO1); ComboBox_GetText(Cbobox,buf,9); MessageBox(NULL,buf,NULL,MB_OK);'但沒有讓我到任何地方,它仍然是一個空白的返回字符串。這是你想到的嗎? – llk

+1

@Shadowalker,在你評論之前,我意識到了這個問題,看看我的更新。 –