![]() |
Модераторы: feodorv, GremlinProg, xvr, Fixin |
![]() ![]() ![]() |
|
rainbow86 |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 72 Регистрация: 27.10.2005 Репутация: нет Всего: нет |
Подскажите с помощью какой функции заполняется drop-down лист сombobox'a
Нашел только SendMessage(CB_ADDSTRING), может чего-то есть поудобней??? ![]() |
|||
|
||||
GremlinProg |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2706 Регистрация: 9.8.2005 Где: Тюмень Репутация: 99 Всего: 106 |
есть ещё CB_INSERTSTRING, но эт почти тож самое, не пойму, чем неудобно-то?
-------------------- "Гений всегда разумнее, чем умнее. Ум — это машина, разум — водитель этой машины." |
|||
|
||||
Fixin |
|
|||
![]() Ёжик ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 1357 Регистрация: 6.1.2004 Репутация: 8 Всего: 18 |
В <windowsx.h> есть макросы, кторые "удобняют" работу со стандартными элементами управления.
Добавлено @ 21:02 Вот:
|
|||
|
||||
AntoshaMarchenko |
|
||||
Новичок Профиль Группа: Участник Сообщений: 15 Регистрация: 22.5.2006 Репутация: нет Всего: нет |
Простите, за ламерство, никак не могу добавить в комбо-бокс строку. Комбобокс находится в диалоговом окне.
(win 32, VisualStudio) оконная процедура диалога :
С лист боксом всё работает нормально. А в комбобобкс ничего не добавляется, хоть тресни. Подскажите плиз, что делать. Пробовал через SendMessage, ничё не получается.
на вас уповаю |
||||
|
|||||
Earnest |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5962 Регистрация: 17.6.2005 Где: Рязань Репутация: 33 Всего: 183 |
Да вроде нормальный код.
Можно посмотреть, что SendMessage возвращает. Должна возвращать номер добавленного итема. Еще проверь 2 вещи: 1) IDC_COMBO1 действительно ид-р твоего комбобокса. Спаем посмотри. 2) А вдруг у тебя комбобокс OwnerDraw? На всякий случай... -------------------- ... |
|||
|
||||
AntoshaMarchenko |
|
|||
Новичок Профиль Группа: Участник Сообщений: 15 Регистрация: 22.5.2006 Репутация: нет Всего: нет |
Пасиба.
к сожалению от этого не легче СендМеседж возвращает всё как надо. IDC_COMBO1 - правильный АйПи, я через него комбо бокс открывал (но ни одного элемента в нём не было). Нет, не OwnerDraw Может быть в какой-нить параметре диалогового окна проблема? Это сообщение отредактировал(а) AntoshaMarchenko - 22.5.2006, 22:02 |
|||
|
||||
AntoshaMarchenko |
|
|||
Новичок Профиль Группа: Участник Сообщений: 15 Регистрация: 22.5.2006 Репутация: нет Всего: нет |
Выяснился такой момент:
Строки добавлять всё же получается, но они просто не отображаются. Добавляю значит в комбо-бокс четыре строки. Если одну из них выделить програмно (посредством CB_SETCURSEL), то она будет отображаться, но остальные - нет. И даже можно, выделив комбо-бокс, пролистывать строки стрелками клавиатуры. Тоесть получается отображается только выделенная строка. Но почему остальные строки не выпадают то ????????? (список выпадает, но в нём одна строка, которая была выделена) подскажите плизз |
|||
|
||||
GremlinProg |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2706 Регистрация: 9.8.2005 Где: Тюмень Репутация: 99 Всего: 106 |
Комбобокс - штука опасная, это в MFC или WTL мы просто добавляем строки, а здесь нужно еще следить за вываливающимся списком. В твоем случае у списка просто стоит нулевая длина. После добавления строк выстави её к примеру на 100.
Добавлено @ 23:07 под длиной, я имел ввиду высоту ) -------------------- "Гений всегда разумнее, чем умнее. Ум — это машина, разум — водитель этой машины." |
|||
|
||||
AntoshaMarchenko |
|
||||
Новичок Профиль Группа: Участник Сообщений: 15 Регистрация: 22.5.2006 Репутация: нет Всего: нет |
А я кстати пробовал, но ничего не получилось
![]()
Выдаёт: "CB_SETMINVISIBLE" undeclares identifier То что в мсдн было написано, я ессно инклюдил (Commctrl.h) Безрезультатно. А ещё пишут:
Простите за дремучесть, я не сильно понял, чё за манифест такой. Вписал на всякий случай в линкер - инпут, но естессна безтолку, компилятор то просто константу найти не может. во всём мсдне примеров с этой командой нет, хоть плачь. чё делать то, подскажите. |
||||
|
|||||
Earnest |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5962 Регистрация: 17.6.2005 Где: Рязань Репутация: 33 Всего: 183 |
Все с тобой ясно.
Комбобокс у тебя в ресурсах диалога? Тогда сходи туда, кликни на кнопку, и растяни как надо появившийся прямоугольник. Если создаешь динамически, то можно выставить высоту и явно, но ты не то сообщение используешь. К сожалению, сейчас MSDN нет под рукой посмотреть, но там должно быть что-то про height: SETDROPDOWNHEIGHT - как-то так. Просмотри все сообщения CB_, наверняка найдешь. Про манифест забудь, не имеет отношения к вопросу. Кстати, такий вопрос регулярно задается на форуме, только чаще в MFC-разделе. Почему-то многие на эти грабли наступают ![]() -------------------- ... |
|||
|
||||
GremlinProg |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2706 Регистрация: 9.8.2005 Где: Тюмень Репутация: 99 Всего: 106 |
програмно размер любого окна задается с помощью единственной функции SetWindowPos, а не CB_SETMINVISIBLE. Чтобы получиь дескриптор окна списка нужно использовать GetComboBoxInfo или посылкой сообщения CB_GETCOMBOBOXINFO, что и делает GetComboBoxInfo. Для диалога достаточно будет сделать так, как сказала Earnest
-------------------- "Гений всегда разумнее, чем умнее. Ум — это машина, разум — водитель этой машины." |
|||
|
||||
Earnest |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5962 Регистрация: 17.6.2005 Где: Рязань Репутация: 33 Всего: 183 |
Да, точно, для установки высоты сообщения нет, это я с шириной перепутала, извиняюсь. Нужно выставлять размер окна.
Но проблема в том, что CB_GETCOMBOBOXINFO доступно только в XP. А в других версиях хандл списка приходится добывать всякими извращенными способами - через ловлю CTLCOLOR, например. Но по-моему, когда говоришь MoveWindow (или SetWindowPos) самой комбе, она высоту воспринимает именно как высоту вместе со списком. Хотя не уверена... -------------------- ... |
|||
|
||||
GremlinProg |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2706 Регистрация: 9.8.2005 Где: Тюмень Репутация: 99 Всего: 106 |
CB_GETCOMBOBOXINFO - это правильный и логичный вариант, Delphi решила эту проблему универсально: GW_CHILD вам ни что не напоминает, за что хвала Bornand'у он это продумал намного раньше, чем появилась XP. Комбо - компонент в обычном смысле, состоящий из поля с кнопкой, в расширенном смысле - состоящий из поля с кнопкой, едитом и списком-POPUP. В общем, читайте борланд, с комбо он тему рулит уже с первой версии, а я уважаю старших, MFC вроде тоже, не помню...
-------------------- "Гений всегда разумнее, чем умнее. Ум — это машина, разум — водитель этой машины." |
|||
|
||||
Earnest |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5962 Регистрация: 17.6.2005 Где: Рязань Репутация: 33 Всего: 183 |
Да никто не спорит, что
. Если он есть. А есть он только начиная с XP. Если кому-то это не важно - флаг в руки. Но приходится и 98 поддерживать... Ну или как минимум 2000... А выпадающий список не является потомком комбы, увы, он потомок desktop'а, не найдешь его, идя от комбы. Способ с CTLCOLOR я ведь не сама придумала, это от микрософтовских экспертов совет... Не факт, кстати, что борланд родной MS комбо использует. Изначально это жутко кривая вещь, наверное, код еще с 3.1 перенесли as is... Но, похоже, автора по вопросу длины выпадающего списка мы удовлетворили... Вот только молчит что-то... ![]() -------------------- ... |
|||
|
||||
GremlinProg |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2706 Регистрация: 9.8.2005 Где: Тюмень Репутация: 99 Всего: 106 |
Да я тоже не спорю, но CTLCOLOR не использую, просто говорю, что еще до XP эта проблема решалась с помощью GetWindow(hwnd,GW_CHILD) у Борланда. В любом случае - это уже другая тема. Я не говорю, что список - потомок комбы (комбо в смысле комбобокс?), это даже просто проверить: GetClassName. Эдит - это простой EDIT, а список - это ComboLBox, описание которого недокументировано. Ясно только одно: он порожден от LISTBOX'а. Причем едита не будет вообще, если комбобокс - фиксированный, значение просто будет рисоваться на месте едита. С попап списками я некоторое время разбирался и делал всплывающие контролы, дабы пустить пыль в глаза ), правда это не так просто как кажется.
-------------------- "Гений всегда разумнее, чем умнее. Ум — это машина, разум — водитель этой машины." |
|||
|
||||
![]() ![]() ![]() |
Правила форума "C/C++: Системное программирование и WinAPI" | |
|
На данный раздел распространяются Правила форума и Правила раздела С++:Общие вопросы . Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Chipset, Step, Fixin, GremlinProg, xvr. feodorv. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | C/C++: Системное программирование и WinAPI | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |