2017-08-03 51 views
1

我是新的編程API與C + +。添加新值時創建組合框時遇到問題。這是我的代碼:ComboBox在Win32Api C++

void inline createName(HWND hwnd) { 
    CreateWindow(TEXT("STATIC"), TEXT("Name"), 
     WS_VISIBLE | WS_CHILD, 
     10, 10, 100, 20, 
     hwnd, NULL, NULL, NULL 
    ); 
HWND comboBox = CreateWindow(TEXT("COMBOBOX"), NULL, 
    CBS_DROPDOWN | WS_CHILD | WS_VISIBLE, 
    120, 10, 200, 20, 
    hwnd, NULL, NULL, NULL 
    ); 
TCHAR Names[2][50] = 
{ 
    TEXT("FIRST VALUE"), TEXT("SECOND VALUE") 
}; 

for (int index = 0; index < 2; index++) { 

    //Add string to combobox 
    SendMessage(comboBox, (UINT)CB_ADDSTRING, (WPARAM)0, (LPARAM)Names[index]); 
} 
SendMessage(comboBox, CB_SETCURSEL, (WPARAM)0, (LPARAM)0); 

} 當我運行這段代碼,它只能說明我把CB_SETCURSEL的價值,但我不能選擇其他值。這意味着下拉按鈕不起作用。 我從這裏得到的代碼: https://msdn.microsoft.com/en-us/library/windows/desktop/hh298364(v=vs.85).aspx

在此先感謝!

編輯:這是我的WinProc功能,我只完成了GUI部分。

LRESULT CALLBACK WndProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam) { 

switch (msg) { 
case WM_CREATE: 
    createMenuBar(hwnd); 
    createName(hwnd); 
    createSex(hwnd); 
    createLanguage(hwnd); 
    createAddress(hwnd); 
    createButton(hwnd); 
    break; 
case WM_CLOSE: 
    DestroyWindow(hwnd); 
    break; 
case WM_DESTROY: 
    PostQuitMessage(0); 
    break; 
default: 
    return DefWindowProc(hwnd, msg, wParam, lParam); 
} 
return 0; 

}

+0

請向我們展示您的WndProc功能。您在發送'CB_SETCURSEL'消息時沒有放置任何值,您只需在組合框項目列表中選擇一個字符串即可。這按預期運行,您的問題在別處。 – Ron

+0

已編輯。是的,組合框只顯示我用CB_SETCURSEL設置的字符串。當我點擊箭頭時,它應該放棄一個帶有「SECOND VALUE」字符串的列表。 – sasorihuriko

+0

上面的代碼產生[期望的行爲](http://i.imgur.com/fUMtZZ1.png)。問題在別處。 – Ron

回答

0

這對組合框的新用戶一個非常普遍的問題。組合框很奇怪,因爲高度必須包含下拉列表的高度,而不僅僅是頂部的編輯控件。

我很高興在評論中看到你已經知道了這一點。我添加了這個,所以未來的讀者有更好的機會發現答案。