На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
! Правила раздела Visual C++ / MFC / WTL (далее Раздела)
1) На Раздел распространяются все Правила Форума.
2) Перед тем, как создать новый топик, убедитесь, что Вы читали Правила создания тем в Разделе.
3) Вопросы, не связанные с программированием (настройки MS Visual Studio, книги, библиотеки и т.д.),
обсуждаются в разделе C/C++: Прочее
4) Вопросы разработки .NET (Windows Form, C++/CLI и т.п.) приложений на Visual C++/C# обсуждаются в разделе .NET.
5) Нарушение Правил может повлечь наказание со стороны модераторов.

Полезные ссылки:
user posted image FAQ Раздела user posted image Обновления для FAQ Раздела user posted image Поиск по Разделу user posted image MSDN Library Online
Модераторы: ElcnU
  
> Нажатие на Enter в CComboBox , Определить в каком CComboBox нажали
    На окне диалога расположено два CComboBox с типом "Раскрывающееся меню".
    В CComboBox вводим текст и нажимаем клавишу Enter.
    В обработчике диалога:
    ExpandedWrap disabled
      void CtestDlg::OnOK()
      {
        CWnd *pWnd = GetFocus();
        if( pWnd ) {
         int p = pWnd->GetDlgCtrlID();  // p для любого CComboBox всегда равно 1001
         ....
        }
      }

    Как определить в каком CComboBox нажали на клавишу Enter?
      если поймал 1001, то запроси ID родителя
      1001 - это вроде как ID эдита комбобокса
        Цитата ElcnU @
        если поймал 1001, то запроси ID родителя
        1001 - это вроде как ID эдита комбобокса

        А разве этот самый ID не указывается в методе "Create"
        при создании контрола ?
        Идентификатор необходим, чтобы отличать один контрол (или пункт меню)
        от другого. Те "идентифицировать".
        Одинаковые значения идентификаторов для разных объектов крайне подозрительны..
        Сообщение отредактировано: ЫукпШ -
          Цитата ЫукпШ @
          Одинаковые значения идентификаторов для разных объектов крайне подозрительны..

          в рамках одного родителя
            Цитата ElcnU @
            Цитата ЫукпШ @
            Одинаковые значения идентификаторов для разных объектов крайне подозрительны..

            в рамках одного родителя

            Да. Но число возможных ID достаточно настолько,
            чтобы их не экономить.
            Кроме того, ID для контролов имеют актуальность только
            для обработчиков, которые сконструированы для их использования.
            Казалось бы.
            Теоретически, если обработчики будут использовать только хзндлы контролов
            (а в сообщениях вместе с ID контрола передаётся и его хэндл), тогда ID вообще не нужны.
            Обнулим все эти параметры.
            Но что там может произойти внутри Виндус при таких мероприятиях вообще не известно,
            лучше не делать таких опытов.
            Сообщение отредактировано: ЫукпШ -
              Получилось так:
              ExpandedWrap disabled
                void CtestDlg::OnOK()
                {
                 CWnd *pWnd = GetFocus();
                 if( pWnd ) {
                  pWnd = pWnd->GetParent();
                  if( pWnd ) {
                   switch( pWnd->GetDlgCtrlID() ) {
                    .....
                   }
                  }
                 }
                 SendMessage( WM_NEXTDLGCTL, 0, 0);
                }

              Спасибо всем!
                Цитата Vladimir_ @
                Получилось так:

                void CtestDlg::OnOK()
                {
                 CWnd *pWnd = GetFocus();
                 if( pWnd ) {
                  pWnd = pWnd->GetParent();


                Наверное, здесь нужно проверить, что parent именно combobox, например при помощи GetClassName. Иначе, для других котролов у тебя здесь вернётся указатель на диалог.

                Добавлено
                Кстати, ещё можно в OnInitDialog тупо поменять id для editа

                ExpandedWrap disabled
                  bool ResetComboBoxIDs(HWND hComboBox)
                  {
                      const int id = ::GetDlgCtrlID(hComboBox);
                      COMBOBOXINFO cbi;
                      cbi.cbSize = sizeof(cbi);
                      if (!::GetComboBoxInfo(hComboBox, &cbi))
                          return false;
                   
                      ::SetWindowLong(cbi.hwndItem, GWL_ID, id);
                      //::SetWindowLong(cbi.hwndList, GWL_ID, id);
                   
                      return true;
                  }
                  Цитата ЫукпШ @
                  Да. Но число возможных ID достаточно настолько,
                  чтобы их не экономить.

                  пример, номера квартир. В общем чисел достаточно, чтобы их не экономить, но у каждого дома квартиры начинаются с 1.
                  Сообщение отредактировано: ElcnU -
                  0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
                  0 пользователей:


                  Рейтинг@Mail.ru
                  [ Script execution time: 0,0346 ]   [ 17 queries used ]   [ Generated: 28.03.24, 09:08 GMT ]