在下拉菜单中获取选定的项目Win32

时间:2018-10-10 07:36:04

标签: winapi dropdown

每次下拉列表中有更改时,如何获取当前下拉列表的选定值?

case WM_COMMAND:

        break;

1 个答案:

答案 0 :(得分:2)

combo box通过发送CBN_SELCHANGE消息来通知其父项有关选择的更改。您可以通过发送CB_GETCURSEL消息来获取当前选定的项目索引。可以通过发送CB_GETLBTEXT消息来获得项目文本:

case WM_COMMAND:
    switch(HIWORD(wParam))
    {
        case CBN_SELCHANGE:
        {
            HWND const control{ (HWND)lParam };
            int const index{ ::SendMessage(control, CB_GETCURSEL, nullptr, nullptr) };
            if (index == CB_ERR)
            {
                // Handle error
                return 0;
            }
            // [optional] Retrieve text of selected item
            int const len{ (int)::SendMessage(control, CB_GETLBTEXTLEN, (WPARAM)index, nullptr) };
            if (len == CB_ERR)
            {
                // Handle error
                return 0;
            }
            std::vector<wchar_t> buffer(len + 1);
            ::SendMessageW(control, CB_GETLBTEXT, (WPARAM)index, (LPARAM)buffer.data());

            return 0;
        }
        case default:
            break;
    }
    break;