Доброго времени суток всем форумчанам!
У меня возник вопрос, очень надеюсь на вашу подсказку.
Необходимо разграничить поведение ComboBox, а в частности его DropDown списка.
Как можно определить каким образом был открыт DropDown список:
Вызовом ShowDropDown(TRUE) или щелчком мышки по кнопке выпадающего списка?
Спасибо!
Здравствуйте, Alexandrovich, Вы писали:
A>Доброго времени суток всем форумчанам!
A>У меня возник вопрос, очень надеюсь на вашу подсказку.
A>Необходимо разграничить поведение ComboBox, а в частности его DropDown списка.
A>Как можно определить каким образом был открыт DropDown список:
A>Вызовом ShowDropDown(TRUE) или щелчком мышки по кнопке выпадающего списка?
A>Спасибо!
Выделенное — откуда? MFC?
В любом случае, это действие совершается по CB_SHOWDROPDOWN, из обработчика никак не отследить — нужен сабклассинг кнопки, оттуда передавать дополнительную информацию в обработчик CB_SHOWDROPDOWN о том, что "я пришло c кнопки"
Здравствуйте, kvasya, Вы писали:
K>Здравствуйте, Alexandrovich, Вы писали:
A>>Доброго времени суток всем форумчанам!
A>>У меня возник вопрос, очень надеюсь на вашу подсказку.
A>>Необходимо разграничить поведение ComboBox, а в частности его DropDown списка.
A>>Как можно определить каким образом был открыт DropDown список:
A>>Вызовом ShowDropDown(TRUE) или щелчком мышки по кнопке выпадающего списка?
A>>Спасибо!
K>Выделенное — откуда? MFC?
K>В любом случае, это действие совершается по CB_SHOWDROPDOWN, из обработчика никак не отследить — нужен сабклассинг кнопки, оттуда передавать дополнительную информацию в обработчик CB_SHOWDROPDOWN о том, что "я пришло c кнопки"
Все из WTL.
Только начинаю разбираться с WTL и программированием интерфейсов. Пока не очень в этих вещах, посему прошу подсказки как осуществить субклассинг кнопки? И еще по ходу дела возник вопрос: Как отследить попадание фокуса на элемент Edit комбобокса?
Здравствуйте, Alexandrovich, Вы писали:
A>Здравствуйте, kvasya, Вы писали:
K>>Здравствуйте, Alexandrovich, Вы писали:
A>>>Доброго времени суток всем форумчанам!
A>>>У меня возник вопрос, очень надеюсь на вашу подсказку.
A>>>Необходимо разграничить поведение ComboBox, а в частности его DropDown списка.
A>>>Как можно определить каким образом был открыт DropDown список:
A>>>Вызовом ShowDropDown(TRUE) или щелчком мышки по кнопке выпадающего списка?
A>>>Спасибо!
K>>Выделенное — откуда? MFC?
K>>В любом случае, это действие совершается по CB_SHOWDROPDOWN, из обработчика никак не отследить — нужен сабклассинг кнопки, оттуда передавать дополнительную информацию в обработчик CB_SHOWDROPDOWN о том, что "я пришло c кнопки"
A>Все из WTL.
A>Только начинаю разбираться с WTL и программированием интерфейсов. Пока не очень в этих вещах, посему прошу подсказки как осуществить субклассинг кнопки? И еще по ходу дела возник вопрос: Как отследить попадание фокуса на элемент Edit комбобокса?
А насколько надежен вариант вызывать GetComboBoxInfo из обработчика CBN_DROPDOWN и там смотреть флаг stateButton == STATE_SYSTEM_PRESSED?
LRESULT CBandComboBoxCtrl::OnCBDropDown(WORD, WORD pnmh, HWND, BOOL& handled)
{
COMBOBOXINFO pcbi;
pcbi.cbSize = sizeof COMBOBOXINFO;
::GetComboBoxInfo(*this, &pcbi);
// Если нажата кнопка ComboBox
if(pcbi.stateButton == STATE_SYSTEM_PRESSED)
{
RestoreSavedHistory();
}
return 0;
}
Здравствуйте, Alexandrovich, Вы писали:
A>А насколько надежен вариант вызывать GetComboBoxInfo из обработчика CBN_DROPDOWN и там смотреть флаг stateButton == STATE_SYSTEM_PRESSED?
A>A>LRESULT CBandComboBoxCtrl::OnCBDropDown(WORD, WORD pnmh, HWND, BOOL& handled)
A>{
A> COMBOBOXINFO pcbi;
A> pcbi.cbSize = sizeof COMBOBOXINFO;
A> ::GetComboBoxInfo(*this, &pcbi);
A> // Если нажата кнопка ComboBox
A> if(pcbi.stateButton == STATE_SYSTEM_PRESSED)
A> {
A> RestoreSavedHistory();
A> }
A> return 0;
A>}
A>
Да, так лучше гораздо )