ComboBox и открытие выпадающего списка DROPDOWN
От: Alexandrovich Россия  
Дата: 16.09.09 16:00
Оценка:
Доброго времени суток всем форумчанам!
У меня возник вопрос, очень надеюсь на вашу подсказку.

Необходимо разграничить поведение ComboBox, а в частности его DropDown списка.

Как можно определить каким образом был открыт DropDown список:
Вызовом ShowDropDown(TRUE) или щелчком мышки по кнопке выпадающего списка?

Спасибо!
Re: ComboBox и открытие выпадающего списка DROPDOWN
От: kvasya  
Дата: 17.09.09 10:31
Оценка:
Здравствуйте, Alexandrovich, Вы писали:

A>Доброго времени суток всем форумчанам!

A>У меня возник вопрос, очень надеюсь на вашу подсказку.

A>Необходимо разграничить поведение ComboBox, а в частности его DropDown списка.


A>Как можно определить каким образом был открыт DropDown список:

A>Вызовом ShowDropDown(TRUE) или щелчком мышки по кнопке выпадающего списка?

A>Спасибо!


Выделенное — откуда? MFC?

В любом случае, это действие совершается по CB_SHOWDROPDOWN, из обработчика никак не отследить — нужен сабклассинг кнопки, оттуда передавать дополнительную информацию в обработчик CB_SHOWDROPDOWN о том, что "я пришло c кнопки"
Re[2]: ComboBox и открытие выпадающего списка DROPDOWN
От: Alexandrovich Россия  
Дата: 17.09.09 13:19
Оценка:
Здравствуйте, 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 комбобокса?
Re[3]: ComboBox и открытие выпадающего списка DROPDOWN
От: Alexandrovich Россия  
Дата: 17.09.09 13:44
Оценка: 1 (1)
Здравствуйте, 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;
}
Re[4]: ComboBox и открытие выпадающего списка DROPDOWN
От: kvasya  
Дата: 21.09.09 06:49
Оценка:
Здравствуйте, 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>


Да, так лучше гораздо )
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.