Страница: 1 |
Страница: 1 |
Вопрос: фуллкастом комбобокс, popup окно
Добавлено: 09.10.10 15:22
Автор вопроса: Winand | Web-сайт:
Делаю комбобокс без стрелки справа и с юникодом. Создаю WS_POPUP окно, предварительно зарегистрировав собственный класс окон (окно кстати иногда не создается, но это другой вопрос и искать причину еще даже не начинал). Потом добавляю туда listview контрол. Убирается этот попап, если текстбокс к которому я его "привязал" теряет фокус.
Вижу существенное отличие со стандартным комбобоксом: там всплывающий список убирается даже если щелкнуть по заголовку топ-левел окна, на котором лежит текстбокс. Но фокус-то текстовым полем при этом не теряется, так что у меня оно не срабатывает.
Как сделано тут я понять не могу пока что http://www.codeproject.com/KB/combobox/CustomComboBox.aspx
Ответы
Всего ответов: 14
Номер ответа: 1
Автор ответа:
AgentFire
ICQ: 192496851
Вопросов: 75
Ответов: 3178
Профиль | | #1
Добавлено: 09.10.10 16:51
А свой сделать, без API? По идее-то, не должно по внешности будет отличаться от системного
Номер ответа: 2
Автор ответа:
Winand
Вопросов: 87
Ответов: 2795
Web-сайт:
Профиль | | #2
Добавлено: 09.10.10 17:25
По сути я делаю даже не комбобокс, а всплывающий список, который может всплывать где угодно, например около текстового блока.
AgentFire, как вообще это возможно без api) Да и вопрос состоит в том, как сделать скрытие попапа, если я начинаю например перетаскивать форму, к которой он привязан. Видимо нужен SetCapture, но фокус-то находится в текстбоксе.
Сейчас в общем выложу то, что накодил
Номер ответа: 3
Автор ответа:
Winand
Вопросов: 87
Ответов: 2795
Web-сайт:
Профиль | | #3
Добавлено: 09.10.10 17:47
Вот. http://narod.ru/disk/25855170000/combolist.zip.html
Если щелкнуть по заголовку окна, то попап не исчезнет (логично), а лучше бы исчезал.
Номер ответа: 4
Автор ответа:
AgentFire
ICQ: 192496851
Вопросов: 75
Ответов: 3178
Профиль | | #4
Добавлено: 09.10.10 18:47
ммм, я понимаю. а что, конкретно, делает SetCapture?..
Номер ответа: 5
Автор ответа:
Winand
Вопросов: 87
Ответов: 2795
Web-сайт:
Профиль | | #5
Добавлено: 09.10.10 19:03
SetCapture(hwnd) передает события мыши указанному окну. То есть, например, щелкаешь в любом месте экрана, а событие маусклик отправляется тому окну, которое захватило экран
Номер ответа: 6
Автор ответа:
AgentFire
ICQ: 192496851
Вопросов: 75
Ответов: 3178
Профиль | | #6
Добавлено: 10.10.10 00:10
прекрасно. юзай его. причем тогдыть фокус текстбокса?..
Номер ответа: 7
Автор ответа:
Winand
Вопросов: 87
Ответов: 2795
Web-сайт:
Профиль | | #7
Добавлено: 10.10.10 01:09
на мсдн написано что только foreground (окно с фокусом) может сделать setcapture.
Номер ответа: 8
Автор ответа:
AgentFire
ICQ: 192496851
Вопросов: 75
Ответов: 3178
Профиль | | #8
Добавлено: 10.10.10 09:36
делай SetCapture на TextBox. У него же есть .Parent.Bounds ?
Номер ответа: 9
Автор ответа:
Winand
Вопросов: 87
Ответов: 2795
Web-сайт:
Профиль | | #9
Добавлено: 10.10.10 11:23
гм приходит 2 подряд WM_CAPTURECHANGED, если проверить GetCapture, то сначала окно нужное закэпчурено, а при втором сообщении кэпчур уже снят (GetCapture=0).
Номер ответа: 10
Автор ответа:
AgentFire
ICQ: 192496851
Вопросов: 75
Ответов: 3178
Профиль | | #10
Добавлено: 10.10.10 12:17
другими словами, система тебя на*бывает и злостно устраивает подляки?)
Номер ответа: 11
Автор ответа:
Eugy
Вопросов: 0
Ответов: 73
Профиль | | #11
Добавлено: 12.10.10 02:11
foregrownd имеет отношение к Z-порядку, а не к фокусу, т.о. ни что не мешает делать SetCapture на listview который имеет foregrownd-родителя. И еще можно бы обрабатывать WM_ACTIVATE, дабы не сбивать фокус с textbox'a.
Номер ответа: 12
Автор ответа:
Winand
Вопросов: 87
Ответов: 2795
Web-сайт:
Профиль | | #12
Добавлено: 12.10.10 20:30
Проще всего было бы найти готовый простой пример подобного контрола) А то может делаю чо-то как-то не так
Номер ответа: 13
Автор ответа:
Администратор
ICQ: 278109632
Вопросов: 42
Ответов: 3949
Web-сайт:
Профиль | | #13
Добавлено: 13.10.10 09:23
Жаль, нет времени щас посмотреть. Вечером поглядим.
Номер ответа: 14
Автор ответа:
Winand
Вопросов: 87
Ответов: 2795
Web-сайт:
Профиль | | #14
Добавлено: 13.10.10 23:17
Executioner погляди, да.
Вот бы заиметь ToolStripDropDown, но на апи http://www.codeproject.com/KB/miscctrl/simplepopup.aspx?msg=2882461