iampradeepsharma Ответов: 1

Данные не отображаются в выпадающем списке .


всем привет ,

Я пытаюсь заполнить некоторые данные в элементе управления combobox, но когда я запускаю программу, я не вижу в ней никаких данных .
Вот этот фрагмент :

HWND hcombo  = CreateWindow(TEXT("COMBOBOX"), NULL, WS_VISIBLE | WS_CHILD  | WS_TABSTOP|CBS_DROPDOWNLIST|CBS_HASSTRINGS, 24, 8, 137, 25, hWnd, (HMENU) 1, NULL, NULL);

SendMessage(hcombo, CB_ADDSTRING, 0, (LPARAM) TEXT("Item1"));
SendMessage(hcombo, CB_ADDSTRING, 0, (LPARAM) TEXT("Item2"));
SendMessage(hcombo, CB_ADDSTRING, 0, (LPARAM) TEXT("Item3"));

Хотя если я установлю курсор на какой-то индекс, как в SendMessage(hcombo, CB_SETCURSEL, 0, 0);
Я действительно вижу точные данные в combobox, но единственный элемент данных rest не заполняется в нем .

Я ищу помощи в этом вопросе .
большое спасибо

Richard MacCutchan

Я только что попробовал ваш код, и он работает нормально. Вам нужно проверить с помощью вашего отладчика, чтобы увидеть, что происходит.

iampradeepsharma

имеет ли это отношение к тому, где был выполнен код, я имею в виду, что я поместил этот код внутри WM_CREATE внутри switch case . Хотя я вижу на нескольких других сайтах , они поместили его под WM_INITDIALOG . Хотя я и пытался поставить его под него, но WM_INITDIALOG никогда не вызывается . У вас есть какие - нибудь идеи по этому поводу?
Спасибо Ричард

Richard MacCutchan

Это зависит от вашего приложения. Если это обычное оконное приложение, то WM_CREATE наверное, это хорошее место. Если это диалог, то WM_INITDIALOG все должно быть в порядке.

Возможно, что в вашем коде есть что-то еще, что вызывает проблему, но, не видя больше, невозможно сказать, что это может быть. Как я уже предлагал ранее, вы должны использовать свой отладчик, чтобы захватить немного больше информации.

iampradeepsharma

Действительно ли вы видите 3 элемента, заполненных внутри поля со списком, как с этим кодом, который я пробовал на двух машинах, но безрезультатно .

Richard MacCutchan

Как я уже говорил раньше, - он прекрасно работает", что означает, что он работает правильно. Таким образом, вы должны делать что-то еще в своем коде, что портит или иным образом разрушает что-то в вашем ComboBox.

iampradeepsharma

Ричард, было бы очень полезно, если бы вы могли поделиться своим файлом со мной (если вы не возражаете), чтобы я мог работать непосредственно на своей машине .
спасибо!

Richard MacCutchan

Здесь нечем поделиться. Я просто вставил ваш код в программу после того, как окно было создано, и это сработало.

iampradeepsharma

ладно СПС

iampradeepsharma

Итак, проблема была в размере окна 24, 8, 137 , 25, это 25 было причиной ..Я довел его до 100 и обнаружил, что он может показывать в нем 3 элемента . Спасибо Ричарду за то, что помог мне .

Richard MacCutchan

Наверное, я неправильно понял ваш вопрос. Он всегда показывал элементы только тогда, когда я нажимал, чтобы развернуть выпадающий список.

1 Ответов

Рейтинг:
2

Michael Haephrati

Основанный на эта статья[^], чтобы заставить ваш код работать, вам нужна дополнительная инициализация, как показано в приведенном ниже примере:

int xpos = 100;            // Horizontal position of the window.
int ypos = 100;            // Vertical position of the window.
int nwidth = 200;          // Width of the window
int nheight = 200;         // Height of the window
HWND hwndParent = m_hwnd; // Handle to the parent window

HWND hWndComboBox = CreateWindow(WC_COMBOBOX, TEXT(""),
	CBS_DROPDOWN | CBS_HASSTRINGS | WS_CHILD | WS_OVERLAPPED | WS_VISIBLE,
	xpos, ypos, nwidth, nheight, hwndParent, NULL, HINST_THISCOMPONENT,
	NULL);

SendMessage(hcombo, CB_ADDSTRING, 0, (LPARAM)TEXT("Item1"));
SendMessage(hcombo, CB_ADDSTRING, 0, (LPARAM)TEXT("Item2"));
SendMessage(hcombo, CB_ADDSTRING, 0, (LPARAM)TEXT("Item3"));

// Send the CB_SETCURSEL message to display an initial item
//  in the selection field  
SendMessage(hWndComboBox, CB_SETCURSEL, (WPARAM)2, (LPARAM)0);