Страница: 1 |
Вопрос: API Listbox | Добавлено: 31.05.06 15:31 |
Автор вопроса: ![]() |
В порыве своих суицидальных фантазий решил написать свой ListBox и вот сталкнулся с проблемой:
При нажатии DropDown Button должен выскакивать список (обычный, как у стандартного комбобокса). Список создаю так CreateWindowEx(dwStyleEx, "ListBox", "myList", WS_VISIBLE Or WS_POPUPOr dwStyle, nLeft, nTop, nWidth, nHeight, hParent, 0, App.hInstance, ByVal 0) Список создается, НО! При попытке добавить значение в этот список ничего не получается!!! Добавляю так: SendMessage hList, LB_ADDSTRING, 0, ByVal "test1" Если создавать список так: CreateWindowEx(dwStyleEx, "ListBox", "myList", WS_VISIBLE Or WS_CHILD Or dwStyle, nLeft, nTop, nWidth, nHeight, hParent, 0, App.hInstance, ByVal 0) То все работает как надо! Вопрос: как все же добавлять в список значения с флагом WS_POPUP? Или возможны альтернативные варианты создания всплывающего листа? Заранее спасибо! |
Ответы | Всего ответов: 9 |
Номер ответа: 1 Автор ответа: ![]() ![]() ![]() ![]() ICQ: 249094859 Вопросов: 0 Ответов: 310 |
Профиль | Цитата | #1 | Добавлено: 01.06.06 12:14 |
Альтернатива - делать видимым обычный контрол ComboBox. |
Номер ответа: 2 Автор ответа: ![]() ![]() Вопросов: 0 Ответов: 1066 |
Профиль | Цитата | #2 | Добавлено: 01.06.06 14:21 |
Альтернатива - читать msdn.
К каким окнам может быть применено WS_POPUP. делаешь для листбокса окно-родитель без заголовка, и на нём создаешь свой листбокс так, чтобы он полностью закрывал родителя. Когда нужно чтобы список всплыл - показываешь родителя. |
Номер ответа: 3 Автор ответа: ![]() ![]() ![]() ![]() ICQ: 36063058 Вопросов: 1 Ответов: 3 |
Профиль | Цитата | #3 | Добавлено: 01.06.06 16:09 |
Да, такая мысль у меня была! Но вот не могу найти название класса (Просто форма), что бы можно было создать ее через CreateWindowEx. |
Номер ответа: 4 Автор ответа: ![]() ![]() ![]() ![]() ICQ: 334781088 Вопросов: 108 Ответов: 2822 |
Профиль | Цитата | #4 | Добавлено: 01.06.06 16:19 |
А обязательно создавать его через CreateWindowEx?
Ну если уж так надо - RegisterClassEx и CreateWindowEx. |
Номер ответа: 5 Автор ответа: ![]() ![]() Вопросов: 0 Ответов: 1066 |
Профиль | Цитата | #5 | Добавлено: 01.06.06 16:39 |
Можно родителем обычную vb-форму использовать.
Если охота самому сделать - регистрируешь класс. Название - любое, например "mysuperpuperclass". Заполняешь структуру для передачи в RegisterClassEx и вызываешь. Если всё нормально заполнил - ф-ция вернет ненулевой результат. И затем создаёшь окно своего класса. Заодно напишешь WndProc (она будет совсем простенькая) |
Номер ответа: 6 Автор ответа: ![]() ![]() ![]() ![]() ICQ: 36063058 Вопросов: 1 Ответов: 3 |
Профиль | Цитата | #6 | Добавлено: 01.06.06 16:50 |
Самому делать не охота!!! НО, когда используешь vb форму, в качестве родителя, то есть один маленький нюанс, а именно, если этот контрол в будущем будет стоять в модальной форме, то открытия списка (в нашем случаи родительскую форму немодальную) приводит естественно к ошибке. Попробую зарегистрировать свою форму…. 8) |
Номер ответа: 7 Автор ответа: ![]() ![]() Вопросов: 0 Ответов: 1066 |
Профиль | Цитата | #7 | Добавлено: 01.06.06 17:54 |
С чего это вдруг открытие списка приводит к ошибке?
Если ты хочешь заполнять список из того кода, который вызвал модальную форму, естественно ничего не получится. Заполнять лист надо в Form_Load той формы, где листбокс. |
Номер ответа: 8 Автор ответа: ![]() ![]() ![]() ![]() ICQ: 36063058 Вопросов: 1 Ответов: 3 |
Профиль | Цитата | #8 | Добавлено: 01.06.06 18:18 |
В общем, проблема разрешилась! Всем спасибо за советы. На днях попробую зарегистрировать свой класс.
Решение проблемы: По запаре не заметил, что при создании окна, помимо прочих флагов, передавался еще и LBS_OWNERDRAWFIXED! В нем вся проблема и была. ![]() |
Номер ответа: 9 Автор ответа: ![]() ![]() ICQ: 254226129 Вопросов: 30 Ответов: 107 |
Профиль | Цитата | #9 | Добавлено: 01.06.06 18:33 |
Да можно просто взять пример SNE и все дела |
Страница: 1 |
|